Compare commits
	
		
			517 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					ef2500dcc7 | ||
| 
						 | 
					70379aaf6e | ||
| 
						 | 
					4d471b38fb | ||
| 
						 | 
					895b8ed373 | ||
| 
						 | 
					efb32ac10d | ||
| 
						 | 
					7f3028cbdb | ||
| 
						 | 
					1c1dbe6464 | ||
| 
						 | 
					b98b68c718 | ||
| 
						 | 
					f55edced32 | ||
| 
						 | 
					0d7b482edd | ||
| 
						 | 
					933766120f | ||
| 
						 | 
					fbfa2ec154 | ||
| 
						 | 
					0e75c44cb8 | ||
| 
						 | 
					bce84023ca | ||
| 
						 | 
					a0cd7c57e2 | ||
| 
						 | 
					d535cea7db | ||
| 
						 | 
					21f3b2b199 | ||
| 
						 | 
					9f12bcf676 | ||
| 
						 | 
					dd1688a587 | ||
| 
						 | 
					8c50ef81af | ||
| 
						 | 
					8b753c83af | ||
| 
						 | 
					7e3300552d | ||
| 
						 | 
					a3be7337bb | ||
| 
						 | 
					1bf87a4cb2 | ||
| 
						 | 
					d4269ad79b | ||
| 
						 | 
					807cd20da0 | ||
| 
						 | 
					23a247c048 | ||
| 
						 | 
					2b3674dcae | ||
| 
						 | 
					86e120ea5f | ||
| 
						 | 
					48725546a2 | ||
| 
						 | 
					4731bbfe2f | ||
| 
						 | 
					6dc369efbc | ||
| 
						 | 
					afc8eefaf1 | ||
| 
						 | 
					d8a532febe | ||
| 
						 | 
					fe39d38897 | ||
| 
						 | 
					44cb254ee0 | ||
| 
						 | 
					72d6d87bf9 | ||
| 
						 | 
					81b8082fd4 | ||
| 
						 | 
					948d96ed28 | ||
| 
						 | 
					765a6417b2 | ||
| 
						 | 
					5a895a09ca | ||
| 
						 | 
					2773594274 | ||
| 
						 | 
					846bb46e33 | ||
| 
						 | 
					33d69e8dea | ||
| 
						 | 
					bbf5a5a570 | ||
| 
						 | 
					651169f726 | ||
| 
						 | 
					9b8dc0916c | ||
| 
						 | 
					f7ca5dfde2 | ||
| 
						 | 
					80b88fbbb4 | ||
| 
						 | 
					98281e7df6 | ||
| 
						 | 
					470aca5c68 | ||
| 
						 | 
					8f0183eeb8 | ||
| 
						 | 
					b5d88076a8 | ||
| 
						 | 
					56ceb86f97 | ||
| 
						 | 
					abbc3d4a63 | ||
| 
						 | 
					d0609781e8 | ||
| 
						 | 
					2ff3021eae | ||
| 
						 | 
					31c286ca57 | ||
| 
						 | 
					dd982373a7 | ||
| 
						 | 
					42d3df0e9c | ||
| 
						 | 
					774339e98f | ||
| 
						 | 
					b0c1c7e2a7 | ||
| 
						 | 
					36f882d916 | ||
| 
						 | 
					b1225583cd | ||
| 
						 | 
					b491a6921c | ||
| 
						 | 
					63fedc6a41 | ||
| 
						 | 
					aefd0364fb | ||
| 
						 | 
					3ae7073198 | ||
| 
						 | 
					9c306812f9 | ||
| 
						 | 
					3790a2fcb2 | ||
| 
						 | 
					0b86645a63 | ||
| 
						 | 
					fa206be639 | ||
| 
						 | 
					350ee49293 | ||
| 
						 | 
					210d4d48a7 | ||
| 
						 | 
					ad8224bcec | ||
| 
						 | 
					9943dff277 | ||
| 
						 | 
					bf0b7d989f | ||
| 
						 | 
					6ec90b3b9b | ||
| 
						 | 
					2a2214a0ac | ||
| 
						 | 
					31b231804f | ||
| 
						 | 
					a4c66663c1 | ||
| 
						 | 
					b9e054093a | ||
| 
						 | 
					1c7320ce1e | ||
| 
						 | 
					50841b5109 | ||
| 
						 | 
					babbbb4e57 | ||
| 
						 | 
					e2544129bc | ||
| 
						 | 
					39b5b3af9f | ||
| 
						 | 
					a263f54744 | ||
| 
						 | 
					543072ca25 | ||
| 
						 | 
					39356d72b4 | ||
| 
						 | 
					e013ac3a20 | ||
| 
						 | 
					a85c7a0404 | ||
| 
						 | 
					4852ed4668 | ||
| 
						 | 
					d36fce44d0 | ||
| 
						 | 
					60e63ac9cc | ||
| 
						 | 
					a97c48546c | ||
| 
						 | 
					dd96147712 | ||
| 
						 | 
					912bf62e9b | ||
| 
						 | 
					0791b7cccb | ||
| 
						 | 
					78c194faee | ||
| 
						 | 
					9d00126c83 | ||
| 
						 | 
					6fa54dd4db | ||
| 
						 | 
					eb6420125e | ||
| 
						 | 
					51be2d5dc5 | ||
| 
						 | 
					762a01e619 | ||
| 
						 | 
					f0fb351137 | ||
| 
						 | 
					6d39026616 | ||
| 
						 | 
					723f8ea744 | ||
| 
						 | 
					f941f432e9 | ||
| 
						 | 
					631f99f97b | ||
| 
						 | 
					1840089789 | ||
| 
						 | 
					36029e38a7 | ||
| 
						 | 
					3abffc4d59 | ||
| 
						 | 
					0f01c6c07c | ||
| 
						 | 
					68b001105d | ||
| 
						 | 
					d459dd7f8c | ||
| 
						 | 
					75a00fabe9 | ||
| 
						 | 
					091a3692e3 | ||
| 
						 | 
					3bcc522590 | ||
| 
						 | 
					6c8d39d746 | ||
| 
						 | 
					b6720a2b43 | ||
| 
						 | 
					6753b795b9 | ||
| 
						 | 
					cefbcce8e3 | ||
| 
						 | 
					910c5420e3 | ||
| 
						 | 
					02c8ed0764 | ||
| 
						 | 
					fda13addf0 | ||
| 
						 | 
					211a06dbf1 | ||
| 
						 | 
					e886190e8e | ||
| 
						 | 
					8b3a1fd357 | ||
| 
						 | 
					e7adf92b59 | ||
| 
						 | 
					7de14a2bd9 | ||
| 
						 | 
					f37225ee9a | ||
| 
						 | 
					52f9042ef0 | ||
| 
						 | 
					d38ef69120 | ||
| 
						 | 
					6341ad15f8 | ||
| 
						 | 
					f3f01d5f15 | ||
| 
						 | 
					23d11551c6 | ||
| 
						 | 
					73b63c8379 | ||
| 
						 | 
					2652998aba | ||
| 
						 | 
					254bfd11a3 | ||
| 
						 | 
					2c61248016 | ||
| 
						 | 
					45e56b332e | ||
| 
						 | 
					8003691e64 | ||
| 
						 | 
					25b1801fe4 | ||
| 
						 | 
					737bb252a7 | ||
| 
						 | 
					14e0aa0952 | ||
| 
						 | 
					e7d83a5918 | ||
| 
						 | 
					bfbb2fb2ab | ||
| 
						 | 
					c8f686b7aa | ||
| 
						 | 
					77fa064db5 | ||
| 
						 | 
					6b70ccfd79 | ||
| 
						 | 
					9b1995e90f | ||
| 
						 | 
					75785f70c7 | ||
| 
						 | 
					ea9ad92cc4 | ||
| 
						 | 
					ad8762a7c4 | ||
| 
						 | 
					c73bc0ca2c | ||
| 
						 | 
					07de5e53e3 | ||
| 
						 | 
					141812bf4d | ||
| 
						 | 
					2308826147 | ||
| 
						 | 
					01fa098078 | ||
| 
						 | 
					167cc2f3fa | ||
| 
						 | 
					ea53f79bb8 | ||
| 
						 | 
					4b75ef1889 | ||
| 
						 | 
					c4ce6a2062 | ||
| 
						 | 
					9e4e0e3510 | ||
| 
						 | 
					c0228965f4 | ||
| 
						 | 
					0896bd881c | ||
| 
						 | 
					42395d49fd | ||
| 
						 | 
					e08d22d51c | ||
| 
						 | 
					f0b429039e | ||
| 
						 | 
					d63baa2473 | ||
| 
						 | 
					e8b4acbee6 | ||
| 
						 | 
					b4734ea607 | ||
| 
						 | 
					6698b049a4 | ||
| 
						 | 
					68861fabfb | ||
| 
						 | 
					d93e3ab1b6 | ||
| 
						 | 
					bfd71b5add | ||
| 
						 | 
					9c8e8fa4e0 | ||
| 
						 | 
					2e2c6958d6 | ||
| 
						 | 
					4ba91f9df8 | ||
| 
						 | 
					3b604723bd | ||
| 
						 | 
					a2877729ff | ||
| 
						 | 
					605ae68f6b | ||
| 
						 | 
					ef8afd8b65 | ||
| 
						 | 
					9365c67a6b | ||
| 
						 | 
					8e3f10673e | ||
| 
						 | 
					cc95604bd9 | ||
| 
						 | 
					6799312ad0 | ||
| 
						 | 
					8dee0fcd12 | ||
| 
						 | 
					dca78048c7 | ||
| 
						 | 
					014d32cec1 | ||
| 
						 | 
					477d845c39 | ||
| 
						 | 
					6e5155ffbf | ||
| 
						 | 
					39679992f0 | ||
| 
						 | 
					4dee43a863 | ||
| 
						 | 
					5c599bd3d2 | ||
| 
						 | 
					be0dbf6953 | ||
| 
						 | 
					a59572b392 | ||
| 
						 | 
					19cdb388e5 | ||
| 
						 | 
					e68fa13289 | ||
| 
						 | 
					d938a2c0d6 | ||
| 
						 | 
					16285ce2eb | ||
| 
						 | 
					e356189010 | ||
| 
						 | 
					4230a07c94 | ||
| 
						 | 
					f2b0f67b5f | ||
| 
						 | 
					a8766a0b0b | ||
| 
						 | 
					b78b1b4860 | ||
| 
						 | 
					6118b0d012 | ||
| 
						 | 
					ca48defd24 | ||
| 
						 | 
					93787c4c45 | ||
| 
						 | 
					5562144209 | ||
| 
						 | 
					b28f81adbb | ||
| 
						 | 
					64846ed2de | ||
| 
						 | 
					d7d747af67 | ||
| 
						 | 
					41e9332420 | ||
| 
						 | 
					23613800b2 | ||
| 
						 | 
					8100461520 | ||
| 
						 | 
					07afff6ef0 | ||
| 
						 | 
					400c26a1d7 | ||
| 
						 | 
					b6f7df332b | ||
| 
						 | 
					e5eee009b3 | ||
| 
						 | 
					bb731c6368 | ||
| 
						 | 
					a418ba0a1e | ||
| 
						 | 
					cea462662d | ||
| 
						 | 
					f3a8b1171b | ||
| 
						 | 
					bb773ccc0a | ||
| 
						 | 
					61dc499369 | ||
| 
						 | 
					d806795a86 | ||
| 
						 | 
					91f92f0fb9 | ||
| 
						 | 
					bde8da5e6b | ||
| 
						 | 
					f134368e6d | ||
| 
						 | 
					a6ff166e4e | ||
| 
						 | 
					3ea6bd6217 | ||
| 
						 | 
					6405ebfc3e | ||
| 
						 | 
					94ab114cd3 | ||
| 
						 | 
					954f58fdbc | ||
| 
						 | 
					8232e783fa | ||
| 
						 | 
					5aa21deb07 | ||
| 
						 | 
					b7ac11222a | ||
| 
						 | 
					b24da8c380 | ||
| 
						 | 
					ab2be759af | ||
| 
						 | 
					78e5528c0d | ||
| 
						 | 
					01ce4238dd | ||
| 
						 | 
					a82e8e32a0 | ||
| 
						 | 
					770ab9c8ec | ||
| 
						 | 
					f63a71910c | ||
| 
						 | 
					8fa27f8844 | ||
| 
						 | 
					ea59fa2c2d | ||
| 
						 | 
					a1769aa905 | ||
| 
						 | 
					78119d6547 | ||
| 
						 | 
					f27d76fa9d | ||
| 
						 | 
					4f8534169a | ||
| 
						 | 
					f531c9d9a7 | ||
| 
						 | 
					1a80138026 | ||
| 
						 | 
					4ff904f3cd | ||
| 
						 | 
					721193ccb8 | ||
| 
						 | 
					b263fa4375 | ||
| 
						 | 
					4681004b52 | ||
| 
						 | 
					0ab688964f | ||
| 
						 | 
					7e0ef60e24 | ||
| 
						 | 
					41339c8df4 | ||
| 
						 | 
					119c077d25 | ||
| 
						 | 
					9af3f7c579 | ||
| 
						 | 
					e7c93b7abd | ||
| 
						 | 
					20b655c7a2 | ||
| 
						 | 
					9fca5b1e42 | ||
| 
						 | 
					1c581f8e8f | ||
| 
						 | 
					8d35e15624 | ||
| 
						 | 
					cf42fe1496 | ||
| 
						 | 
					1af11bd088 | ||
| 
						 | 
					073ec319e7 | ||
| 
						 | 
					5852c3548b | ||
| 
						 | 
					2344a1eacf | ||
| 
						 | 
					d0887fbea7 | ||
| 
						 | 
					e5ebda1b1e | ||
| 
						 | 
					8d1681dbfc | ||
| 
						 | 
					7221797826 | ||
| 
						 | 
					f2fdbb077c | ||
| 
						 | 
					a6fdb107b4 | ||
| 
						 | 
					7f31038462 | ||
| 
						 | 
					5fb7c78619 | ||
| 
						 | 
					603345205a | ||
| 
						 | 
					bd85ebc8d6 | ||
| 
						 | 
					2aca6d9300 | ||
| 
						 | 
					4919cb0f69 | ||
| 
						 | 
					d134c342e8 | ||
| 
						 | 
					b1c7e78d12 | ||
| 
						 | 
					0a0766afbd | ||
| 
						 | 
					2d39911cba | ||
| 
						 | 
					3bf60002f4 | ||
| 
						 | 
					42db01335e | ||
| 
						 | 
					752e1c632c | ||
| 
						 | 
					892d2014ca | ||
| 
						 | 
					1fdc486cd5 | ||
| 
						 | 
					9e7f7f734e | ||
| 
						 | 
					e311f8a5c6 | ||
| 
						 | 
					82755ab8db | ||
| 
						 | 
					62823e3d83 | ||
| 
						 | 
					66077c9662 | ||
| 
						 | 
					74e129154b | ||
| 
						 | 
					75880d9134 | ||
| 
						 | 
					245fe93be4 | ||
| 
						 | 
					54a0baa2fa | ||
| 
						 | 
					4e18ccc9e2 | ||
| 
						 | 
					9ed5a187a9 | ||
| 
						 | 
					a636ba6117 | ||
| 
						 | 
					facdf0aafe | ||
| 
						 | 
					75dcf74148 | ||
| 
						 | 
					e252dac59c | ||
| 
						 | 
					9d384f2bc2 | ||
| 
						 | 
					cc9a1c9f47 | ||
| 
						 | 
					b43eafd09a | ||
| 
						 | 
					141470fdf4 | ||
| 
						 | 
					2e18464635 | ||
| 
						 | 
					87a287e0c9 | ||
| 
						 | 
					a38eafbf56 | ||
| 
						 | 
					81c7203642 | ||
| 
						 | 
					c515a5e4a1 | ||
| 
						 | 
					02e6807e44 | ||
| 
						 | 
					90bb0ef071 | ||
| 
						 | 
					209988cf9e | ||
| 
						 | 
					da130926a9 | ||
| 
						 | 
					4c51c29428 | ||
| 
						 | 
					2301d2e60a | ||
| 
						 | 
					53a5b5aa0a | ||
| 
						 | 
					d13adfee80 | ||
| 
						 | 
					9752bf2878 | ||
| 
						 | 
					9949eeb389 | ||
| 
						 | 
					aceed9cc52 | ||
| 
						 | 
					0371ca35d6 | ||
| 
						 | 
					ce0a350ef2 | ||
| 
						 | 
					3b58ba8678 | ||
| 
						 | 
					a69b45d849 | ||
| 
						 | 
					ad0a1044b9 | ||
| 
						 | 
					5336ec2db2 | ||
| 
						 | 
					e20cd6dd02 | ||
| 
						 | 
					66f16f6617 | ||
| 
						 | 
					0755487e02 | ||
| 
						 | 
					afeb37ae5e | ||
| 
						 | 
					cc05fb927f | ||
| 
						 | 
					facdf5b7a7 | ||
| 
						 | 
					66bedd4d54 | ||
| 
						 | 
					3a3c1efe46 | ||
| 
						 | 
					1a069c2b52 | ||
| 
						 | 
					f7de9ffbc6 | ||
| 
						 | 
					3c6cfa8ecf | ||
| 
						 | 
					585d01895b | ||
| 
						 | 
					63cac2a3a8 | ||
| 
						 | 
					0623fbfdf1 | ||
| 
						 | 
					0c711269ae | ||
| 
						 | 
					f676d27a3b | ||
| 
						 | 
					64167df588 | ||
| 
						 | 
					398f3ee74b | ||
| 
						 | 
					125f02b8a2 | ||
| 
						 | 
					eeeabeec94 | ||
| 
						 | 
					5fe0ebaeda | ||
| 
						 | 
					fda59f51f7 | ||
| 
						 | 
					e8de74c6a5 | ||
| 
						 | 
					da6716b107 | ||
| 
						 | 
					62267f4e8e | ||
| 
						 | 
					fd1c91edac | ||
| 
						 | 
					a0b2010994 | ||
| 
						 | 
					bda796ae98 | ||
| 
						 | 
					8b3b03b312 | ||
| 
						 | 
					cbc756a3f8 | ||
| 
						 | 
					9af7a7661c | ||
| 
						 | 
					eab89e4736 | ||
| 
						 | 
					8391cee4f3 | ||
| 
						 | 
					fcd0e30d64 | ||
| 
						 | 
					4a454c9431 | ||
| 
						 | 
					cd751071e1 | ||
| 
						 | 
					c921e8b35c | ||
| 
						 | 
					60d5591401 | ||
| 
						 | 
					98e8e57747 | ||
| 
						 | 
					f6a4f937ee | ||
| 
						 | 
					1e5eda927c | ||
| 
						 | 
					c6eb73bc7b | ||
| 
						 | 
					c49d8ab921 | ||
| 
						 | 
					27b310ee68 | ||
| 
						 | 
					f6d0fb1d7e | ||
| 
						 | 
					ddc5fd8c96 | ||
| 
						 | 
					26b13fbcd4 | ||
| 
						 | 
					91b98085f6 | ||
| 
						 | 
					1c948d6e45 | ||
| 
						 | 
					76cbb05f19 | ||
| 
						 | 
					e7fcd98107 | ||
| 
						 | 
					090d94191b | ||
| 
						 | 
					2c3a6a3c6e | ||
| 
						 | 
					814083e2fa | ||
| 
						 | 
					7621b30bc2 | ||
| 
						 | 
					9e2e55dcb3 | ||
| 
						 | 
					f8a1d5bc7a | ||
| 
						 | 
					1a65be101e | ||
| 
						 | 
					4c5d0a5695 | ||
| 
						 | 
					f8b3381d16 | ||
| 
						 | 
					8a41e5063a | ||
| 
						 | 
					24a84cdc25 | ||
| 
						 | 
					25354e1f3e | ||
| 
						 | 
					2025044952 | ||
| 
						 | 
					d00dcdad85 | ||
| 
						 | 
					fc069c13f5 | ||
| 
						 | 
					69430f4a21 | ||
| 
						 | 
					a83855157b | ||
| 
						 | 
					5ce80ba4ee | ||
| 
						 | 
					16e96d9fcf | ||
| 
						 | 
					ac753c5970 | ||
| 
						 | 
					313e187399 | ||
| 
						 | 
					f5aaee6c89 | ||
| 
						 | 
					c8b4f8f4fd | ||
| 
						 | 
					6113dd3b98 | ||
| 
						 | 
					e21f22bb3b | ||
| 
						 | 
					bb4578dea5 | ||
| 
						 | 
					e83ca6fbe3 | ||
| 
						 | 
					ae9963cf85 | ||
| 
						 | 
					650aef9c2d | ||
| 
						 | 
					397b14da22 | ||
| 
						 | 
					0f00322e03 | ||
| 
						 | 
					e2b688077e | ||
| 
						 | 
					4afbd37cbd | ||
| 
						 | 
					40d3340ac5 | ||
| 
						 | 
					9bb71d3df7 | ||
| 
						 | 
					4860447b06 | ||
| 
						 | 
					445b3f19a3 | ||
| 
						 | 
					32efd26999 | ||
| 
						 | 
					f2f95150bd | ||
| 
						 | 
					f210bf8812 | ||
| 
						 | 
					c30e1a2446 | ||
| 
						 | 
					10392fc08e | ||
| 
						 | 
					df10473fb5 | ||
| 
						 | 
					6505e7e85f | ||
| 
						 | 
					ffd80722b8 | ||
| 
						 | 
					6bd5bb3dda | ||
| 
						 | 
					83dec3c1d6 | ||
| 
						 | 
					82f2a83eec | ||
| 
						 | 
					5194af9d91 | ||
| 
						 | 
					a4c76d2fb9 | ||
| 
						 | 
					57a35075fa | ||
| 
						 | 
					fb69a60b45 | ||
| 
						 | 
					2625381e5b | ||
| 
						 | 
					1c048320a6 | ||
| 
						 | 
					c5c25cee7f | ||
| 
						 | 
					dee8177a67 | ||
| 
						 | 
					abbe040351 | ||
| 
						 | 
					29a0f849f1 | ||
| 
						 | 
					7e524f46c6 | ||
| 
						 | 
					1146e99de2 | ||
| 
						 | 
					6740929d41 | ||
| 
						 | 
					831788c1c9 | ||
| 
						 | 
					7e9d4520af | ||
| 
						 | 
					c4317e6e6b | ||
| 
						 | 
					e4e3debce0 | ||
| 
						 | 
					a5b7431070 | ||
| 
						 | 
					054808f59d | ||
| 
						 | 
					0b313d627e | ||
| 
						 | 
					9813b9db90 | ||
| 
						 | 
					9a4e024abb | ||
| 
						 | 
					04a669157f | ||
| 
						 | 
					a364c1512d | ||
| 
						 | 
					0451e6f0a6 | ||
| 
						 | 
					b7f87d9e82 | ||
| 
						 | 
					e2713fb57a | ||
| 
						 | 
					c8eff78d34 | ||
| 
						 | 
					04ca5793fa | ||
| 
						 | 
					83d00ee9c7 | ||
| 
						 | 
					bf56ed2540 | ||
| 
						 | 
					e75aba14b4 | ||
| 
						 | 
					5d2d2d416f | ||
| 
						 | 
					62799bfc9d | ||
| 
						 | 
					df8fbc3c03 | ||
| 
						 | 
					604de81ab8 | ||
| 
						 | 
					ed14b09567 | ||
| 
						 | 
					800758815c | ||
| 
						 | 
					058b74bd63 | ||
| 
						 | 
					02a52a4e09 | ||
| 
						 | 
					74ddc93f7f | ||
| 
						 | 
					eb8af0c81b | ||
| 
						 | 
					bd49274808 | ||
| 
						 | 
					8b1547c589 | ||
| 
						 | 
					c093f83848 | ||
| 
						 | 
					c0b28c38c5 | ||
| 
						 | 
					4621a0898f | ||
| 
						 | 
					6f02e1035f | ||
| 
						 | 
					d4ae9237a6 | ||
| 
						 | 
					914eb05a60 | ||
| 
						 | 
					4da17227c1 | ||
| 
						 | 
					20014cab29 | ||
| 
						 | 
					9d62361c8a | ||
| 
						 | 
					260992b7bf | ||
| 
						 | 
					b9cd429551 | ||
| 
						 | 
					2d18a75ad7 | ||
| 
						 | 
					0cfc501f83 | ||
| 
						 | 
					44b19153f1 | ||
| 
						 | 
					433b87b9df | ||
| 
						 | 
					f9464bcd6c | ||
| 
						 | 
					f5c5ec202a | ||
| 
						 | 
					4b64a70830 | ||
| 
						 | 
					4c8f7e298e | ||
| 
						 | 
					2d539be214 | ||
| 
						 | 
					c35d5814b4 | ||
| 
						 | 
					7d19ad401b | ||
| 
						 | 
					985577ce79 | ||
| 
						 | 
					24e20101d5 | ||
| 
						 | 
					76c884eb9f | ||
| 
						 | 
					7041dbab27 | ||
| 
						 | 
					661051fde4 | ||
| 
						 | 
					36cba5ce18 | ||
| 
						 | 
					4753f30c53 | ||
| 
						 | 
					d719e240d2 | ||
| 
						 | 
					e35faee278 | ||
| 
						 | 
					fd3417a09a | ||
| 
						 | 
					1719709648 | ||
| 
						 | 
					d37aa3378e | ||
| 
						 | 
					f017d32860 | ||
| 
						 | 
					7b23edcb29 | ||
| 
						 | 
					e48c4b4e84 | ||
| 
						 | 
					aeca44c7aa | ||
| 
						 | 
					af6ae8e419 | 
							
								
								
									
										56
									
								
								.github/issue_template.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								.github/issue_template.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
<!---
 | 
			
		||||
 | 
			
		||||
READ THIS FIRST!
 | 
			
		||||
----------------
 | 
			
		||||
 | 
			
		||||
the more info you can provide, the easier it is for us the help you, so please
 | 
			
		||||
fill out as many of the items below as possible.
 | 
			
		||||
 | 
			
		||||
Provide a general summary of the issue in the Title above
 | 
			
		||||
 | 
			
		||||
when including netdisco config snippets, whitespace matters since it's a yaml file
 | 
			
		||||
for github issues it really helps if you include the relevant config parts in a codeblock (code fencing)
 | 
			
		||||
see the "code" subject on https://guides.github.com/features/mastering-markdown/ for that)
 | 
			
		||||
this should preserve spaces in the issue tracker and make troubleshooting quicker
 | 
			
		||||
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## 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 Device
 | 
			
		||||
<!--- Some basic info about your device will help out pinpointing the issue more easily -->
 | 
			
		||||
<!--- also, snmpwalk output of the following oid helps out a lot: .1.3.6.1.2.1.1 -->
 | 
			
		||||
<!--- this is the system leaf of the snmp mib-2 -->
 | 
			
		||||
* Vendor:
 | 
			
		||||
* Device Model:
 | 
			
		||||
* Operating System Version:
 | 
			
		||||
* Snmpwalk output of .1.3.6.1.2.1.1:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Your Environment
 | 
			
		||||
<!--- Include as many relevant details about the environment you experienced the bug in -->
 | 
			
		||||
* SNMP::Info version used: 
 | 
			
		||||
* Netdisco version (if used): 
 | 
			
		||||
							
								
								
									
										19
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
name: GitHub Release on Tag
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    tags:
 | 
			
		||||
      - '[0-9].[0-9][0-9]'
 | 
			
		||||
jobs:
 | 
			
		||||
  release_snmp_info:
 | 
			
		||||
    if: github.repository == 'netdisco/snmp-info'
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout
 | 
			
		||||
        uses: actions/checkout@v2
 | 
			
		||||
      - name: Get the Tag
 | 
			
		||||
        id: get_tag
 | 
			
		||||
        run: echo ::set-output name=TAGVALUE::${GITHUB_REF#refs/tags/}
 | 
			
		||||
      - name: Release
 | 
			
		||||
        uses: softprops/action-gh-release@v1
 | 
			
		||||
        with:
 | 
			
		||||
          name: SNMP::Info ${{ steps.get_tag.outputs.TAGVALUE }}
 | 
			
		||||
							
								
								
									
										122
									
								
								.github/workflows/test_and_publish.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								.github/workflows/test_and_publish.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,122 @@
 | 
			
		||||
name: Test and Publish SNMP::Info
 | 
			
		||||
on:
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
    inputs:
 | 
			
		||||
      success_irc_squawk:
 | 
			
		||||
        description: 'Squawk to IRC on successful tests'     
 | 
			
		||||
        required: false
 | 
			
		||||
        default:  false
 | 
			
		||||
      debug_test_enabled:
 | 
			
		||||
        description: 'With build and test debug'
 | 
			
		||||
        required: false
 | 
			
		||||
        default:  false
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - master
 | 
			
		||||
    tags:
 | 
			
		||||
      - '[0-9].[0-9][0-9]'
 | 
			
		||||
  pull_request:
 | 
			
		||||
    types: [opened, synchronize, reopened]
 | 
			
		||||
jobs:
 | 
			
		||||
  test_snmp_info:
 | 
			
		||||
    name: Test and CPAN Upload
 | 
			
		||||
    if: github.repository == 'netdisco/snmp-info'
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    container:
 | 
			
		||||
      image: 'netdisco/netdisco:latest-do'
 | 
			
		||||
      options: '--user root --entrypoint /bin/ash'
 | 
			
		||||
      volumes:
 | 
			
		||||
        - '/home/runner/work:/github/workspace'
 | 
			
		||||
    defaults:
 | 
			
		||||
      run:
 | 
			
		||||
        working-directory: /github/workspace/snmp-info/snmp-info
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Get the Tag or Branch
 | 
			
		||||
      run: echo "GH_REF_SHORT=$(echo ${GITHUB_REF##*/})" >> $GITHUB_ENV
 | 
			
		||||
 | 
			
		||||
    - name: Install packages
 | 
			
		||||
      run: apk add openssh xz tmux bash curl sudo gcc make musl-dev perl-dev unzip jq
 | 
			
		||||
    - name: Install fake apt-get
 | 
			
		||||
      run: echo 'if [ "$1" == "update" ]; then exec apk update; else exec apk add openssh xz; fi' > /usr/local/bin/apt-get && chmod +x /usr/local/bin/apt-get
 | 
			
		||||
 | 
			
		||||
    - name: Check out latest code
 | 
			
		||||
      uses: actions/checkout@v1
 | 
			
		||||
    - name: Fix owner of checkout
 | 
			
		||||
      run: chown -R netdisco:netdisco /github/workspace/snmp-info/snmp-info
 | 
			
		||||
 | 
			
		||||
    - name: Install Perl deps
 | 
			
		||||
      run: |
 | 
			
		||||
        sudo -u netdisco /home/netdisco/bin/localenv cpanm --notest Hook::LexWrap Test::Class::Most Test::Distribution Test::MockObject::Extends PPI Class::ISA Module::Info File::Slurp Test::Perl::Critic Test::Spelling CPAN::Uploader
 | 
			
		||||
 | 
			
		||||
    - name: Run Tests
 | 
			
		||||
      id: build_and_run_tests
 | 
			
		||||
      run: |
 | 
			
		||||
        sudo -u netdisco /home/netdisco/bin/localenv perl ./Build.PL
 | 
			
		||||
        sudo -u netdisco /home/netdisco/bin/localenv ./Build test --test_files t/ --test_files xt/
 | 
			
		||||
      continue-on-error: true
 | 
			
		||||
 | 
			
		||||
    - name: IRC test failure notification
 | 
			
		||||
      if: (steps.build_and_run_tests.outcome == 'failure') && (github.event_name != 'workflow_dispatch') && (github.event_name != 'pull_request')
 | 
			
		||||
      uses: Gottox/irc-message-action@v2
 | 
			
		||||
      with:
 | 
			
		||||
        channel: '#netdisco'
 | 
			
		||||
        nickname: github-actions
 | 
			
		||||
        message: |-
 | 
			
		||||
          🤖 ${{ github.actor }} pushed to ${{ env.GH_REF_SHORT }}: https://github.com/${{ github.repository }}/commit/${{ github.sha }}
 | 
			
		||||
          😭 TESTS have FAILED! 👀 https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
 | 
			
		||||
    - name: IRC test success notification
 | 
			
		||||
      if: (steps.build_and_run_tests.outcome == 'success') && github.event.inputs.success_irc_squawk
 | 
			
		||||
      uses: Gottox/irc-message-action@v2
 | 
			
		||||
      with:
 | 
			
		||||
        channel: '#netdisco'
 | 
			
		||||
        nickname: github-actions
 | 
			
		||||
        message: |-
 | 
			
		||||
          🤖 ${{ github.actor }} pushed to ${{ env.GH_REF_SHORT }}: https://github.com/${{ github.repository }}/commit/${{ github.sha }} (tests PASSED 🎉)
 | 
			
		||||
 | 
			
		||||
    - name: Make release
 | 
			
		||||
      if: steps.build_and_run_tests.outcome == 'success'
 | 
			
		||||
      run: |
 | 
			
		||||
        sudo -u netdisco /home/netdisco/bin/localenv rm ./MANIFEST
 | 
			
		||||
        sudo -u netdisco /home/netdisco/bin/localenv ./Build manifest
 | 
			
		||||
        sudo -u netdisco /home/netdisco/bin/localenv ./Build distmeta
 | 
			
		||||
        sudo -u netdisco /home/netdisco/bin/localenv ./Build dist
 | 
			
		||||
 | 
			
		||||
    - name: Upload to CPAN
 | 
			
		||||
      id: upload_to_cpan
 | 
			
		||||
      if: success() && startsWith(github.ref, 'refs/tags/')
 | 
			
		||||
      env:
 | 
			
		||||
        PAUSE_USERNAME: ${{ secrets.PAUSE_USERNAME }}
 | 
			
		||||
        PAUSE_PASSWORD: ${{ secrets.PAUSE_PASSWORD }}
 | 
			
		||||
      run: |
 | 
			
		||||
        bash -c 'RELEASENAME=(SNMP-Info-*.tar.gz) && ! curl -LI --fail https://cpan.metacpan.org/authors/id/O/OL/OLIVER/${RELEASENAME}'
 | 
			
		||||
        sudo -u netdisco /home/netdisco/bin/localenv cpan-upload -u '${{ env.PAUSE_USERNAME }}' -p '${{ env.PAUSE_PASSWORD }}' SNMP-Info-*.tar.gz
 | 
			
		||||
      continue-on-error: true
 | 
			
		||||
 | 
			
		||||
    - name: IRC upload failure notification
 | 
			
		||||
      if: steps.upload_to_cpan.outcome == 'failure'
 | 
			
		||||
      uses: Gottox/irc-message-action@v2
 | 
			
		||||
      with:
 | 
			
		||||
        channel: '#netdisco'
 | 
			
		||||
        nickname: github-actions
 | 
			
		||||
        message: |-
 | 
			
		||||
          🤖 Failed to upload SNMP::Info release ${{ env.GH_REF_SHORT }} to CPAN! 😭
 | 
			
		||||
          👀 https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
 | 
			
		||||
    - name: IRC upload success notification
 | 
			
		||||
      if: steps.upload_to_cpan.outcome == 'success'
 | 
			
		||||
      uses: Gottox/irc-message-action@v2
 | 
			
		||||
      with:
 | 
			
		||||
        channel: '#netdisco'
 | 
			
		||||
        nickname: github-actions
 | 
			
		||||
        message: |-
 | 
			
		||||
          🤖 Uploaded SNMP::Info release ${{ env.GH_REF_SHORT }} to CPAN 🎉
 | 
			
		||||
 | 
			
		||||
    - name: Setup tmate session
 | 
			
		||||
      uses: mxschmitt/action-tmate@v3
 | 
			
		||||
      if: always() && github.event.inputs.debug_test_enabled
 | 
			
		||||
      with:
 | 
			
		||||
        sudo: true
 | 
			
		||||
 | 
			
		||||
    - name: Preserve status from tests
 | 
			
		||||
      if: always() && (steps.build_and_run_tests.outcome == 'failure')
 | 
			
		||||
      run: exit 1
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										21
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,9 +1,14 @@
 | 
			
		||||
*.db
 | 
			
		||||
SNMP
 | 
			
		||||
*.komodo*
 | 
			
		||||
blib/
 | 
			
		||||
META.*
 | 
			
		||||
*.swp
 | 
			
		||||
*.pid
 | 
			
		||||
test.pl
 | 
			
		||||
MYMETA.*
 | 
			
		||||
Makefile
 | 
			
		||||
Makefile.old
 | 
			
		||||
pm_to_blib
 | 
			
		||||
*.tar.gz
 | 
			
		||||
MANIFEST.*
 | 
			
		||||
*.komodo*
 | 
			
		||||
Makefile*
 | 
			
		||||
Build
 | 
			
		||||
_build
 | 
			
		||||
blib
 | 
			
		||||
cover_db
 | 
			
		||||
.idea
 | 
			
		||||
.vscode
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										54
									
								
								Build.PL
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								Build.PL
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Module::Build;
 | 
			
		||||
 | 
			
		||||
Module::Build->new(
 | 
			
		||||
  module_name => 'SNMP::Info',
 | 
			
		||||
  license     => 'bsd',
 | 
			
		||||
  dist_author => 'Eric A. Miller <emiller@cpan.org>',
 | 
			
		||||
  # dynamic_config => 1,
 | 
			
		||||
  create_readme => 1,
 | 
			
		||||
  configure_requires => {
 | 
			
		||||
    'Module::Build' => '0.42',
 | 
			
		||||
  },
 | 
			
		||||
  # build_requires => {
 | 
			
		||||
  # },
 | 
			
		||||
  requires => {
 | 
			
		||||
    'SNMP' => '0',
 | 
			
		||||
    'Math::BigInt' => '0',
 | 
			
		||||
    'NetAddr::IP' => '4.068',
 | 
			
		||||
  },
 | 
			
		||||
  recommends => {
 | 
			
		||||
    'PPI' => '0',
 | 
			
		||||
    'Class::ISA' => '0',
 | 
			
		||||
    'Module::Info' => '0',
 | 
			
		||||
    'Module::Load' => '0',
 | 
			
		||||
    'File::Slurp' => '0',
 | 
			
		||||
  },
 | 
			
		||||
  test_requires => {
 | 
			
		||||
    'Test::More' => '0.88',
 | 
			
		||||
    'Test::Distribution' => '0',
 | 
			
		||||
    'Test::Class::Most'  => '0',
 | 
			
		||||
    'Test::MockObject::Extends' => '0',
 | 
			
		||||
    'File::Find' => '0',
 | 
			
		||||
    'Path::Class' => '0',
 | 
			
		||||
    'File::Slurper' => '0',
 | 
			
		||||
    'Test::Exception' => '0.43',
 | 
			
		||||
    'Class::Inspector' => '0',
 | 
			
		||||
    'NetSNMP::default_store' => '0',
 | 
			
		||||
    'Module::Find' => '0',
 | 
			
		||||
    'Hook::LexWrap' => '0',
 | 
			
		||||
  },
 | 
			
		||||
  # script_files => [
 | 
			
		||||
  # ],
 | 
			
		||||
  # share_dir => 'share',
 | 
			
		||||
  meta_merge => {
 | 
			
		||||
    resources => {
 | 
			
		||||
      homepage => 'http://netdisco.org/',
 | 
			
		||||
      bugtracker => 'https://github.com/netdisco/snmp-info/issues',
 | 
			
		||||
      repository => 'https://github.com/netdisco/snmp-info',
 | 
			
		||||
      MailingList => 'https://lists.sourceforge.net/lists/listinfo/snmp-info-users',
 | 
			
		||||
      IRC => 'irc://irc.libera.chat/#netdisco',
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
)->create_build_script;
 | 
			
		||||
@@ -1,4 +1,545 @@
 | 
			
		||||
SNMP::Info - Friendly OO-style interface to Network devices using SNMP.
 | 
			
		||||
Version 3.82 (2022-03-16)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * add Cisco BGP MIB support to all Cisco Layer 3 devices
 | 
			
		||||
 | 
			
		||||
Version 3.81 (2021-10-07)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #400 change IPv6 decode warning to be debug-only
 | 
			
		||||
  * #394 Recognise hyphenated cumulus version strings
 | 
			
		||||
  * #401 add DLink layers always 2+3
 | 
			
		||||
  * #377 i/if_ignore cleanup
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * #443 trapeze and nws deep recursion fix
 | 
			
		||||
  * #378 fix several uninitialized vars
 | 
			
		||||
  * #374 undefined error from H3C class
 | 
			
		||||
 | 
			
		||||
Version 3.80 (2021-09-22)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * layer3::fortinet now supports link aggregation mapping
 | 
			
		||||
  * Add support for Riverbed SteelheadEx and Steelfusion (#438)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * change default class for Cisco from Layer3::Cisco to Layer3::CiscoSwitch
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * Fix typo in Whiterabbit.pm (#439)
 | 
			
		||||
 | 
			
		||||
Version 3.78 (2021-09-08)
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * Fix undefined value error in Bridge.pm i_vlan
 | 
			
		||||
 | 
			
		||||
Version 3.77 (2021-09-04)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * set_i_vlan support for Ruckus/Brocade/Foundry
 | 
			
		||||
 | 
			
		||||
Version 3.74 (2021-08-24)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * Support changing PVID on Arista switches (#429)
 | 
			
		||||
  * Support for Whiterabbit devices
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * Patch H3C broken node-vlan mapping
 | 
			
		||||
 | 
			
		||||
Version 3.73 (2021-06-28)
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * fix packaging error
 | 
			
		||||
 | 
			
		||||
Version 3.72 (2021-06-28)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * Support for Aruba CX switches
 | 
			
		||||
  * IEEE802_Bridge module
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * #403 don't use layer3::dell for layer3::aruba devices
 | 
			
		||||
  * layer2::aerohive supports version numbers above 9
 | 
			
		||||
 | 
			
		||||
Version 3.71 (2020-11-27)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * #386 Teltonika RUT9XX support (jeroenvis)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #398, 411 more ubiquiti cleanup and support for er-12 (lbegnaud & inphobia)
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * #409, 410 Don't add AUTOLOAD generated methods in symbol table
 | 
			
		||||
  * #372, 375 fix lldp on nx-os6 (inphobia)
 | 
			
		||||
 | 
			
		||||
Version 3.70 (2019-10-15)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * #361 Siemens Scalance switch support
 | 
			
		||||
  * #365 Ciena Layer3 support
 | 
			
		||||
  * #368 DOCSIS cable modem support
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #350 ubiquiti version string cleanup (LBegnaud)
 | 
			
		||||
  * #352 duplex support for ciscosb
 | 
			
		||||
  * #353 report all vendor names in lowercase
 | 
			
		||||
  * #353 sprinkle "use warnings" and "use strict" around
 | 
			
		||||
  * #358 prefer checkpoint mib over net-snmp mib (earendilfr) 
 | 
			
		||||
  * #359 detect newer ios-xe using codenames (Christoph Neuhaus)
 | 
			
		||||
  * #367 test using latest MIBs version dynamically
 | 
			
		||||
  * #370 smarter Q-BRIDGE handling
 | 
			
		||||
  * poe power usage & mac address for ciscosb
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * #353 doc fixes: report all required mibs for each module as based on code
 | 
			
		||||
  * #353 include fixes: don't include modules already imported from parent classes
 | 
			
		||||
  * #355 fix #252, don't think 6char devices names are mac addresses
 | 
			
		||||
  * #363 clean return calls in code
 | 
			
		||||
  * #364 strip newline from neoteris os_ver, fixes netdisco #647
 | 
			
		||||
 | 
			
		||||
Version 3.68 (2019-04-28)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * initial support for redlion cellular routers (inphobia)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * use pulsesecure mib in layer7::neoteris instead of juniper-ive
 | 
			
		||||
 | 
			
		||||
Version 3.67 (2019-04-20)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * #323 initial Lenovo / cnos support (inphobia)
 | 
			
		||||
  * #317 #326 DOCSIS Head End support (Pyro3d)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * add v3 Context update() tests for net-snmp 5.8+
 | 
			
		||||
  * support INFO_TRACE and SNMP_TRACE environment variables for Debug
 | 
			
		||||
  * #324 clean up exinda and add regression test
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * #294 snmp::info should show full class used
 | 
			
		||||
  * #297 perl 5.28 removal of "use vars"
 | 
			
		||||
  * #306 fix incorrect interfaces for d-link
 | 
			
		||||
  * #319 make fortinet return a useful interface name (inphobia)
 | 
			
		||||
  * #320 improve duplicate interfaces() fixup
 | 
			
		||||
  * #321 clean interface descriptions of null and trailing space
 | 
			
		||||
  * #322 #327 full fix for aerohive tests
 | 
			
		||||
  * #325 lazy load legacy RFC1213-MIB only if needed
 | 
			
		||||
  * #496 fix for aerohive wireless clients support (inphobia)
 | 
			
		||||
 | 
			
		||||
Version 3.66 (2019-03-24)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * #316 add support for IS-IS routing protocol (pyro3d)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * switch to Alien::SNMP for travis builds (ollyg)
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * clarify MRO usage
 | 
			
		||||
 | 
			
		||||
Version 3.65 (2019-02-24)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #296 expand CiscoAgg to also include LACP (inphobia)
 | 
			
		||||
  * #308 update VyOS enterprise OID
 | 
			
		||||
  * #310 bring layer3::oneaccess up to date for oneos6. (inphobia)
 | 
			
		||||
  * Add two more HP 2930F models (JeroenvIS)
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * #295 make CiscoAgg return ifindex instead of bp_index (inphobia)
 | 
			
		||||
  * more documentation fixes + whitespace cleanup in all files
 | 
			
		||||
 | 
			
		||||
Version 3.64 (2018-12-30)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * #283 support for Exinda/GFI traffic shapers (inphobia)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #282 Aerohive base MAC lookup (inphobia)
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * many documentation fixes (inphobia)
 | 
			
		||||
 | 
			
		||||
Version 3.63 (2018-11-25)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #280 update to retrieve Aerohive serial (inphobia / nick n.)
 | 
			
		||||
  * #271 update os_ver for Alcatel-Lucent (stromsoe)
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * #273 remove old ADTRAN modules not in netdisco-mibs
 | 
			
		||||
 | 
			
		||||
Version 3.62 (2018-10-29)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #278 Support for Cisco Firepower Threat Defense
 | 
			
		||||
  * #275 Document peth_port_ifindex for Junipers
 | 
			
		||||
  * #274 Add peth_port_ifindex override for Junipers
 | 
			
		||||
  * #270 Add support for additional Mikrotik models
 | 
			
		||||
  * Add HP 3810M, 2930M, 2930F and 2540 series switches
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * #265 Fix typos in L3::Huawei
 | 
			
		||||
 | 
			
		||||
Version 3.61 (2018-05-09)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #255 IPv6 support - Set the transport-specifier if given an IPv6 address
 | 
			
		||||
  * #195 IP address table - IPv4 Address Table will use the
 | 
			
		||||
     IP-MIB::ipAddressTable if the deprecated IP-MIB::ipAddrTable doesn't
 | 
			
		||||
     return results
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * #261 EIGRP Peer Neighbor Formatting / Munge
 | 
			
		||||
  * #252 Unpack binary MAC if present in cdp_port
 | 
			
		||||
  * Fix SNMPv1 cdp_run check
 | 
			
		||||
 | 
			
		||||
Version 3.60 (2018-05-06)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #263 detect Aerohive ap250 & ap230 models (inphobia)
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * #140 LLDP fixes - treat remote port type of 'local' as an interface name if
 | 
			
		||||
    the remote port id doesn't look like an index
 | 
			
		||||
  * Fix potential issue in enumeration of LLDP reported system capabilities
 | 
			
		||||
    supported by the remote system due to the 'lldpRemSysCapSupported' leaf
 | 
			
		||||
    name being defined in multiple MIBs
 | 
			
		||||
 | 
			
		||||
Version 3.59 (2018-05-01)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * #214 SNMP::Info Device models Genua, ATMedia, Liebert
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * Capture base MAC in L3::Huawei
 | 
			
		||||
  * Change _lldp_addr_index to a method so it can be properly overridden in
 | 
			
		||||
    subclasses
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * Capture fan and power supply status in L3::Huawei when description is
 | 
			
		||||
    not available
 | 
			
		||||
 | 
			
		||||
Version 3.58 (2018-04-29)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * #202 Support for Aerohive access points
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #220 Alcatel-Lucent / Nokia SR 7750 missing port information. Add duplex,
 | 
			
		||||
    fan, and power supply status, as well as, module inventory to L3::Timetra
 | 
			
		||||
  * Add fan and power supply status to L3::Huawei
 | 
			
		||||
  * Override ifMTU with max frame size when applicable in L3::Huawei
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * Correct POE power module to port mapping in L3::Huawei
 | 
			
		||||
 | 
			
		||||
Version 3.57 (2018-04-26)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #145 Patch for Huawei (robwwd)
 | 
			
		||||
  * #228 Huawei aggregate link support
 | 
			
		||||
  * POE and duplex admin support added to L3::Huawei
 | 
			
		||||
  * Significant performance improvement validating AUTOLOAD methods
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * IEEE802dot3ad portlist is indexed with a dot1dBasePort, cross reference
 | 
			
		||||
    with dot1dBasePortIfIndex
 | 
			
		||||
  * Fix for macsuck in Cisco classes introduced in 3.55 caused by inheritance
 | 
			
		||||
    issue in CiscoStack
 | 
			
		||||
 | 
			
		||||
Version 3.56 (2018-04-22)
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * Fix table methods when defined as an OID which will not completely
 | 
			
		||||
    translate to a fully qualified textual leaf
 | 
			
		||||
 | 
			
		||||
Version 3.55 (2018-04-19)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
  * #260 Oneaccess (robwwd)
 | 
			
		||||
  * #259 Add ERX (Old Juniper E-Series JunOSe) Support (robwwd)
 | 
			
		||||
  * #258 Add support for Arbor devices (robwwd)
 | 
			
		||||
  * #253 Nexans switch support (paecker)
 | 
			
		||||
  * #142 Sixnet Switch Support
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #117 Recognition for HP Blade switches (J R Binks)
 | 
			
		||||
  * #196 Support for powerconnect 8164F
 | 
			
		||||
  * Refactor Layer3::Dell for better support of newer models
 | 
			
		||||
  * Increase capture of i_vlan on router interfaces in L3::Cisco
 | 
			
		||||
  * Factor out logic to determine serial number from ENTITY-MIB in Layer2 and
 | 
			
		||||
    Layer3 to new method entity_derived_serial in Entity class and added new
 | 
			
		||||
    method entity_derived_os_ver in Entity class to determine OS version
 | 
			
		||||
    in a similar manner
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * #67 Juniper EX4300 Missing/Wrong information
 | 
			
		||||
  * #61 ZyXEL (X)GS1900 family MIB - Fix loop in layers method
 | 
			
		||||
  * Fix ISA in AMAP and EDP classes
 | 
			
		||||
  * Add missing MIB in L2::Trapeze, L2::NWSS2300, and L3::Dell
 | 
			
		||||
  * Fix gigabit logic in i_duplex_admin() of CiscoStack
 | 
			
		||||
  * Prevent potential undefined warnings in i_speed_admin() of L2::C2900 and
 | 
			
		||||
    ports() of L3::C3550
 | 
			
		||||
  * Correct validation and IID/key used in mau_set_i_speed_admin() and
 | 
			
		||||
    mau_set_i_duplex_admin() of MAU
 | 
			
		||||
  * Correct typo in MIB leaf names in L3::Aironet
 | 
			
		||||
  * Don't use MIB leafs that are not-accessible according to MIB
 | 
			
		||||
    NOTE: Fixing this logic now results in methods on MIB leafs specified as
 | 
			
		||||
    not-accessible failing validation in _validate_autoload_method()
 | 
			
		||||
 | 
			
		||||
Version 3.54 (2018-04-01)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * #141 Avocent ACS files for correct discovery in Netdisco
 | 
			
		||||
  * Add support for Avocent ACS 5K/6K/8K terminal servers in Layer1::Cyclades
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #215 Nokia/Alcatel-Lucent 7705 LLDP
 | 
			
		||||
  * #220 Alcatel-Lucent / Nokia SR 7750 missing neighbors
 | 
			
		||||
  * Improve Layer3::Timetra model detection
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * Fix logic in Layer1::Asante i_up() method
 | 
			
		||||
  * Fix MIB leaf typo in IPv6
 | 
			
		||||
  * Don't use MIB leafs that are not-accessible according to MIB
 | 
			
		||||
  * Fix logic for determining if MIB leaf supports set operations
 | 
			
		||||
    NOTE: Fixing this logic now results in methods starting with set_ on MIB
 | 
			
		||||
    leafs without Write or Create access failing validation in
 | 
			
		||||
    _validate_autoload_method()
 | 
			
		||||
 | 
			
		||||
Version 3.53 (2018-03-22)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * #12 add Cisco PortFast support via CiscoStpExtensions::i_faststart_enabled
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * Report serial/version on Netgear FSM (paecker)
 | 
			
		||||
  * Add test harness and expand developer test coverage
 | 
			
		||||
  * Add back the base (RFC) MIBs for when net-snmp does not have them builtin
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  *  Fix AUTOLOAD / can() bug that could result in DESTROY being redefined and
 | 
			
		||||
     dynamic methods not being added to the symbol table.
 | 
			
		||||
 | 
			
		||||
version 3.52 (2018-03-19)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * set fallback for nonmatching interfaces in Cumulus class
 | 
			
		||||
  * better interface naming for Ubiquiti
 | 
			
		||||
  * modify mock utility to work under a perlbrew environment
 | 
			
		||||
 | 
			
		||||
version 3.50 (2018-03-14)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #198 Add Support for Gigamon devices
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * #226 Avaya VSP devices - no ifAlias
 | 
			
		||||
  * #227 Remove bogus can() check in _set()
 | 
			
		||||
  * Fix SNMP::Info::IEEE802dot3ad when more than 1 LAG
 | 
			
		||||
 | 
			
		||||
version 3.49 (2018-03-03)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * Better Layer3::Cumulus interface naming
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * Use GitHub for MIBs download for testing, instead of sf.net
 | 
			
		||||
 | 
			
		||||
version 3.48 (2018-03-03)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * Add Layer3::Cumulus for Cumulus Networks devices
 | 
			
		||||
 | 
			
		||||
version 3.47 (2018-02-27)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * Add LLDP-MIB::lldpXMedRemInventoryTable methods
 | 
			
		||||
 | 
			
		||||
version 3.46 (2018-02-17)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * Add method to get err-disable cause for interfaces on Cisco
 | 
			
		||||
 | 
			
		||||
version 3.45 (2018-02-14)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * Enable Layer3::Foundry for Brocade VDX platform
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * #222 #238 #239 handle BayStack switches with port index 128 (zoeloe)
 | 
			
		||||
 | 
			
		||||
version 3.44 (2018-02-12)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * Improve F10 OS version detection (laelly)
 | 
			
		||||
  * Better IPv6 prefix derivation
 | 
			
		||||
 | 
			
		||||
version 3.43 (2018-02-02)
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * Fix identification of Brocade CES
 | 
			
		||||
 | 
			
		||||
version 3.42 (2018-02-02)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * IPv6 Prefix Length support via IPv6::ipv6_addr_prefixlength
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * Fix test for updated snmplabs.com data
 | 
			
		||||
 | 
			
		||||
version 3.41 (2018-02-01)
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * Fixes to distribution metadata
 | 
			
		||||
 | 
			
		||||
version 3.40 (2018-01-28)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #240 Support for CheckPoint devices 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)
 | 
			
		||||
 | 
			
		||||
@@ -711,7 +1252,7 @@ version 1.05 (11/25/07) - CVS only. No official release
 | 
			
		||||
    + Added support for Cisco (Airespace) wireless controllers as new class
 | 
			
		||||
      L2::Airespace
 | 
			
		||||
    + Added support for Nortel Ethernet Routing Switch 2500 series and
 | 
			
		||||
      Business Ethernet Switches (David Siebörger)
 | 
			
		||||
      Business Ethernet Switches (David Siebörger)
 | 
			
		||||
    + Update of L3::Foundry to support all Foundry devices including newer
 | 
			
		||||
      switches.  Depreciate L2::Foundry.
 | 
			
		||||
    + Added generic device type detection using IANA assigned enterpise
 | 
			
		||||
@@ -1,9 +0,0 @@
 | 
			
		||||
# SNMP Device Compatibility Matrix
 | 
			
		||||
# SNMP::Info - (C) 2004 Max Baker
 | 
			
		||||
 | 
			
		||||
# THIS FILE IS NO LONGER MAINTAINED
 | 
			
		||||
 | 
			
		||||
# THERE ARE NOW GENERIC CLASSES FOR MOST DEVICES, SIMPLY LOAD SNMP::Info AND
 | 
			
		||||
# TRY YOUR DEVICE, THEN REPORT TO THE MAIL LIST ANY MISSING FUNCTIONALITY.
 | 
			
		||||
 | 
			
		||||
# THANK YOU
 | 
			
		||||
@@ -1,444 +0,0 @@
 | 
			
		||||
# SNMP::Info::Layer1::Cyclades
 | 
			
		||||
# $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::Layer1::Cyclades;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer1;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer1::Cyclades::ISA       = qw/SNMP::Info::Layer1 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer1::Cyclades::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer1::MIBS,
 | 
			
		||||
    'CYCLADES-ACS-SYS-MIB'  => 'cyACSversion',
 | 
			
		||||
    'CYCLADES-ACS-CONF-MIB' => 'cyEthIPaddr',
 | 
			
		||||
    'CYCLADES-ACS-INFO-MIB' => 'cyISPortTty',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS-SYS-MIB
 | 
			
		||||
    %SNMP::Info::Layer1::GLOBALS,
 | 
			
		||||
    'os_ver'     => 'cyACSversion',
 | 
			
		||||
    'cy_model'   => 'cyACSpname',
 | 
			
		||||
    'serial'     => 'cyACSDevId',
 | 
			
		||||
    'root_ip'    => 'cyEthIPaddr',
 | 
			
		||||
    'ps1_status' => 'cyACSPw1',
 | 
			
		||||
    'ps2_status' => 'cyACSPw2',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer1::FUNCS,
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS-INFO-MIB::cyInfoSerialTable
 | 
			
		||||
    'cy_port_tty'   => 'cyISPortTty',
 | 
			
		||||
    'cy_port_name'  => 'cyISPortName',
 | 
			
		||||
    'cy_port_speed' => 'cyISPortSpeed',
 | 
			
		||||
    'cy_port_cd'    => 'cyISPortSigCD',
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS-CONF-MIB::cySerialPortTable
 | 
			
		||||
    'cy_port_socket' => 'cySPortSocketPort',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = ( %SNMP::Info::Layer1::MUNGE, );
 | 
			
		||||
 | 
			
		||||
# These devices don't have a FDB and we probably don't want to poll for ARP
 | 
			
		||||
# cache so turn off reported L2/L3.
 | 
			
		||||
sub layers {
 | 
			
		||||
    return '01000001';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os {
 | 
			
		||||
    return 'cyclades';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    return 'cyclades';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
 | 
			
		||||
    my $model = $cyclades->cy_model();
 | 
			
		||||
 | 
			
		||||
    return unless defined $model;
 | 
			
		||||
 | 
			
		||||
    return lc($model);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Extend interface methods to include serial ports
 | 
			
		||||
#
 | 
			
		||||
# Partials don't really help in this class, but implemented
 | 
			
		||||
# for consistency
 | 
			
		||||
 | 
			
		||||
sub i_index {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $orig_index = $cyclades->orig_i_index($partial) || {};
 | 
			
		||||
    my $cy_index   = $cyclades->cy_port_socket()       || {};
 | 
			
		||||
 | 
			
		||||
    my %i_index;
 | 
			
		||||
    foreach my $iid ( keys %$orig_index ) {
 | 
			
		||||
        my $index = $orig_index->{$iid};
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
 | 
			
		||||
        $i_index{$iid} = $index;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Use alternative labeling system for the serial port, listening socket
 | 
			
		||||
    # to avoid conflicts with ifIndex.
 | 
			
		||||
    foreach my $iid ( keys %$cy_index ) {
 | 
			
		||||
        my $index = $cy_index->{$iid};
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
        next if ( defined $partial and $index !~ /^$partial$/ );
 | 
			
		||||
 | 
			
		||||
        $i_index{$index} = $index;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return \%i_index;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub interfaces {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $i_descr  = $cyclades->orig_i_description($partial) || {};
 | 
			
		||||
    my $cy_index = $cyclades->cy_port_socket()             || {};
 | 
			
		||||
    my $cy_p_tty = $cyclades->cy_port_tty()                || {};
 | 
			
		||||
 | 
			
		||||
    my %if;
 | 
			
		||||
    foreach my $iid ( keys %$i_descr ) {
 | 
			
		||||
        my $descr = $i_descr->{$iid};
 | 
			
		||||
        next unless defined $descr;
 | 
			
		||||
 | 
			
		||||
        $if{$iid} = $descr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    foreach my $iid ( keys %$cy_p_tty ) {
 | 
			
		||||
        my $index = $cy_index->{$iid};
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
        next if ( defined $partial and $index !~ /^$partial$/ );
 | 
			
		||||
        my $name = $cy_p_tty->{$iid};
 | 
			
		||||
        next unless defined $name;
 | 
			
		||||
 | 
			
		||||
        $if{$index} = $name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return \%if;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_speed {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $i_speed    = $cyclades->orig_i_speed($partial) || {};
 | 
			
		||||
    my $cy_index   = $cyclades->cy_port_socket()       || {};
 | 
			
		||||
    my $cy_p_speed = $cyclades->cy_port_speed()        || {};
 | 
			
		||||
 | 
			
		||||
    my %i_speed;
 | 
			
		||||
    foreach my $iid ( keys %$i_speed ) {
 | 
			
		||||
        my $speed = $i_speed->{$iid};
 | 
			
		||||
        next unless defined $speed;
 | 
			
		||||
 | 
			
		||||
        $i_speed{$iid} = $speed;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    foreach my $iid ( keys %$cy_p_speed ) {
 | 
			
		||||
        my $index = $cy_index->{$iid};
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
        next if ( defined $partial and $index !~ /^$partial$/ );
 | 
			
		||||
        my $speed = $cy_p_speed->{$iid};
 | 
			
		||||
        next unless defined $speed;
 | 
			
		||||
 | 
			
		||||
        $i_speed{$index} = $speed;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return \%i_speed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_up {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $i_up     = $cyclades->orig_i_up($partial) || {};
 | 
			
		||||
    my $cy_index = $cyclades->cy_port_socket()    || {};
 | 
			
		||||
    my $cy_p_up  = $cyclades->cy_port_cd()        || {};
 | 
			
		||||
 | 
			
		||||
    my %i_up;
 | 
			
		||||
    foreach my $iid ( keys %$i_up ) {
 | 
			
		||||
        my $up = $i_up->{$iid};
 | 
			
		||||
        next unless defined $up;
 | 
			
		||||
 | 
			
		||||
        $i_up{$iid} = $up;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    foreach my $iid ( keys %$cy_p_up ) {
 | 
			
		||||
        my $index = $cy_index->{$iid};
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
        next if ( defined $partial and $index !~ /^$partial$/ );
 | 
			
		||||
        my $up = $cy_p_up->{$iid};
 | 
			
		||||
        next unless defined $up;
 | 
			
		||||
 | 
			
		||||
        $i_up{$index} = $up;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return \%i_up;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_description {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $i_desc    = $cyclades->orig_i_description($partial) || {};
 | 
			
		||||
    my $cy_index  = $cyclades->cy_port_socket()             || {};
 | 
			
		||||
    my $cy_p_desc = $cyclades->cy_port_name()               || {};
 | 
			
		||||
 | 
			
		||||
    my %descr;
 | 
			
		||||
    foreach my $iid ( keys %$i_desc ) {
 | 
			
		||||
        my $desc = $i_desc->{$iid};
 | 
			
		||||
        next unless defined $desc;
 | 
			
		||||
 | 
			
		||||
        $descr{$iid} = $desc;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    foreach my $iid ( keys %$cy_p_desc ) {
 | 
			
		||||
        my $index = $cy_index->{$iid};
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
        next if ( defined $partial and $index !~ /^$partial$/ );
 | 
			
		||||
        my $desc = $cy_p_desc->{$iid};
 | 
			
		||||
        next unless defined $desc;
 | 
			
		||||
 | 
			
		||||
        $descr{$index} = $desc;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return \%descr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_name {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $i_name    = $cyclades->orig_i_name($partial) || {};
 | 
			
		||||
    my $cy_index  = $cyclades->cy_port_socket()      || {};
 | 
			
		||||
    my $cy_p_desc = $cyclades->cy_port_name()        || {};
 | 
			
		||||
 | 
			
		||||
    my %i_name;
 | 
			
		||||
    foreach my $iid ( keys %$i_name ) {
 | 
			
		||||
        my $name = $i_name->{$iid};
 | 
			
		||||
        next unless defined $name;
 | 
			
		||||
 | 
			
		||||
        $i_name{$iid} = $name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    foreach my $iid ( keys %$cy_p_desc ) {
 | 
			
		||||
        my $index = $cy_index->{$iid};
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
        next if ( defined $partial and $index !~ /^$partial$/ );
 | 
			
		||||
        my $name = $cy_p_desc->{$iid};
 | 
			
		||||
        next unless defined $name;
 | 
			
		||||
 | 
			
		||||
        $i_name{$index} = $name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return \%i_name;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer1::Cyclades - SNMP Interface to Cyclades terminal servers
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
Eric Miller
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
    #Let SNMP::Info determine the correct subclass for you.
 | 
			
		||||
 | 
			
		||||
    my $cyclades = 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 = $cyclades->class();
 | 
			
		||||
    print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Provides abstraction to the configuration information obtainable from a 
 | 
			
		||||
Cyclades device through SNMP.
 | 
			
		||||
 | 
			
		||||
For speed or debugging purposes you can call the subclass directly, but not
 | 
			
		||||
after determining a more specific class using the method above. 
 | 
			
		||||
 | 
			
		||||
my $cyclades = new SNMP::Info::Layer1::Cyclades(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer1
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<CYCLADES-ACS-SYS-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CYCLADES-ACS-CONF-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CYCLADES-ACS-INFO-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Inherited MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer1/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $cyclades->os_ver()
 | 
			
		||||
 | 
			
		||||
(C<cyACSversion>)
 | 
			
		||||
 | 
			
		||||
=item $cyclades->serial()
 | 
			
		||||
 | 
			
		||||
(C<cyACSDevId>)
 | 
			
		||||
 | 
			
		||||
=item $cyclades->root_ip()
 | 
			
		||||
 | 
			
		||||
(C<cyEthIPaddr>)
 | 
			
		||||
 | 
			
		||||
=item $cyclades->ps1_status()
 | 
			
		||||
 | 
			
		||||
(C<cyACSPw1>)
 | 
			
		||||
 | 
			
		||||
=item $cyclades->ps2_status()
 | 
			
		||||
 | 
			
		||||
(C<cyACSPw2>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Overrides
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $cyclades->layers()
 | 
			
		||||
 | 
			
		||||
Returns 01000001.  These devices don't have a FDB and we probably don't want
 | 
			
		||||
to poll for an ARP cache so turn off reported Layer 2 and Layer 3.
 | 
			
		||||
 | 
			
		||||
=item $cyclades->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'cyclades'
 | 
			
		||||
 | 
			
		||||
=item $cyclades->os()
 | 
			
		||||
 | 
			
		||||
Returns 'cyclades'
 | 
			
		||||
 | 
			
		||||
=item $cyclades->model()
 | 
			
		||||
 | 
			
		||||
Returns lower case (C<cyACSpname>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Layer1
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer1/"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 $cyclades->i_index()
 | 
			
		||||
 | 
			
		||||
Returns reference to map of IIDs to Interface index. 
 | 
			
		||||
 | 
			
		||||
Extended to include serial ports.  Serial ports are indexed with the
 | 
			
		||||
alternative labeling system for the serial port, the listening socket port
 | 
			
		||||
C<cySPortSocketPort> to avoid conflicts with C<ifIndex>.  
 | 
			
		||||
 | 
			
		||||
=item $cyclades->interfaces()
 | 
			
		||||
 | 
			
		||||
Returns reference to map of IIDs to physical ports.  Extended to include
 | 
			
		||||
serial ports, C<cyISPortTty>.
 | 
			
		||||
 | 
			
		||||
=item $cyclades->i_speed()
 | 
			
		||||
 | 
			
		||||
Returns interface speed.  Extended to include serial ports, C<cyISPortSpeed>. 
 | 
			
		||||
 | 
			
		||||
=item $cyclades->i_up()
 | 
			
		||||
 | 
			
		||||
Returns link status for each port.  Extended to include serial ports,
 | 
			
		||||
C<cyISPortSigCD>.
 | 
			
		||||
 | 
			
		||||
=item $cyclades->i_description()
 | 
			
		||||
 | 
			
		||||
Returns description of each port.  Extended to include serial ports,
 | 
			
		||||
C<cyISPortName>.
 | 
			
		||||
 | 
			
		||||
=item $cyclades->i_name()
 | 
			
		||||
 | 
			
		||||
Returns name of each port.  Extended to include serial ports, C<cyISPortName>.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer1
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer1/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -1,177 +0,0 @@
 | 
			
		||||
# SNMP::Info::Layer2::Ubiquiti
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
package SNMP::Info::Layer2::Ubiquiti;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::IEEE802dot11;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::Ubiquiti::ISA
 | 
			
		||||
    = qw/SNMP::Info::IEEE802dot11 SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::Ubiquiti::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
    %SNMP::Info::IEEE802dot11::MIBS,
 | 
			
		||||
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS
 | 
			
		||||
    = ( %SNMP::Info::Layer2::GLOBALS, %SNMP::Info::IEEE802dot11::GLOBALS, );
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer2::FUNCS,
 | 
			
		||||
    %SNMP::Info::IEEE802dot11::FUNCS,
 | 
			
		||||
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::IEEE802dot11::MUNGE, );
 | 
			
		||||
 | 
			
		||||
sub os {
 | 
			
		||||
    return 'Ubiquiti';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os_ver {
 | 
			
		||||
    my $dot11 = shift;
 | 
			
		||||
 | 
			
		||||
    my $versions = $dot11->dot11_prod_ver();
 | 
			
		||||
 | 
			
		||||
    foreach my $iid ( keys %$versions ) {
 | 
			
		||||
        my $ver = $versions->{$iid};
 | 
			
		||||
        next unless defined $ver;
 | 
			
		||||
	return $ver;
 | 
			
		||||
        if ( $ver =~ /([\d\.]+)/ ) {
 | 
			
		||||
            return $1;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    return 'Ubiquiti Networks, Inc.';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $dot11 = shift;
 | 
			
		||||
 | 
			
		||||
    my $names = $dot11->dot11_prod_name();
 | 
			
		||||
 | 
			
		||||
    foreach my $iid ( keys %$names ) {
 | 
			
		||||
        my $prod = $names->{$iid};
 | 
			
		||||
        next unless defined $prod;
 | 
			
		||||
        return $prod;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer2::Ubiquiti - SNMP Interface to Ubiquiti Access Points
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
Max Kosmach
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
 # Let SNMP::Info determine the correct subclass for you. 
 | 
			
		||||
 my $ubnt = new SNMP::Info(
 | 
			
		||||
                          AutoSpecify => 1,
 | 
			
		||||
                          Debug       => 1,
 | 
			
		||||
                          DestHost    => 'myswitch',
 | 
			
		||||
                          Community   => 'public',
 | 
			
		||||
                          Version     => 2
 | 
			
		||||
                        ) 
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
 my $class = $ubnt->class();
 | 
			
		||||
 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Provides abstraction to the configuration information obtainable from
 | 
			
		||||
Ubiquiti Access Point through SNMP.
 | 
			
		||||
 | 
			
		||||
For speed or debugging purposes you can call the subclass directly, but not
 | 
			
		||||
after determining a more specific class using the method above. 
 | 
			
		||||
 | 
			
		||||
 my $ubnt = new SNMP::Info::Layer2::Ubiquiti(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::IEEE802dot11
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
 | 
			
		||||
None.
 | 
			
		||||
 | 
			
		||||
=head2 Inherited MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::IEEE802dot11/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $ubnt->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'Ubiquiti Networks, Inc.'
 | 
			
		||||
 | 
			
		||||
=item $ubnt->model()
 | 
			
		||||
 | 
			
		||||
Returns the model extracted from C<dot11manufacturerProductName>.
 | 
			
		||||
 | 
			
		||||
=item $ubnt->os()
 | 
			
		||||
 | 
			
		||||
Returns 'Ubiquiti'
 | 
			
		||||
 | 
			
		||||
=item $ubnt->os_ver()
 | 
			
		||||
 | 
			
		||||
Returns the software version extracted from C<dot11manufacturerProductVersion>.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Global Methods imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Global Methods imported from SNMP::Info::IEEE802dot11
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::IEEE802dot11/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
to a hash.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::IEEE802dot11
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::IEEE802dot11/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -1,194 +0,0 @@
 | 
			
		||||
# SNMP::Info::Layer3::Timetra
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Bill Fenner
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
# modification, are permitted provided that the following conditions are met:
 | 
			
		||||
#
 | 
			
		||||
#     * Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
#       this list of conditions and the following disclaimer.
 | 
			
		||||
#     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
#       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
#       documentation and/or other materials provided with the distribution.
 | 
			
		||||
#     * Neither the name of the University of California, Santa Cruz nor the
 | 
			
		||||
#       names of its contributors may be used to endorse or promote products
 | 
			
		||||
#       derived from this software without specific prior written permission.
 | 
			
		||||
#
 | 
			
		||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
			
		||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
package SNMP::Info::Layer3::Timetra;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer3::Timetra::ISA = qw/SNMP::Info::Layer3
 | 
			
		||||
    Exporter/;
 | 
			
		||||
@SNMP::Info::Layer3::Timetra::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( %SNMP::Info::Layer3::MIBS, 'TIMETRA-GLOBAL-MIB' => 'timetraReg', );
 | 
			
		||||
 | 
			
		||||
%GLOBALS = ( %SNMP::Info::Layer3::GLOBALS, );
 | 
			
		||||
 | 
			
		||||
%FUNCS = ( %SNMP::Info::Layer3::FUNCS, );
 | 
			
		||||
 | 
			
		||||
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, );
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $timetra = shift;
 | 
			
		||||
    my $id      = $timetra->id();
 | 
			
		||||
    my $model   = &SNMP::translateObj($id);
 | 
			
		||||
 | 
			
		||||
    return $id unless defined $model;
 | 
			
		||||
 | 
			
		||||
    $model =~ s/^tmnxModel//;
 | 
			
		||||
 | 
			
		||||
    return $model;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os {
 | 
			
		||||
    return 'TiMOS';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    return 'alcatel-lucent';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os_ver {
 | 
			
		||||
    my $timetra = shift;
 | 
			
		||||
 | 
			
		||||
    my $descr = $timetra->description();
 | 
			
		||||
    if ( $descr =~ m/^TiMOS-(\S+)/ ) {
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # No clue what this will try but hey
 | 
			
		||||
    return $timetra->SUPER::os_ver();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# The interface description contains the SFP type, so
 | 
			
		||||
# to avoid losing historical information through a configuration change
 | 
			
		||||
# we use interface name instead.
 | 
			
		||||
sub interfaces {
 | 
			
		||||
    my $alu     = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    return $alu->orig_i_name($partial);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer3::Timetra - SNMP Interface to Alcatel-Lucent SR
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
Bill Fenner
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
 # Let SNMP::Info determine the correct subclass for you. 
 | 
			
		||||
 my $alu = new SNMP::Info(
 | 
			
		||||
                        AutoSpecify => 1,
 | 
			
		||||
                        Debug       => 1,
 | 
			
		||||
                        # These arguments are passed directly to SNMP::Session
 | 
			
		||||
                        DestHost    => 'myswitch',
 | 
			
		||||
                        Community   => 'public',
 | 
			
		||||
                        Version     => 2
 | 
			
		||||
                        ) 
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
 my $class      = $alu->class();
 | 
			
		||||
 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Subclass for Alcatel-Lucent Service Routers
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<TIMETRA-GLOBAL-MIB>
 | 
			
		||||
 | 
			
		||||
=item Inherited Classes' MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $alu->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'alcatel-lucent'
 | 
			
		||||
 | 
			
		||||
=item $alu->os()
 | 
			
		||||
 | 
			
		||||
Returns 'TiMOS'
 | 
			
		||||
 | 
			
		||||
=item $alu->os_ver()
 | 
			
		||||
 | 
			
		||||
Grabs the version string from C<sysDescr>.
 | 
			
		||||
 | 
			
		||||
=item $alu->model()
 | 
			
		||||
 | 
			
		||||
Tries to reference $alu->id() to one of the product MIBs listed above
 | 
			
		||||
 | 
			
		||||
Removes 'tmnxModel' from the name for readability.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
to a hash.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $alu->interfaces()
 | 
			
		||||
 | 
			
		||||
Returns C<ifName>, since the default Layer3 C<ifDescr> varies based
 | 
			
		||||
upon the transceiver inserted.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
							
								
								
									
										426
									
								
								MANIFEST
									
									
									
									
									
								
							
							
						
						
									
										426
									
								
								MANIFEST
									
									
									
									
									
								
							@@ -1,128 +1,302 @@
 | 
			
		||||
ChangeLog
 | 
			
		||||
COPYRIGHT
 | 
			
		||||
DEVELOP
 | 
			
		||||
DeviceMatrix.txt
 | 
			
		||||
Info.pm
 | 
			
		||||
Info/AdslLine.pm
 | 
			
		||||
Info/Aggregate.pm
 | 
			
		||||
Info/Airespace.pm
 | 
			
		||||
Info/AMAP.pm
 | 
			
		||||
Info/Bridge.pm
 | 
			
		||||
Info/CDP.pm
 | 
			
		||||
Info/CiscoAgg.pm
 | 
			
		||||
Info/CiscoConfig.pm
 | 
			
		||||
Info/CiscoPortSecurity.pm
 | 
			
		||||
Info/CiscoPower.pm
 | 
			
		||||
Info/CiscoQOS.pm
 | 
			
		||||
Info/CiscoRTT.pm
 | 
			
		||||
Info/CiscoStack.pm
 | 
			
		||||
Info/CiscoStats.pm
 | 
			
		||||
Info/CiscoStpExtensions.pm
 | 
			
		||||
Info/CiscoVTP.pm
 | 
			
		||||
Info/EDP.pm
 | 
			
		||||
Info/Entity.pm
 | 
			
		||||
Info/EtherLike.pm
 | 
			
		||||
Info/FDP.pm
 | 
			
		||||
Info/IEEE802dot11.pm
 | 
			
		||||
Info/IEEE802dot3ad.pm
 | 
			
		||||
Info/IPv6.pm
 | 
			
		||||
Info/Layer1.pm
 | 
			
		||||
Info/Layer1/Allied.pm
 | 
			
		||||
Info/Layer1/Asante.pm
 | 
			
		||||
Info/Layer1/Bayhub.pm
 | 
			
		||||
Info/Layer1/Cyclades.pm
 | 
			
		||||
Info/Layer1/S3000.pm
 | 
			
		||||
Info/Layer2.pm
 | 
			
		||||
Info/Layer2/3Com.pm
 | 
			
		||||
Info/Layer2/Airespace.pm
 | 
			
		||||
Info/Layer2/Aironet.pm
 | 
			
		||||
Info/Layer2/Allied.pm
 | 
			
		||||
Info/Layer2/Baystack.pm
 | 
			
		||||
Info/Layer2/C1900.pm
 | 
			
		||||
Info/Layer2/C2900.pm
 | 
			
		||||
Info/Layer2/Catalyst.pm
 | 
			
		||||
Info/Layer2/Centillion.pm
 | 
			
		||||
Info/Layer2/Cisco.pm
 | 
			
		||||
Info/Layer2/CiscoSB.pm
 | 
			
		||||
Info/Layer2/HP.pm
 | 
			
		||||
Info/Layer2/HP4000.pm
 | 
			
		||||
Info/Layer2/HPVC.pm
 | 
			
		||||
Info/Layer2/Kentrox.pm
 | 
			
		||||
Info/Layer2/N2270.pm
 | 
			
		||||
Info/Layer2/NAP222x.pm
 | 
			
		||||
Info/Layer2/Netgear.pm
 | 
			
		||||
Info/Layer2/NWSS2300.pm
 | 
			
		||||
Info/Layer2/Orinoco.pm
 | 
			
		||||
Info/Layer2/Trapeze.pm
 | 
			
		||||
Info/Layer2/Ubiquiti.pm
 | 
			
		||||
Info/Layer2/ZyXEL_DSLAM.pm
 | 
			
		||||
Info/Layer3.pm
 | 
			
		||||
Info/Layer3/Aironet.pm
 | 
			
		||||
Info/Layer3/AlcatelLucent.pm
 | 
			
		||||
Info/Layer3/AlteonAD.pm
 | 
			
		||||
Info/Layer3/Altiga.pm
 | 
			
		||||
Info/Layer3/Arista.pm
 | 
			
		||||
Info/Layer3/Aruba.pm
 | 
			
		||||
Info/Layer3/BayRS.pm
 | 
			
		||||
Info/Layer3/BlueCoatSG.pm
 | 
			
		||||
Info/Layer3/C3550.pm
 | 
			
		||||
Info/Layer3/C4000.pm
 | 
			
		||||
Info/Layer3/C6500.pm
 | 
			
		||||
Info/Layer3/Cisco.pm
 | 
			
		||||
Info/Layer3/CiscoASA.pm
 | 
			
		||||
Info/Layer3/CiscoFWSM.pm
 | 
			
		||||
Info/Layer3/CiscoSwitch.pm
 | 
			
		||||
Info/Layer3/Contivity.pm
 | 
			
		||||
Info/Layer3/Dell.pm
 | 
			
		||||
Info/Layer3/Enterasys.pm
 | 
			
		||||
Info/Layer3/Extreme.pm
 | 
			
		||||
Info/Layer3/F5.pm
 | 
			
		||||
Info/Layer3/Force10.pm
 | 
			
		||||
Info/Layer3/Fortinet.pm
 | 
			
		||||
Info/Layer3/Foundry.pm
 | 
			
		||||
Info/Layer3/H3C.pm
 | 
			
		||||
Info/Layer3/HP9300.pm
 | 
			
		||||
Info/Layer3/Huawei.pm
 | 
			
		||||
Info/Layer3/IBMGbTor.pm
 | 
			
		||||
Info/Layer3/Juniper.pm
 | 
			
		||||
Info/Layer3/Lantronix.pm
 | 
			
		||||
Info/Layer3/Microsoft.pm
 | 
			
		||||
Info/Layer3/Mikrotik.pm
 | 
			
		||||
Info/Layer3/N1600.pm
 | 
			
		||||
Info/Layer3/Netscreen.pm
 | 
			
		||||
Info/Layer3/NetSNMP.pm
 | 
			
		||||
Info/Layer3/Nexus.pm
 | 
			
		||||
Info/Layer3/PacketFront.pm
 | 
			
		||||
Info/Layer3/PaloAlto.pm
 | 
			
		||||
Info/Layer3/Passport.pm
 | 
			
		||||
Info/Layer3/Pf.pm
 | 
			
		||||
Info/Layer3/Pica8.pm
 | 
			
		||||
Info/Layer3/SonicWALL.pm
 | 
			
		||||
Info/Layer3/Steelhead.pm
 | 
			
		||||
Info/Layer3/Sun.pm
 | 
			
		||||
Info/Layer3/Tasman.pm
 | 
			
		||||
Info/Layer3/Timetra.pm
 | 
			
		||||
Info/Layer3/VMware.pm
 | 
			
		||||
Info/Layer7.pm
 | 
			
		||||
Info/Layer7/APC.pm
 | 
			
		||||
Info/Layer7/Neoteris.pm
 | 
			
		||||
Info/Layer7/Netscaler.pm
 | 
			
		||||
Info/LLDP.pm
 | 
			
		||||
Info/MAU.pm
 | 
			
		||||
Info/MRO.pm
 | 
			
		||||
Info/NortelStack.pm
 | 
			
		||||
Info/PowerEthernet.pm
 | 
			
		||||
Info/RapidCity.pm
 | 
			
		||||
Info/SONMP.pm
 | 
			
		||||
Makefile.PL
 | 
			
		||||
.perltidyrc
 | 
			
		||||
Build.PL
 | 
			
		||||
Changes
 | 
			
		||||
contrib/DEVELOP
 | 
			
		||||
contrib/util/docmunge
 | 
			
		||||
contrib/util/make_dev_matrix.pl
 | 
			
		||||
contrib/util/make_snmpdata.pl
 | 
			
		||||
contrib/util/push_ver
 | 
			
		||||
contrib/util/run_test
 | 
			
		||||
contrib/util/test_class.pl
 | 
			
		||||
contrib/util/test_class_mocked.pl
 | 
			
		||||
lib/SNMP/Info.pm
 | 
			
		||||
lib/SNMP/Info/AdslLine.pm
 | 
			
		||||
lib/SNMP/Info/Aggregate.pm
 | 
			
		||||
lib/SNMP/Info/Airespace.pm
 | 
			
		||||
lib/SNMP/Info/AMAP.pm
 | 
			
		||||
lib/SNMP/Info/Bridge.pm
 | 
			
		||||
lib/SNMP/Info/CDP.pm
 | 
			
		||||
lib/SNMP/Info/CiscoAgg.pm
 | 
			
		||||
lib/SNMP/Info/CiscoBGP.pm
 | 
			
		||||
lib/SNMP/Info/CiscoConfig.pm
 | 
			
		||||
lib/SNMP/Info/CiscoPortSecurity.pm
 | 
			
		||||
lib/SNMP/Info/CiscoPower.pm
 | 
			
		||||
lib/SNMP/Info/CiscoQOS.pm
 | 
			
		||||
lib/SNMP/Info/CiscoRTT.pm
 | 
			
		||||
lib/SNMP/Info/CiscoStack.pm
 | 
			
		||||
lib/SNMP/Info/CiscoStats.pm
 | 
			
		||||
lib/SNMP/Info/CiscoStpExtensions.pm
 | 
			
		||||
lib/SNMP/Info/CiscoVTP.pm
 | 
			
		||||
lib/SNMP/Info/DocsisCM.pm
 | 
			
		||||
lib/SNMP/Info/DocsisHE.pm
 | 
			
		||||
lib/SNMP/Info/EDP.pm
 | 
			
		||||
lib/SNMP/Info/Entity.pm
 | 
			
		||||
lib/SNMP/Info/EtherLike.pm
 | 
			
		||||
lib/SNMP/Info/FDP.pm
 | 
			
		||||
lib/SNMP/Info/IEEE802_Bridge.pm
 | 
			
		||||
lib/SNMP/Info/IEEE802dot11.pm
 | 
			
		||||
lib/SNMP/Info/IEEE802dot3ad.pm
 | 
			
		||||
lib/SNMP/Info/IPv6.pm
 | 
			
		||||
lib/SNMP/Info/Layer1.pm
 | 
			
		||||
lib/SNMP/Info/Layer1/Allied.pm
 | 
			
		||||
lib/SNMP/Info/Layer1/Asante.pm
 | 
			
		||||
lib/SNMP/Info/Layer1/Bayhub.pm
 | 
			
		||||
lib/SNMP/Info/Layer1/Cyclades.pm
 | 
			
		||||
lib/SNMP/Info/Layer1/S3000.pm
 | 
			
		||||
lib/SNMP/Info/Layer2.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/3Com.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Adtran.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Aerohive.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Airespace.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Aironet.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Allied.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Atmedia.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Baystack.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/C1900.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/C2900.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Catalyst.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Centillion.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Cisco.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/CiscoSB.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Exinda.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/HP.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/HP4000.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/HPVC.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Kentrox.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/N2270.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/NAP222x.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Netgear.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Nexans.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/NWSS2300.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Orinoco.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Sixnet.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Trapeze.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Ubiquiti.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
 | 
			
		||||
lib/SNMP/Info/Layer3.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Aironet.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/AlcatelLucent.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/AlteonAD.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Altiga.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Arista.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Aruba.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/ArubaCX.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/BayRS.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/BlueCoatSG.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/C3550.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/C4000.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/C6500.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/CheckPoint.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Ciena.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Cisco.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/CiscoASA.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/CiscoFWSM.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/CiscoSwitch.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Contivity.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Cumulus.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Dell.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/DLink.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Enterasys.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/ERX.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Extreme.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/F5.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Force10.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Fortinet.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Foundry.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Genua.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/H3C.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/HP9300.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Huawei.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/IBMGbTor.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Juniper.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Lantronix.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Lenovo.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Microsoft.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Mikrotik.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/N1600.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Netscreen.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/NetSNMP.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Nexus.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/OneAccess.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/PacketFront.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/PaloAlto.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Passport.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Pf.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Pica8.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Redlion.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Scalance.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/SonicWALL.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Steelfusion.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Steelhead.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/SteelheadEx.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Sun.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Tasman.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Teltonika.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Timetra.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/VMware.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/VyOS.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Whiterabbit.pm
 | 
			
		||||
lib/SNMP/Info/Layer7.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/APC.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/Arbor.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/CiscoIPS.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/Gigamon.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/HWGroup.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/Liebert.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/Neoteris.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/Netscaler.pm
 | 
			
		||||
lib/SNMP/Info/LLDP.pm
 | 
			
		||||
lib/SNMP/Info/MAU.pm
 | 
			
		||||
lib/SNMP/Info/MRO.pm
 | 
			
		||||
lib/SNMP/Info/NortelStack.pm
 | 
			
		||||
lib/SNMP/Info/PowerEthernet.pm
 | 
			
		||||
lib/SNMP/Info/RapidCity.pm
 | 
			
		||||
lib/SNMP/Info/SONMP.pm
 | 
			
		||||
LICENSE
 | 
			
		||||
MANIFEST			This list of files
 | 
			
		||||
META.json
 | 
			
		||||
META.yml
 | 
			
		||||
README
 | 
			
		||||
t/00-load.t
 | 
			
		||||
t/docmunge
 | 
			
		||||
t/make_dev_matrix.pl
 | 
			
		||||
t/prereq.t
 | 
			
		||||
t/push_ver
 | 
			
		||||
t/run_test
 | 
			
		||||
t/test_class.pl
 | 
			
		||||
t/util/make_snmpdata.pl
 | 
			
		||||
t/util/test_class_mocked.pl
 | 
			
		||||
t/00_load.t
 | 
			
		||||
xt/.perltidyrc
 | 
			
		||||
xt/00_local_distribution.t
 | 
			
		||||
xt/00_local_docininfo.t
 | 
			
		||||
xt/00_local_perlcritic.t
 | 
			
		||||
xt/00_local_pod-coverage.t
 | 
			
		||||
xt/00_local_pod.t
 | 
			
		||||
xt/00_local_prereq.t
 | 
			
		||||
xt/00_local_spelling.t
 | 
			
		||||
xt/00_local_versionsync.t
 | 
			
		||||
xt/10_remote_snmplabs.t
 | 
			
		||||
xt/21_run.t
 | 
			
		||||
xt/lib/My/Test/Class.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/AdslLine.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Aggregate.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Airespace.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/AMAP.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Bridge.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CDP.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CiscoAgg.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CiscoConfig.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CiscoPortSecurity.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CiscoPower.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CiscoQOS.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CiscoRTT.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CiscoStats.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CiscoStpExtensions.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/CiscoVTP.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/EDP.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Entity.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/EtherLike.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/FDP.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/IEEE802dot11.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/IEEE802dot3ad.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/IPv6.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer1.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer1/Allied.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer1/Asante.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer1/Bayhub.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer1/Cyclades.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer1/S3000.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/3Com.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Aerohive.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Airespace.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Aironet.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Allied.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Atmedia.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Baystack.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/C1900.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/C2900.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Catalyst.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Centillion.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Cisco.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/CiscoSB.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Exinda.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/HP.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/HP4000.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/HPVC.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Kentrox.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/N2270.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/NAP222x.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Netgear.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Nexans.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/NWSS2300.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Orinoco.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Sixnet.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Trapeze.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/Ubiquiti.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Aironet.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/AlcatelLucent.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/AlteonAD.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Altiga.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Arista.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Aruba.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/BayRS.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/BlueCoatSG.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/C3550.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/C4000.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/C6500.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/CheckPoint.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Cisco.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/CiscoASA.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/CiscoFWSM.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/CiscoSwitch.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Contivity.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Cumulus.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Dell.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/DLink.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Enterasys.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/ERX.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Extreme.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/F5.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Force10.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Fortinet.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Foundry.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Genua.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/H3C.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/HP9300.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Huawei.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/IBMGbTor.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Juniper.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Lantronix.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Lenovo.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Microsoft.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Mikrotik.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/N1600.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Netscreen.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/NetSNMP.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Nexus.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/OneAccess.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/PacketFront.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/PaloAlto.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Passport.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Pf.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Pica8.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Redlion.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Scalance.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/SonicWALL.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Steelhead.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Sun.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Tasman.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Teltonika.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Timetra.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/VMware.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/VyOS.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer7.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer7/APC.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer7/Arbor.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer7/CiscoIPS.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer7/Gigamon.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer7/Liebert.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer7/Neoteris.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer7/Netscaler.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/LLDP.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/MAU.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/NortelStack.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/PowerEthernet.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/RapidCity.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/SONMP.pm
 | 
			
		||||
 
 | 
			
		||||
@@ -1,28 +1,73 @@
 | 
			
		||||
# Version control files and dirs.
 | 
			
		||||
\.bak$
 | 
			
		||||
\.pid$
 | 
			
		||||
\.swp$
 | 
			
		||||
 | 
			
		||||
^SNMP-Info-
 | 
			
		||||
 | 
			
		||||
^MANIFEST\.
 | 
			
		||||
 | 
			
		||||
# Avoid version control files.
 | 
			
		||||
\bRCS\b
 | 
			
		||||
\bCVS\b
 | 
			
		||||
\bSCCS\b
 | 
			
		||||
,v$
 | 
			
		||||
\B\.svn\b
 | 
			
		||||
\B\.git\b
 | 
			
		||||
.gitignore
 | 
			
		||||
\B\.gitignore\b
 | 
			
		||||
\b_darcs\b
 | 
			
		||||
\B\.cvsignore$
 | 
			
		||||
 | 
			
		||||
# Makemaker generated files and dirs.
 | 
			
		||||
^MANIFEST\.
 | 
			
		||||
^Makefile$
 | 
			
		||||
^blib/
 | 
			
		||||
^MakeMaker-\d
 | 
			
		||||
pm_to_blib
 | 
			
		||||
MYMETA.*
 | 
			
		||||
# Avoid VMS specific MakeMaker generated files
 | 
			
		||||
\bDescrip.MMS$
 | 
			
		||||
\bDESCRIP.MMS$
 | 
			
		||||
\bdescrip.mms$
 | 
			
		||||
 | 
			
		||||
# Temp, old and emacs backup files.
 | 
			
		||||
# Avoid Makemaker generated and utility files.
 | 
			
		||||
\bMANIFEST\.bak
 | 
			
		||||
\bMakefile$
 | 
			
		||||
\bblib/
 | 
			
		||||
\bMakeMaker-\d
 | 
			
		||||
\bpm_to_blib\.ts$
 | 
			
		||||
\bpm_to_blib$
 | 
			
		||||
\bblibdirs\.ts$         # 6.18 through 6.25 generated this
 | 
			
		||||
 | 
			
		||||
# Avoid Module::Build generated and utility files.
 | 
			
		||||
\bBuild$
 | 
			
		||||
\b_build/
 | 
			
		||||
\bBuild.bat$
 | 
			
		||||
\bBuild.COM$
 | 
			
		||||
\bBUILD.COM$
 | 
			
		||||
\bbuild.com$
 | 
			
		||||
 | 
			
		||||
# Avoid temp and backup files.
 | 
			
		||||
~$
 | 
			
		||||
\.old$
 | 
			
		||||
^#.*#$
 | 
			
		||||
^\.#
 | 
			
		||||
\#$
 | 
			
		||||
\b\.#
 | 
			
		||||
\.bak$
 | 
			
		||||
\.tmp$
 | 
			
		||||
\.#
 | 
			
		||||
\.rej$
 | 
			
		||||
 | 
			
		||||
# Private Regression Tests
 | 
			
		||||
\d+_local_
 | 
			
		||||
\.?perl\w+\.?rc$
 | 
			
		||||
# Avoid OS-specific files/dirs
 | 
			
		||||
# Mac OSX metadata
 | 
			
		||||
\B\.DS_Store
 | 
			
		||||
# Mac OSX SMB mount metadata files
 | 
			
		||||
\B\._
 | 
			
		||||
 | 
			
		||||
# Komodo project file
 | 
			
		||||
\.kpf$
 | 
			
		||||
# Avoid Devel::Cover and Devel::CoverX::Covered files.
 | 
			
		||||
\bcover_db\b
 | 
			
		||||
\bcovered\b
 | 
			
		||||
 | 
			
		||||
# Avoid MYMETA files
 | 
			
		||||
^MYMETA\.
 | 
			
		||||
 | 
			
		||||
.github
 | 
			
		||||
.travis
 | 
			
		||||
README.md
 | 
			
		||||
 | 
			
		||||
# Avoid Komodo project file
 | 
			
		||||
\.komodoproject$
 | 
			
		||||
 | 
			
		||||
# ignore intellij
 | 
			
		||||
\B\.idea
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										644
									
								
								META.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										644
									
								
								META.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,644 @@
 | 
			
		||||
{
 | 
			
		||||
   "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.4231",
 | 
			
		||||
   "license" : [
 | 
			
		||||
      "bsd"
 | 
			
		||||
   ],
 | 
			
		||||
   "meta-spec" : {
 | 
			
		||||
      "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
 | 
			
		||||
      "version" : 2
 | 
			
		||||
   },
 | 
			
		||||
   "name" : "SNMP-Info",
 | 
			
		||||
   "prereqs" : {
 | 
			
		||||
      "configure" : {
 | 
			
		||||
         "requires" : {
 | 
			
		||||
            "Module::Build" : "0.42"
 | 
			
		||||
         }
 | 
			
		||||
      },
 | 
			
		||||
      "runtime" : {
 | 
			
		||||
         "recommends" : {
 | 
			
		||||
            "Class::ISA" : "0",
 | 
			
		||||
            "File::Slurp" : "0",
 | 
			
		||||
            "Module::Info" : "0",
 | 
			
		||||
            "Module::Load" : "0",
 | 
			
		||||
            "PPI" : "0"
 | 
			
		||||
         },
 | 
			
		||||
         "requires" : {
 | 
			
		||||
            "Math::BigInt" : "0",
 | 
			
		||||
            "NetAddr::IP" : "4.068",
 | 
			
		||||
            "SNMP" : "0"
 | 
			
		||||
         }
 | 
			
		||||
      },
 | 
			
		||||
      "test" : {
 | 
			
		||||
         "requires" : {
 | 
			
		||||
            "Class::Inspector" : "0",
 | 
			
		||||
            "File::Find" : "0",
 | 
			
		||||
            "File::Slurper" : "0",
 | 
			
		||||
            "Hook::LexWrap" : "0",
 | 
			
		||||
            "Module::Find" : "0",
 | 
			
		||||
            "NetSNMP::default_store" : "0",
 | 
			
		||||
            "Path::Class" : "0",
 | 
			
		||||
            "Test::Class::Most" : "0",
 | 
			
		||||
            "Test::Distribution" : "0",
 | 
			
		||||
            "Test::Exception" : "0.43",
 | 
			
		||||
            "Test::MockObject::Extends" : "0",
 | 
			
		||||
            "Test::More" : "0.88"
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
   },
 | 
			
		||||
   "provides" : {
 | 
			
		||||
      "SNMP::Info" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::AMAP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/AMAP.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::AdslLine" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/AdslLine.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Aggregate" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Aggregate.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Airespace" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Airespace.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Bridge" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Bridge.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CDP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CDP.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoAgg" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoAgg.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoBGP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoBGP.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoConfig" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoConfig.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoPortSecurity" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoPortSecurity.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoPower" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoPower.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoQOS" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoQOS.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoRTT" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoRTT.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoStack" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoStack.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoStats" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoStats.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoStpExtensions" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoStpExtensions.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoVTP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoVTP.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::DocsisCM" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/DocsisCM.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::DocsisHE" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/DocsisHE.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::EDP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/EDP.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Entity" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Entity.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::EtherLike" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/EtherLike.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::FDP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/FDP.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::IEEE802_Bridge" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/IEEE802_Bridge.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::IEEE802dot11" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/IEEE802dot11.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::IEEE802dot3ad" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/IEEE802dot3ad.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::IPv6" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/IPv6.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::LLDP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/LLDP.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer1" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer1.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer1::Allied" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer1/Allied.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer1::Asante" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer1/Asante.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer1::Bayhub" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer1/Bayhub.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer1::Cyclades" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer1/Cyclades.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer1::S3000" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer1/S3000.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::3Com" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/3Com.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Adtran" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Adtran.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Aerohive" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Aerohive.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Airespace" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Airespace.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Aironet" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Aironet.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Allied" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Allied.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Atmedia" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Atmedia.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Baystack" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Baystack.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::C1900" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/C1900.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::C2900" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/C2900.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Catalyst" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Catalyst.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Centillion" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Centillion.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Cisco" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Cisco.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::CiscoSB" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/CiscoSB.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Exinda" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Exinda.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::HP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/HP.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::HP4000" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/HP4000.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::HPVC" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/HPVC.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Kentrox" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Kentrox.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::N2270" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/N2270.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::NAP222x" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/NAP222x.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::NWSS2300" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/NWSS2300.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Netgear" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Netgear.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Nexans" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Nexans.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Orinoco" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Orinoco.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Sixnet" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Sixnet.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Trapeze" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Trapeze.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Ubiquiti" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Ubiquiti.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::ZyXEL_DSLAM" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Aironet" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Aironet.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::AlcatelLucent" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/AlcatelLucent.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::AlteonAD" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/AlteonAD.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Altiga" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Altiga.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Arista" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Arista.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Aruba" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Aruba.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::ArubaCX" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/ArubaCX.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::BayRS" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/BayRS.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::BlueCoatSG" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/BlueCoatSG.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::C3550" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/C3550.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::C4000" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/C4000.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::C6500" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/C6500.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::CheckPoint" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/CheckPoint.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Ciena" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Ciena.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Cisco" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Cisco.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::CiscoASA" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/CiscoASA.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::CiscoFWSM" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/CiscoFWSM.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::CiscoSwitch" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/CiscoSwitch.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Contivity" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Contivity.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Cumulus" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Cumulus.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::DLink" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/DLink.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Dell" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Dell.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::ERX" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/ERX.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Enterasys" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Enterasys.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Extreme" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Extreme.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::F5" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/F5.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Force10" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Force10.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Fortinet" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Fortinet.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Foundry" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Foundry.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Genua" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Genua.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::H3C" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/H3C.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::HP9300" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/HP9300.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Huawei" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Huawei.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::IBMGbTor" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/IBMGbTor.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Juniper" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Juniper.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Lantronix" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Lantronix.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Lenovo" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Lenovo.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Microsoft" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Microsoft.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Mikrotik" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Mikrotik.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::N1600" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/N1600.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::NetSNMP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/NetSNMP.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Netscreen" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Netscreen.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Nexus" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Nexus.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::OneAccess" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/OneAccess.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::PacketFront" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/PacketFront.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::PaloAlto" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/PaloAlto.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Passport" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Passport.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Pf" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Pf.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Pica8" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Pica8.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Redlion" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Redlion.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Scalance" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Scalance.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::SonicWALL" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/SonicWALL.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Steelfusion" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Steelfusion.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Steelhead" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Steelhead.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::SteelheadEx" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/SteelheadEx.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Sun" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Sun.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Tasman" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Tasman.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Teltonika" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Teltonika.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Timetra" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Timetra.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::VMware" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/VMware.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::VyOS" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/VyOS.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Whiterabbit" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Whiterabbit.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::APC" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/APC.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::Arbor" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/Arbor.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::CiscoIPS" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/CiscoIPS.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::Gigamon" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/Gigamon.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::HWGroup" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/HWGroup.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::Liebert" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/Liebert.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::Neoteris" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/Neoteris.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::Netscaler" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/Netscaler.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::MAU" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/MAU.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::MRO" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/MRO.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::NortelStack" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/NortelStack.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::PowerEthernet" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/PowerEthernet.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::RapidCity" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/RapidCity.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::SONMP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/SONMP.pm",
 | 
			
		||||
         "version" : "3.83"
 | 
			
		||||
      }
 | 
			
		||||
   },
 | 
			
		||||
   "release_status" : "stable",
 | 
			
		||||
   "resources" : {
 | 
			
		||||
      "bugtracker" : {
 | 
			
		||||
         "web" : "https://github.com/netdisco/snmp-info/issues"
 | 
			
		||||
      },
 | 
			
		||||
      "homepage" : "http://netdisco.org/",
 | 
			
		||||
      "license" : [
 | 
			
		||||
         "http://opensource.org/licenses/bsd-license.php"
 | 
			
		||||
      ],
 | 
			
		||||
      "repository" : {
 | 
			
		||||
         "url" : "https://github.com/netdisco/snmp-info"
 | 
			
		||||
      },
 | 
			
		||||
      "x_IRC" : "irc://irc.libera.chat/#netdisco",
 | 
			
		||||
      "x_MailingList" : "https://lists.sourceforge.net/lists/listinfo/snmp-info-users"
 | 
			
		||||
   },
 | 
			
		||||
   "version" : "3.83",
 | 
			
		||||
   "x_serialization_backend" : "JSON::PP version 4.06"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										475
									
								
								META.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										475
									
								
								META.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,475 @@
 | 
			
		||||
---
 | 
			
		||||
abstract: 'OO Interface to Network devices and MIBs through SNMP'
 | 
			
		||||
author:
 | 
			
		||||
  - 'Eric A. Miller <emiller@cpan.org>'
 | 
			
		||||
build_requires:
 | 
			
		||||
  Class::Inspector: '0'
 | 
			
		||||
  File::Find: '0'
 | 
			
		||||
  File::Slurper: '0'
 | 
			
		||||
  Hook::LexWrap: '0'
 | 
			
		||||
  Module::Find: '0'
 | 
			
		||||
  NetSNMP::default_store: '0'
 | 
			
		||||
  Path::Class: '0'
 | 
			
		||||
  Test::Class::Most: '0'
 | 
			
		||||
  Test::Distribution: '0'
 | 
			
		||||
  Test::Exception: '0.43'
 | 
			
		||||
  Test::MockObject::Extends: '0'
 | 
			
		||||
  Test::More: '0.88'
 | 
			
		||||
configure_requires:
 | 
			
		||||
  Module::Build: '0.42'
 | 
			
		||||
dynamic_config: 1
 | 
			
		||||
generated_by: 'Module::Build version 0.4231, 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.83'
 | 
			
		||||
  SNMP::Info::AMAP:
 | 
			
		||||
    file: lib/SNMP/Info/AMAP.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::AdslLine:
 | 
			
		||||
    file: lib/SNMP/Info/AdslLine.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Aggregate:
 | 
			
		||||
    file: lib/SNMP/Info/Aggregate.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Airespace:
 | 
			
		||||
    file: lib/SNMP/Info/Airespace.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Bridge:
 | 
			
		||||
    file: lib/SNMP/Info/Bridge.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::CDP:
 | 
			
		||||
    file: lib/SNMP/Info/CDP.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::CiscoAgg:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoAgg.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::CiscoBGP:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoBGP.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::CiscoConfig:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoConfig.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::CiscoPortSecurity:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoPortSecurity.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::CiscoPower:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoPower.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::CiscoQOS:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoQOS.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::CiscoRTT:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoRTT.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::CiscoStack:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoStack.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::CiscoStats:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoStats.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::CiscoStpExtensions:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoStpExtensions.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::CiscoVTP:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoVTP.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::DocsisCM:
 | 
			
		||||
    file: lib/SNMP/Info/DocsisCM.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::DocsisHE:
 | 
			
		||||
    file: lib/SNMP/Info/DocsisHE.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::EDP:
 | 
			
		||||
    file: lib/SNMP/Info/EDP.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Entity:
 | 
			
		||||
    file: lib/SNMP/Info/Entity.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::EtherLike:
 | 
			
		||||
    file: lib/SNMP/Info/EtherLike.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::FDP:
 | 
			
		||||
    file: lib/SNMP/Info/FDP.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::IEEE802_Bridge:
 | 
			
		||||
    file: lib/SNMP/Info/IEEE802_Bridge.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::IEEE802dot11:
 | 
			
		||||
    file: lib/SNMP/Info/IEEE802dot11.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::IEEE802dot3ad:
 | 
			
		||||
    file: lib/SNMP/Info/IEEE802dot3ad.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::IPv6:
 | 
			
		||||
    file: lib/SNMP/Info/IPv6.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::LLDP:
 | 
			
		||||
    file: lib/SNMP/Info/LLDP.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer1:
 | 
			
		||||
    file: lib/SNMP/Info/Layer1.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer1::Allied:
 | 
			
		||||
    file: lib/SNMP/Info/Layer1/Allied.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer1::Asante:
 | 
			
		||||
    file: lib/SNMP/Info/Layer1/Asante.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer1::Bayhub:
 | 
			
		||||
    file: lib/SNMP/Info/Layer1/Bayhub.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer1::Cyclades:
 | 
			
		||||
    file: lib/SNMP/Info/Layer1/Cyclades.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer1::S3000:
 | 
			
		||||
    file: lib/SNMP/Info/Layer1/S3000.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::3Com:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/3Com.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::Adtran:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Adtran.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::Aerohive:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Aerohive.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::Airespace:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Airespace.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::Aironet:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Aironet.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::Allied:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Allied.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::Atmedia:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Atmedia.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::Baystack:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Baystack.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::C1900:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/C1900.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::C2900:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/C2900.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::Catalyst:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Catalyst.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::Centillion:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Centillion.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::Cisco:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Cisco.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::CiscoSB:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/CiscoSB.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::Exinda:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Exinda.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::HP:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/HP.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::HP4000:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/HP4000.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::HPVC:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/HPVC.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::Kentrox:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Kentrox.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::N2270:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/N2270.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::NAP222x:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/NAP222x.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::NWSS2300:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/NWSS2300.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::Netgear:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Netgear.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::Nexans:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Nexans.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::Orinoco:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Orinoco.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::Sixnet:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Sixnet.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::Trapeze:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Trapeze.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::Ubiquiti:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Ubiquiti.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer2::ZyXEL_DSLAM:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Aironet:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Aironet.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::AlcatelLucent:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/AlcatelLucent.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::AlteonAD:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/AlteonAD.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Altiga:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Altiga.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Arista:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Arista.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Aruba:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Aruba.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::ArubaCX:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/ArubaCX.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::BayRS:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/BayRS.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::BlueCoatSG:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/BlueCoatSG.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::C3550:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/C3550.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::C4000:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/C4000.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::C6500:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/C6500.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::CheckPoint:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/CheckPoint.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Ciena:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Ciena.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Cisco:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Cisco.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::CiscoASA:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/CiscoASA.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::CiscoFWSM:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/CiscoFWSM.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::CiscoSwitch:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/CiscoSwitch.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Contivity:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Contivity.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Cumulus:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Cumulus.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::DLink:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/DLink.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Dell:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Dell.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::ERX:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/ERX.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Enterasys:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Enterasys.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Extreme:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Extreme.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::F5:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/F5.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Force10:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Force10.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Fortinet:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Fortinet.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Foundry:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Foundry.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Genua:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Genua.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::H3C:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/H3C.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::HP9300:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/HP9300.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Huawei:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Huawei.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::IBMGbTor:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/IBMGbTor.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Juniper:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Juniper.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Lantronix:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Lantronix.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Lenovo:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Lenovo.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Microsoft:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Microsoft.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Mikrotik:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Mikrotik.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::N1600:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/N1600.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::NetSNMP:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/NetSNMP.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Netscreen:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Netscreen.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Nexus:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Nexus.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::OneAccess:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/OneAccess.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::PacketFront:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/PacketFront.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::PaloAlto:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/PaloAlto.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Passport:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Passport.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Pf:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Pf.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Pica8:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Pica8.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Redlion:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Redlion.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Scalance:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Scalance.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::SonicWALL:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/SonicWALL.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Steelfusion:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Steelfusion.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Steelhead:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Steelhead.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::SteelheadEx:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/SteelheadEx.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Sun:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Sun.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Tasman:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Tasman.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Teltonika:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Teltonika.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Timetra:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Timetra.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::VMware:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/VMware.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::VyOS:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/VyOS.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer3::Whiterabbit:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Whiterabbit.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer7:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer7::APC:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/APC.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer7::Arbor:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/Arbor.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer7::CiscoIPS:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/CiscoIPS.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer7::Gigamon:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/Gigamon.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer7::HWGroup:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/HWGroup.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer7::Liebert:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/Liebert.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer7::Neoteris:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/Neoteris.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::Layer7::Netscaler:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/Netscaler.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::MAU:
 | 
			
		||||
    file: lib/SNMP/Info/MAU.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::MRO:
 | 
			
		||||
    file: lib/SNMP/Info/MRO.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::NortelStack:
 | 
			
		||||
    file: lib/SNMP/Info/NortelStack.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::PowerEthernet:
 | 
			
		||||
    file: lib/SNMP/Info/PowerEthernet.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::RapidCity:
 | 
			
		||||
    file: lib/SNMP/Info/RapidCity.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
  SNMP::Info::SONMP:
 | 
			
		||||
    file: lib/SNMP/Info/SONMP.pm
 | 
			
		||||
    version: '3.83'
 | 
			
		||||
recommends:
 | 
			
		||||
  Class::ISA: '0'
 | 
			
		||||
  File::Slurp: '0'
 | 
			
		||||
  Module::Info: '0'
 | 
			
		||||
  Module::Load: '0'
 | 
			
		||||
  PPI: '0'
 | 
			
		||||
requires:
 | 
			
		||||
  Math::BigInt: '0'
 | 
			
		||||
  NetAddr::IP: '4.068'
 | 
			
		||||
  SNMP: '0'
 | 
			
		||||
resources:
 | 
			
		||||
  IRC: irc://irc.libera.chat/#netdisco
 | 
			
		||||
  MailingList: https://lists.sourceforge.net/lists/listinfo/snmp-info-users
 | 
			
		||||
  bugtracker: https://github.com/netdisco/snmp-info/issues
 | 
			
		||||
  homepage: http://netdisco.org/
 | 
			
		||||
  license: http://opensource.org/licenses/bsd-license.php
 | 
			
		||||
  repository: https://github.com/netdisco/snmp-info
 | 
			
		||||
version: '3.83'
 | 
			
		||||
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";
 | 
			
		||||
}
 | 
			
		||||
@@ -7,9 +7,14 @@ Coding Guidelines:
 | 
			
		||||
    - check-in required mibs to netdisco-mibs and release new package if needed
 | 
			
		||||
 | 
			
		||||
Release and Testing Instructions:
 | 
			
		||||
    - Please see misc/RELEASE in Netdisco
 | 
			
		||||
      ( http://netdisco.cvs.sourceforge.net/viewvc/netdisco/misc/RELEASE?view=markup )
 | 
			
		||||
      and follow all testing and release guidelines
 | 
			
		||||
    - for netdisco see:
 | 
			
		||||
        -> https://github.com/netdisco/netdisco/wiki/Developing
 | 
			
		||||
        -> https://metacpan.org/pod/App::Netdisco
 | 
			
		||||
    - for snmp::info see:
 | 
			
		||||
        -> https://github.com/netdisco/snmp-info/wiki/Release-Process
 | 
			
		||||
        -> https://metacpan.org/pod/SNMP::Info#EXTENDING-SNMP::INFO
 | 
			
		||||
    - for netdisco-mibs see:
 | 
			
		||||
        -> https://github.com/netdisco/netdisco-mibs/wiki
 | 
			
		||||
 | 
			
		||||
FAQ:
 | 
			
		||||
    - Do I have to update the version number and timestamp in modified files before committing?
 | 
			
		||||
@@ -3,9 +3,9 @@
 | 
			
		||||
 | 
			
		||||
use File::Glob qw/bsd_glob/;
 | 
			
		||||
 | 
			
		||||
my @pms = glob_rec("../Info");
 | 
			
		||||
my @pms = glob_rec("./lib");
 | 
			
		||||
 | 
			
		||||
$new_version = shift @ARGV || '3.01';
 | 
			
		||||
$new_version = shift @ARGV || die "missing new version\n";
 | 
			
		||||
 | 
			
		||||
foreach my $p (@pms) {
 | 
			
		||||
    print "$p\n";
 | 
			
		||||
@@ -16,6 +16,7 @@ foreach my $p (@pms) {
 | 
			
		||||
 | 
			
		||||
    while (<O>) {
 | 
			
		||||
        s/^\s*\$VERSION\s+=\s*'[^']+'\s*;/\$VERSION = '$new_version';/;
 | 
			
		||||
        s/^SNMP::Info - Version [\d.]+$/SNMP::Info - Version $new_version/;
 | 
			
		||||
        print P;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
#!/usr/bin/perl
 | 
			
		||||
#!/usr/bin/env perl
 | 
			
		||||
#
 | 
			
		||||
# test_class_mocked.pl
 | 
			
		||||
#
 | 
			
		||||
@@ -33,7 +33,7 @@ use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Carp;
 | 
			
		||||
use FindBin;
 | 
			
		||||
use lib "$FindBin::Bin/../../..";
 | 
			
		||||
use lib "$FindBin::Bin/../../lib";
 | 
			
		||||
use File::Slurp qw(slurp);
 | 
			
		||||
use Getopt::Long;
 | 
			
		||||
use Pod::Usage;
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -30,26 +30,27 @@
 | 
			
		||||
package SNMP::Info::AMAP;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::LLDP::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::LLDP::EXPORT_OK = qw//;
 | 
			
		||||
@SNMP::Info::AMAP::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::AMAP::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS
 | 
			
		||||
    = ( 'ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB' => 'aipAMAPRemDeviceType', );
 | 
			
		||||
%MIBS = (
 | 
			
		||||
  'ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB' => 'aipAMAPRemDeviceType',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
 | 
			
		||||
    # EXTREME-EDP-MIB::extremeEdpTable
 | 
			
		||||
    # ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB::aipAMAPRemHostname
 | 
			
		||||
    'amap_rem_sysname' => 'aipAMAPRemHostname',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
@@ -91,7 +92,7 @@ sub _conn_table_mac {
 | 
			
		||||
# address since they should all originate from the same device, but we don't
 | 
			
		||||
# know if they would all be reachable from the network management application.
 | 
			
		||||
#
 | 
			
		||||
# We don't inplement partials since this is private index function
 | 
			
		||||
# We don't implement partials since this is private index function
 | 
			
		||||
sub _amap_index {
 | 
			
		||||
    my $amap = shift;
 | 
			
		||||
 | 
			
		||||
@@ -253,7 +254,7 @@ Eric Miller
 | 
			
		||||
 | 
			
		||||
 $hasamap   = $amap->hasAMAP() ? 'yes' : 'no';
 | 
			
		||||
 | 
			
		||||
 # Print out a map of device ports with LLDP neighbors:
 | 
			
		||||
 # Print out a map of device ports with AMAP neighbors:
 | 
			
		||||
 my $interfaces    = $amap->interfaces();
 | 
			
		||||
 my $amap_if       = $amap->amap_if();
 | 
			
		||||
 my $amap_ip       = $amap->amap_ip();
 | 
			
		||||
@@ -291,7 +292,7 @@ None.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBAL METHODS
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar values from SNMP
 | 
			
		||||
 | 
			
		||||
@@ -30,15 +30,16 @@
 | 
			
		||||
package SNMP::Info::AdslLine;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::AdslLine::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::AdslLine::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'ADSL-LINE-MIB' => 'adslLineType' );
 | 
			
		||||
 | 
			
		||||
@@ -105,8 +106,6 @@ none.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -30,17 +30,19 @@
 | 
			
		||||
package SNMP::Info::Aggregate;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Aggregate::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::Aggregate::EXPORT_OK = qw/agg_ports_ifstack/;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (); # IF-MIB
 | 
			
		||||
# Load MIB for leafs referenced within class
 | 
			
		||||
%MIBS = ('IF-MIB' => 'ifIndex',);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = ();
 | 
			
		||||
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Airespace
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Eric Miller
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,15 +30,16 @@
 | 
			
		||||
package SNMP::Info::Airespace;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Airespace::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::Airespace::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,
 | 
			
		||||
@@ -508,8 +508,8 @@ sub ip_index {
 | 
			
		||||
    my $airespace = shift;
 | 
			
		||||
    my $partial   = shift;
 | 
			
		||||
 | 
			
		||||
    my $ip_index = $airespace->orig_ip_index($partial) || {};
 | 
			
		||||
    my $if_ip    = $airespace->airespace_if_ip()       || {};
 | 
			
		||||
    my $ip_index = $airespace->SUPER::ip_index($partial) || {};
 | 
			
		||||
    my $if_ip    = $airespace->airespace_if_ip()         || {};
 | 
			
		||||
 | 
			
		||||
    my %ip_index;
 | 
			
		||||
    foreach my $ip ( keys %$ip_index ) {
 | 
			
		||||
@@ -534,9 +534,9 @@ sub ip_netmask {
 | 
			
		||||
    my $airespace = shift;
 | 
			
		||||
    my $partial   = shift;
 | 
			
		||||
 | 
			
		||||
    my $ip_mask = $airespace->orig_ip_netmask($partial) || {};
 | 
			
		||||
    my $if_ip   = $airespace->airespace_if_ip()         || {};
 | 
			
		||||
    my $if_mask = $airespace->airespace_if_mask()       || {};
 | 
			
		||||
    my $ip_mask = $airespace->SUPER::ip_netmask($partial) || {};
 | 
			
		||||
    my $if_ip   = $airespace->airespace_if_ip()           || {};
 | 
			
		||||
    my $if_mask = $airespace->airespace_if_mask()         || {};
 | 
			
		||||
 | 
			
		||||
    my %ip_netmask;
 | 
			
		||||
    foreach my $ip ( keys %$ip_mask ) {
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Bridge
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Changes since Version 0.7 Copyright (c) 2004 Max Baker
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -34,19 +33,21 @@
 | 
			
		||||
package SNMP::Info::Bridge;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Bridge::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::Bridge::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
 | 
			
		||||
our ($VERSION, $DEBUG, %MIBS, %FUNCS, %GLOBALS, %MUNGE, $INIT);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'BRIDGE-MIB'   => 'dot1dBaseBridgeAddress',
 | 
			
		||||
    'Q-BRIDGE-MIB' => 'dot1qPvid',
 | 
			
		||||
    'RSTP-MIB'     => 'dot1dStpPortOperEdgePort',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
@@ -104,6 +105,10 @@ $VERSION = '3.33';
 | 
			
		||||
    'stp_p_bridge'   => 'dot1dStpPortDesignatedBridge',
 | 
			
		||||
    'stp_p_port'     => 'dot1dStpPortDesignatedPort',
 | 
			
		||||
 | 
			
		||||
    # Rapid Spanning Tree Protocol Table : dot1dStpExtPortEntry
 | 
			
		||||
    'is_edgeport_admin' => 'dot1dStpPortAdminEdgePort',
 | 
			
		||||
    'is_edgeport_oper'  => 'dot1dStpPortOperEdgePort',
 | 
			
		||||
 | 
			
		||||
    # Q-BRIDGE-MIB : dot1qPortVlanTable
 | 
			
		||||
    'qb_i_vlan'        => 'dot1qPvid',
 | 
			
		||||
    'qb_i_vlan_type'   => 'dot1qPortAcceptableFrameTypes',
 | 
			
		||||
@@ -237,8 +242,10 @@ sub qb_fdb_index {
 | 
			
		||||
sub fw_mac {
 | 
			
		||||
    my $bridge = shift;
 | 
			
		||||
 | 
			
		||||
    my $qb = $bridge->qb_fw_mac();
 | 
			
		||||
    return $qb if (ref {} eq ref $qb and scalar keys %$qb);
 | 
			
		||||
    unless ($bridge->can('cisco_comm_indexing') && $bridge->cisco_comm_indexing()){
 | 
			
		||||
        my $qb = $bridge->qb_fw_mac();
 | 
			
		||||
        return $qb if (ref {} eq ref $qb and scalar keys %$qb);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $bridge->SUPER::fw_mac();
 | 
			
		||||
}
 | 
			
		||||
@@ -246,8 +253,10 @@ sub 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);
 | 
			
		||||
    unless ($bridge->can('cisco_comm_indexing') && $bridge->cisco_comm_indexing()){
 | 
			
		||||
        my $qb = $bridge->qb_fw_port();
 | 
			
		||||
        return $qb if (ref {} eq ref $qb and scalar keys %$qb);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $bridge->SUPER::fw_port();
 | 
			
		||||
}
 | 
			
		||||
@@ -255,8 +264,10 @@ sub 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);
 | 
			
		||||
    unless ($bridge->can('cisco_comm_indexing') && $bridge->cisco_comm_indexing()){
 | 
			
		||||
        my $qb = $bridge->qb_fw_status();
 | 
			
		||||
        return $qb if (ref {} eq ref $qb and scalar keys %$qb);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $bridge->SUPER::fw_status();
 | 
			
		||||
}
 | 
			
		||||
@@ -291,11 +302,11 @@ sub i_stp_port {
 | 
			
		||||
    my %i_stp_port;
 | 
			
		||||
 | 
			
		||||
    foreach my $index ( keys %$stp_p_port ) {
 | 
			
		||||
        my $bridge = $stp_p_port->{$index};
 | 
			
		||||
        my $bport  = $stp_p_port->{$index};
 | 
			
		||||
        my $iid    = $bp_index->{$index};
 | 
			
		||||
        next unless defined $iid;
 | 
			
		||||
        next unless defined $bridge;
 | 
			
		||||
        $i_stp_port{$iid} = $bridge;
 | 
			
		||||
        next unless defined $bport;
 | 
			
		||||
        $i_stp_port{$iid} = $bport;
 | 
			
		||||
    }
 | 
			
		||||
    return \%i_stp_port;
 | 
			
		||||
}
 | 
			
		||||
@@ -310,11 +321,11 @@ sub i_stp_id {
 | 
			
		||||
    my %i_stp_id;
 | 
			
		||||
 | 
			
		||||
    foreach my $index ( keys %$stp_p_id ) {
 | 
			
		||||
        my $bridge = $stp_p_id->{$index};
 | 
			
		||||
        my $bport  = $stp_p_id->{$index};
 | 
			
		||||
        my $iid    = $bp_index->{$index};
 | 
			
		||||
        next unless defined $iid;
 | 
			
		||||
        next unless defined $bridge;
 | 
			
		||||
        $i_stp_id{$iid} = $bridge;
 | 
			
		||||
        next unless defined $bport;
 | 
			
		||||
        $i_stp_id{$iid} = $bport;
 | 
			
		||||
    }
 | 
			
		||||
    return \%i_stp_id;
 | 
			
		||||
}
 | 
			
		||||
@@ -329,11 +340,11 @@ sub i_stp_bridge {
 | 
			
		||||
    my %i_stp_bridge;
 | 
			
		||||
 | 
			
		||||
    foreach my $index ( keys %$stp_p_bridge ) {
 | 
			
		||||
        my $bridge = $stp_p_bridge->{$index};
 | 
			
		||||
        my $bport  = $stp_p_bridge->{$index};
 | 
			
		||||
        my $iid    = $bp_index->{$index};
 | 
			
		||||
        next unless defined $iid;
 | 
			
		||||
        next unless defined $bridge;
 | 
			
		||||
        $i_stp_bridge{$iid} = $bridge;
 | 
			
		||||
        next unless defined $bport;
 | 
			
		||||
        $i_stp_bridge{$iid} = $bport;
 | 
			
		||||
    }
 | 
			
		||||
    return \%i_stp_bridge;
 | 
			
		||||
}
 | 
			
		||||
@@ -355,7 +366,7 @@ sub i_vlan {
 | 
			
		||||
    my $bridge  = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $index = $bridge->bp_index();
 | 
			
		||||
    my $index = $bridge->bp_index() or return {};
 | 
			
		||||
 | 
			
		||||
    # If given a partial it will be an ifIndex, we need to use dot1dBasePort
 | 
			
		||||
    if ($partial) {
 | 
			
		||||
@@ -418,7 +429,7 @@ sub _vlan_hoa {
 | 
			
		||||
        my $vlan;
 | 
			
		||||
 | 
			
		||||
        # Strip TimeFilter if we're using VlanCurrentTable
 | 
			
		||||
        ( $vlan = $idx ) =~ s/^\d+\.//;
 | 
			
		||||
        ($vlan = $idx) =~ s/^(\d+\.)*//g;
 | 
			
		||||
 | 
			
		||||
        # Convert portlist bit array to bp_index array
 | 
			
		||||
        for ( my $i = 0; $i <= $#$portlist; $i++ ) {
 | 
			
		||||
@@ -604,12 +615,11 @@ None.
 | 
			
		||||
 | 
			
		||||
=item F<Q-BRIDGE-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<RSTP-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
F<BRIDGE-MIB> needs to be extracted from
 | 
			
		||||
ftp://ftp.cisco.com/pub/mibs/v1/v1.tar.gz
 | 
			
		||||
 | 
			
		||||
=head1 GLOBAL METHODS
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar values from SNMP
 | 
			
		||||
 | 
			
		||||
@@ -716,7 +726,7 @@ tagged ports or the VLAN ID.
 | 
			
		||||
 | 
			
		||||
=item $bridge->qb_fdb_index()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash: key = VLAN ID, value = FDB ID.
 | 
			
		||||
Returns reference to hash: key = FDB ID, value = VLAN ID.
 | 
			
		||||
 | 
			
		||||
=item $bridge->v_index()
 | 
			
		||||
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::CDP
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Changes since Version 0.7 Copyright (c) 2004 Max Baker
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -34,16 +33,17 @@
 | 
			
		||||
package SNMP::Info::CDP;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::CDP::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::CDP::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars
 | 
			
		||||
    qw/$VERSION $DEBUG %FUNCS %GLOBALS %MIBS %MUNGE $INIT %CDP_CAPABILITIES/;
 | 
			
		||||
our
 | 
			
		||||
    ($VERSION, $DEBUG, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $INIT, %CDP_CAPABILITIES);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
# Five data structures required by SNMP::Info
 | 
			
		||||
%MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' );
 | 
			
		||||
@@ -54,16 +54,15 @@ $VERSION = '3.33';
 | 
			
		||||
    'cdp_run'      => 'cdpGlobalRun',
 | 
			
		||||
    'cdp_interval' => 'cdpGlobalMessageInterval',
 | 
			
		||||
    'cdp_holdtime' => 'cdpGlobalHoldTime',
 | 
			
		||||
    'cdp_gid'       => 'cdpGlobalDeviceId',
 | 
			
		||||
    'cdp_gid'      => 'cdpGlobalDeviceId',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    'cdp_index'        => 'cdpCacheIfIndex',
 | 
			
		||||
    'cdp_proto'        => 'cdpCacheAddressType',
 | 
			
		||||
    'cdp_addr'         => 'cdpCacheAddress',
 | 
			
		||||
    'cdp_ver'          => 'cdpCacheVersion',
 | 
			
		||||
    'cdp_dev_id'       => 'cdpCacheDeviceId',
 | 
			
		||||
    'cdp_port'         => 'cdpCacheDevicePort',
 | 
			
		||||
    'cdp_dev_port'     => 'cdpCacheDevicePort',
 | 
			
		||||
    'cdp_platform'     => 'cdpCachePlatform',
 | 
			
		||||
    'cdp_capabilities' => 'cdpCacheCapabilities',
 | 
			
		||||
    'cdp_domain'       => 'cdpCacheVTPMgmtDomain',
 | 
			
		||||
@@ -80,11 +79,9 @@ $VERSION = '3.33';
 | 
			
		||||
    'cdp_capabilities' => \&SNMP::Info::munge_bits,
 | 
			
		||||
    'cdp_platform'     => \&SNMP::Info::munge_null,
 | 
			
		||||
    'cdp_domain'       => \&SNMP::Info::munge_null,
 | 
			
		||||
    'cdp_port'         => \&SNMP::Info::munge_null,
 | 
			
		||||
    'cdp_ver'          => \&SNMP::Info::munge_null,
 | 
			
		||||
    'cdp_ip'           => \&SNMP::Info::munge_ip,
 | 
			
		||||
    'cdp_power'        => \&munge_power,
 | 
			
		||||
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%CDP_CAPABILITIES = (
 | 
			
		||||
@@ -111,28 +108,21 @@ sub munge_power {
 | 
			
		||||
sub hasCDP {
 | 
			
		||||
    my $cdp = shift;
 | 
			
		||||
 | 
			
		||||
    my $ver = $cdp->{_version};
 | 
			
		||||
    # Check the global that is supposed to indicate CDP is running
 | 
			
		||||
    my $cdp_run = $cdp->cdp_run();
 | 
			
		||||
    return 1 if $cdp_run;
 | 
			
		||||
 | 
			
		||||
    # SNMP v1 clients dont have the globals
 | 
			
		||||
    if ( defined $ver and $ver == 1 ) {
 | 
			
		||||
        my $cdp_ip = $cdp->cdp_ip();
 | 
			
		||||
    # SNMP v1 clients don't have the globals, fallback
 | 
			
		||||
    # by checking if it would report neighbors
 | 
			
		||||
    my $cdp_ip = $cdp->cdp_ip() || {};
 | 
			
		||||
    return 1 if scalar keys %$cdp_ip;
 | 
			
		||||
 | 
			
		||||
        # See if anything in cdp cache, if so we have cdp
 | 
			
		||||
        return 1 if ( defined $cdp_ip and scalar( keys %$cdp_ip ) );
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $cdp->cdp_run();
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub cdp_if {
 | 
			
		||||
    my $cdp = shift;
 | 
			
		||||
 | 
			
		||||
    # See if by some miracle Cisco implemented the cdpCacheIfIndex entry
 | 
			
		||||
    my $cdp_index = $cdp->cdp_index();
 | 
			
		||||
    return $cdp_index if defined $cdp_index;
 | 
			
		||||
 | 
			
		||||
    # Nope, didn't think so. Now we fake it.
 | 
			
		||||
    my $cdp_ip = $cdp->cdp_ip();
 | 
			
		||||
    unless ( defined $cdp_ip ) {
 | 
			
		||||
        $cdp->error_throw(
 | 
			
		||||
@@ -225,6 +215,28 @@ sub cdp_id {
 | 
			
		||||
    return \%cdp_id;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub cdp_port {
 | 
			
		||||
    my $cdp    = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $ch = $cdp->cdp_dev_port($partial) || {};
 | 
			
		||||
 | 
			
		||||
    # most devices return a string with the interface name here (Port-ID TLV)
 | 
			
		||||
    # see https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/cdp/command/cdp-cr-book/cdp-cr-a1.html
 | 
			
		||||
    # it seems however that some devices report hex encoded mac addresses for this, see
 | 
			
		||||
    # https://github.com/netdisco/snmp-info/issues/252
 | 
			
		||||
    # once these bad devices get known we can figure out workarounds for them
 | 
			
		||||
 | 
			
		||||
    my %cdp_port;
 | 
			
		||||
    foreach my $key ( sort keys %$ch ) {
 | 
			
		||||
        my $port = $ch->{$key};
 | 
			
		||||
        next unless $port;
 | 
			
		||||
        $port = SNMP::Info::munge_null($port);
 | 
			
		||||
        $cdp_port{$key} = $port;
 | 
			
		||||
    }
 | 
			
		||||
    return \%cdp_port;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
@@ -252,7 +264,7 @@ Max Baker
 | 
			
		||||
 $hascdp   = $cdp->hasCDP() ? 'yes' : 'no';
 | 
			
		||||
 | 
			
		||||
 # Print out a map of device ports with CDP neighbors:
 | 
			
		||||
 my $interfaces = $cdp->interfaces();
 | 
			
		||||
 my $interfaces   = $cdp->interfaces();
 | 
			
		||||
 my $cdp_if       = $cdp->cdp_if();
 | 
			
		||||
 my $cdp_ip       = $cdp->cdp_ip();
 | 
			
		||||
 my $cdp_port     = $cdp->cdp_port();
 | 
			
		||||
@@ -271,8 +283,8 @@ SNMP::Info::CDP is a subclass of SNMP::Info that provides an object oriented
 | 
			
		||||
interface to CDP information through SNMP.
 | 
			
		||||
 | 
			
		||||
CDP is a Layer 2 protocol that supplies topology information of devices that
 | 
			
		||||
also speak CDP, mostly switches and routers.  CDP is implemented in Cisco and
 | 
			
		||||
some HP devices.
 | 
			
		||||
also speak CDP, mostly switches and routers.  CDP is implemented by Cisco and
 | 
			
		||||
several other vendors.
 | 
			
		||||
 | 
			
		||||
Create or use a device subclass that inherits this class.  Do not use
 | 
			
		||||
directly.
 | 
			
		||||
@@ -292,9 +304,7 @@ None.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
 | 
			
		||||
 | 
			
		||||
=head1 GLOBAL METHODS
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar values from SNMP
 | 
			
		||||
 | 
			
		||||
@@ -472,9 +482,10 @@ Returns remote platform id
 | 
			
		||||
 | 
			
		||||
=item $cdp->cdp_port()
 | 
			
		||||
 | 
			
		||||
Returns remote port ID
 | 
			
		||||
Returns remote Port-ID. Most of the time this is a string with the port name, but this
 | 
			
		||||
is not guaranteed to be so.
 | 
			
		||||
 | 
			
		||||
(C<cdpDevicePort>)
 | 
			
		||||
(C<cdpCacheDevicePort>)
 | 
			
		||||
 | 
			
		||||
=item  $cdp->cdp_proto()
 | 
			
		||||
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
# SNMP::Info::CiscoAgg
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2014 SNMP::Info Developers
 | 
			
		||||
# Copyright (c) 2019 SNMP::Info Developers
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
@@ -30,31 +30,71 @@
 | 
			
		||||
package SNMP::Info::CiscoAgg;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::IEEE802dot3ad 'agg_ports_lag';
 | 
			
		||||
use SNMP::Info::IEEE802dot3ad;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::CiscoAgg::ISA = qw/
 | 
			
		||||
  SNMP::Info::IEEE802dot3ad
 | 
			
		||||
  Exporter
 | 
			
		||||
/;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::CiscoAgg::EXPORT_OK = qw/
 | 
			
		||||
  agg_ports
 | 
			
		||||
  agg_ports_cisco
 | 
			
		||||
  agg_ports_lag
 | 
			
		||||
  agg_ports_pagp
 | 
			
		||||
/;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
our ($DEBUG, $VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
  %SNMP::Info::IEEE802dot3ad::MIBS,
 | 
			
		||||
  'CISCO-PAGP-MIB'   => 'pagpGroupIfIndex',
 | 
			
		||||
  'CISCO-PAGP-MIB'         => 'pagpGroupIfIndex',
 | 
			
		||||
  'CISCO-LAG-MIB'          => 'clagAggPortListPorts',
 | 
			
		||||
  'CISCO-IF-EXTENSION-MIB' => 'cieIfLastInTime',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = ();
 | 
			
		||||
 | 
			
		||||
%FUNCS = ();
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
  %SNMP::Info::IEEE802dot3ad::FUNCS,
 | 
			
		||||
  'lag_ports'         => 'clagAggPortListPorts',
 | 
			
		||||
  'lag_members'       => 'clagAggPortListInterfaceIndexList',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = ();
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
  %SNMP::Info::IEEE802dot3ad::MUNGE,
 | 
			
		||||
  'lag_ports'     => \&SNMP::Info::munge_port_list,
 | 
			
		||||
  'lag_members'   => \&munge_port_ifindex,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub munge_port_ifindex {
 | 
			
		||||
    my $plist = shift;
 | 
			
		||||
    return unless defined $plist;
 | 
			
		||||
    return unless length $plist;
 | 
			
		||||
 | 
			
		||||
    my $list = [ map {sprintf "%d", hex($_)} unpack( "(A8)*", join( '' ,  map { sprintf "%02x", $_} unpack( "(C4)*", $plist ) ))  ];
 | 
			
		||||
 | 
			
		||||
    return $list;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub agg_ports_cisco {
 | 
			
		||||
  my $dev = shift;
 | 
			
		||||
  my $group = $dev->lag_members;
 | 
			
		||||
 | 
			
		||||
  my $mapping = {};
 | 
			
		||||
  for my $master (keys %$group) {
 | 
			
		||||
    my $slaves = $group->{$master};
 | 
			
		||||
    for my $slave (@$slaves) {
 | 
			
		||||
      $mapping->{$slave} = $master;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return $mapping;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub agg_ports_pagp {
 | 
			
		||||
  my $dev = shift;
 | 
			
		||||
@@ -76,9 +116,28 @@ sub agg_ports_pagp {
 | 
			
		||||
  return $mapping;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# until we have PAgP data and need to combine with LAG data
 | 
			
		||||
sub agg_ports_lag {
 | 
			
		||||
  my $dev = shift;
 | 
			
		||||
 | 
			
		||||
  # same note as for agg_ports_pagp, it will miss mappings if interfaces
 | 
			
		||||
  # are down or lacp is not synced.
 | 
			
		||||
 | 
			
		||||
  my $mapping = {};
 | 
			
		||||
  my $group = $dev->dot3adAggPortSelectedAggID;
 | 
			
		||||
  for my $slave (keys %$group) {
 | 
			
		||||
    my $master = $group->{$slave};
 | 
			
		||||
    next if($master == 0 || $slave == $master);
 | 
			
		||||
 | 
			
		||||
    $mapping->{$slave} = $master;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return $mapping;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# combine PAgP, LAG & Cisco proprietary data
 | 
			
		||||
sub agg_ports {
 | 
			
		||||
  my $ret = {%{agg_ports_pagp(@_)}, %{agg_ports_lag(@_)}};
 | 
			
		||||
  my $ret = {%{agg_ports_pagp(@_)}, %{agg_ports_lag(@_)}, %{agg_ports_cisco(@_)}};
 | 
			
		||||
  return $ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -112,7 +171,7 @@ SNMP::Info Developers
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
This class provides access to Aggregated Links configuration on Cisco devices.
 | 
			
		||||
It combines Cisco PAgP and IEEE 802.3ad information.
 | 
			
		||||
It combines Cisco PAgP, Cisco proprietary info and IEEE 802.3ad information.
 | 
			
		||||
 | 
			
		||||
Use or create in a subclass of SNMP::Info.  Do not use directly.
 | 
			
		||||
 | 
			
		||||
@@ -126,11 +185,13 @@ L<SNMP::Info::IEEE802dot3ad>
 | 
			
		||||
 | 
			
		||||
=item F<CISCO-PAGP-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CISCO-LAG-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CISCO-IF-EXTENSION-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
 | 
			
		||||
 | 
			
		||||
=head1 METHODS
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
=over 4
 | 
			
		||||
 | 
			
		||||
@@ -140,11 +201,52 @@ 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_cisco>
 | 
			
		||||
 | 
			
		||||
Implements the cisco LAG info retrieval. Merged into C<agg_ports> data
 | 
			
		||||
automatically. Will fetch all members of C<clagAggPortListInterfaceIndexList>
 | 
			
		||||
even if they are not running an aggregation protocol.
 | 
			
		||||
 | 
			
		||||
=item C<agg_ports_pagp>
 | 
			
		||||
 | 
			
		||||
Implements the PAgP LAG info retrieval. Merged into C<agg_ports> data
 | 
			
		||||
automatically.
 | 
			
		||||
 | 
			
		||||
=item C<lag_members>
 | 
			
		||||
 | 
			
		||||
Mimics C<ad_lag_ports> from L<SNMP::Info::IEEE802dot3ad> but based on ifindex
 | 
			
		||||
instead of instead of bp_index.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 OVERRIDES
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item C<agg_ports_lag>
 | 
			
		||||
 | 
			
		||||
This will retrieve LAG ports based on C<dot3adAggPortSelectedAggID> data.
 | 
			
		||||
It will be merged into C<agg_ports> data.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::IEEE802dot3ad
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 MUNGES
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item C<munge_port_ifindex>
 | 
			
		||||
 | 
			
		||||
Takes C<clagAggPortListInterfaceIndexList>, uses the index as master port, then
 | 
			
		||||
returns all members as ifindex. Works with single or multiple slaves to a master.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
							
								
								
									
										267
									
								
								lib/SNMP/Info/CiscoBGP.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										267
									
								
								lib/SNMP/Info/CiscoBGP.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,267 @@
 | 
			
		||||
# SNMP::Info::CiscoBGP
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2022 Alexander Hartmaier
 | 
			
		||||
# 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::CiscoBGP;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::CiscoBGP::ISA       = qw( SNMP::Info Exporter );
 | 
			
		||||
@SNMP::Info::CiscoBGP::EXPORT_OK = qw(
 | 
			
		||||
    parse_cisco_bgp_peer2_entry_index
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'CISCO-BGP4-MIB' => 'cbgpPeer2State', );
 | 
			
		||||
 | 
			
		||||
%GLOBALS = ();
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    # cbgpPeer2Table
 | 
			
		||||
    'cisco_bgp_peer2_state'               => 'cbgpPeer2State',
 | 
			
		||||
    'cisco_bgp_peer2_adminstatus'         => 'cbgpPeer2AdminStatus',
 | 
			
		||||
    'cisco_bgp_peer2_localaddr'           => 'cbgpPeer2LocalAddr',
 | 
			
		||||
    'cisco_bgp_peer2_localport'           => 'cbgpPeer2LocalPort',
 | 
			
		||||
    'cisco_bgp_peer2_localas'             => 'cbgpPeer2LocalAs',
 | 
			
		||||
    'cisco_bgp_peer2_localidentifier'     => 'cbgpPeer2LocalIdentifier',
 | 
			
		||||
    'cisco_bgp_peer2_remoteport'          => 'cbgpPeer2RemotePort',
 | 
			
		||||
    'cisco_bgp_peer2_remoteas'            => 'cbgpPeer2RemoteAs',
 | 
			
		||||
    'cisco_bgp_peer2_remoteidentifier'    => 'cbgpPeer2RemoteIdentifier',
 | 
			
		||||
    'cisco_bgp_peer2_inupdates'           => 'cbgpPeer2InUpdates',
 | 
			
		||||
    'cisco_bgp_peer2_outupdates'          => 'cbgpPeer2OutUpdates',
 | 
			
		||||
    'cisco_bgp_peer2_intotalmessages'     => 'cbgpPeer2InTotalMessages',
 | 
			
		||||
    'cisco_bgp_peer2_outtotalmessages'    => 'cbgpPeer2OutTotalMessages',
 | 
			
		||||
    'cisco_bgp_peer2_lasterror'           => 'cbgpPeer2LastError',
 | 
			
		||||
    'cisco_bgp_peer2_fsmestablishedtransitions'
 | 
			
		||||
                                    => 'cbgpPeer2FsmEstablishedTransitions',
 | 
			
		||||
    'cisco_bgp_peer2_fsmestablishedtime'  => 'cbgpPeer2FsmEstablishedTime',
 | 
			
		||||
    'cisco_bgp_peer2_connectretryinterval'=> 'cbgpPeer2ConnectRetryInterval',
 | 
			
		||||
    'cisco_bgp_peer2_holdtime'            => 'cbgpPeer2HoldTime',
 | 
			
		||||
    'cisco_bgp_peer2_keepalive'           => 'cbgpPeer2KeepAlive',
 | 
			
		||||
    'cisco_bgp_peer2_holdtimeconfigured'  => 'cbgpPeer2HoldTimeConfigured',
 | 
			
		||||
    'cisco_bgp_peer2_keepaliveconfigured' => 'cbgpPeer2KeepAliveConfigured',
 | 
			
		||||
    'cisco_bgp_peer2_minasoriginationinterval'
 | 
			
		||||
                                    => 'cbgpPeer2MinASOriginationInterval',
 | 
			
		||||
    'cisco_bgp_peer2_inupdatelapsedtime'  => 'cbgpPeer2InUpdateElapsedTime',
 | 
			
		||||
    'cisco_bgp_peer2_lasterrortxt'        => 'cbgpPeer2LastErrorTxt',
 | 
			
		||||
    'cisco_bgp_peer2_prevstate'           => 'cbgpPeer2PrevState',
 | 
			
		||||
 | 
			
		||||
    # cbgpPeer2AddrFamilyPrefixTable
 | 
			
		||||
    'cisco_bgp_peer2_acceptedprefixes'    => 'cbgpPeer2AcceptedPrefixes',
 | 
			
		||||
    'cisco_bgp_peer2_deniedprefixes'      => 'cbgpPeer2DeniedPrefixes',
 | 
			
		||||
    'cisco_bgp_peer2_prefixadminlimit'    => 'cbgpPeer2PrefixAdminLimit',
 | 
			
		||||
    'cisco_bgp_peer2_prefixthreshold'     => 'cbgpPeer2PrefixThreshold',
 | 
			
		||||
    'cisco_bgp_peer2_prefixclearthreshold'=> 'cbgpPeer2PrefixClearThreshold',
 | 
			
		||||
    'cisco_bgp_peer2_advertisedprefixes'  => 'cbgpPeer2AdvertisedPrefixes',
 | 
			
		||||
    'cisco_bgp_peer2_suppressedprefixes'  => 'cbgpPeer2SuppressedPrefixes',
 | 
			
		||||
    'cisco_bgp_peer2_withdrawnprefixes'   => 'cbgpPeer2WithdrawnPrefixes',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    'cisco_bgp_peer2_localaddr'           => \&SNMP::Info::munge_inetaddress,
 | 
			
		||||
    'cisco_bgp_peer2_lasterror'           => \&SNMP::Info::munge_octet2hex,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub parse_cisco_bgp_peer2_entry_index {
 | 
			
		||||
    my ($self, $index) = @_;
 | 
			
		||||
    my ($type, $addrlength, $ip) = split(/\./, $index, 3);
 | 
			
		||||
    # decode IPv6 remote address
 | 
			
		||||
    if ($addrlength == 16) {
 | 
			
		||||
        # copied from SNMP::Info::IPv6/ipv6_addr
 | 
			
		||||
        my @parts = split(/\./, $ip);
 | 
			
		||||
        $ip = sprintf("%x:%x:%x:%x:%x:%x:%x:%x",
 | 
			
		||||
            unpack('n8', pack('C*', @parts)));
 | 
			
		||||
    }
 | 
			
		||||
    return $type, $addrlength, $ip;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::CiscoBGP - SNMP Interface to Cisco's BGP MIBs
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
Alexander Hartmaier
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
# Let SNMP::Info determine the correct subclass for you.
 | 
			
		||||
my $device = SNMP::Info->(
 | 
			
		||||
    AutoSpecify => 1,
 | 
			
		||||
    Debug       => 1,
 | 
			
		||||
    DestHost    => 'myswitch',
 | 
			
		||||
    Community   => 'public',
 | 
			
		||||
    Version     => 2
 | 
			
		||||
) or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
my $remoteas_for_index = $device->cisco_bgp_peer2_remoteas;
 | 
			
		||||
 | 
			
		||||
for my $index (keys $remoteas_for_index->%*) {
 | 
			
		||||
    my ($type, $addrlength, $ip) =
 | 
			
		||||
        $device->parse_cisco_bgp_peer2_entry_index($index);
 | 
			
		||||
    printf('remote: %-39s  type: %-4s  remote AS: %5d',
 | 
			
		||||
        $ip, $type, $remoteas_for_index->{$index});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
SNMP::Info::CiscoBGP is a subclass of SNMP::Info that provides
 | 
			
		||||
information about a cisco device's BGP configuration and state.
 | 
			
		||||
 | 
			
		||||
Use or create in a subclass of SNMP::Info.  Do not use directly.
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
none.
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<CISCO-BGP4-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
None
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
=head2 Cisco BGP Peer 2 Table (cbgpPeer2Table)
 | 
			
		||||
 | 
			
		||||
This table contains, one entry per BGP peer, information about the connections
 | 
			
		||||
with BGP peers.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_state (cbgpPeer2State)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_adminstatus (cbgpPeer2AdminStatus)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_localaddr (cbgpPeer2LocalAddr)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_localport (cbgpPeer2LocalPort)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_localas (cbgpPeer2LocalAs)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_localidentifier (cbgpPeer2LocalIdentifier)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_remoteport (cbgpPeer2RemotePort)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_remoteas (cbgpPeer2RemoteAs)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_remoteidentifier (cbgpPeer2RemoteIdentifier)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_inupdates (cbgpPeer2InUpdates)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_outupdates (cbgpPeer2OutUpdates)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_intotalmessages (cbgpPeer2InTotalMessages)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_outtotalmessages (cbgpPeer2OutTotalMessages)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_lasterror (cbgpPeer2LastError)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_fsmestablishedtransitions (cbgpPeer2FsmEstablishedTransitions)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_fsmestablishedtime (cbgpPeer2FsmEstablishedTime)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_connectretryinterval (cbgpPeer2ConnectRetryInterval)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_holdtime (cbgpPeer2HoldTime)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_keepalive (cbgpPeer2KeepAlive)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_holdtimeconfigured (cbgpPeer2HoldTimeConfigured)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_keepaliveconfigured (cbgpPeer2KeepAliveConfigured)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_minasoriginationinterval (cbgpPeer2MinASOriginationInterval)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_inupdatelapsedtime (cbgpPeer2InUpdateElapsedTime)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_lasterrortxt (cbgpPeer2LastErrorTxt)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_prevstate (cbgpPeer2PrevState)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Cisco BGP Peer 2 Address Family Prefix Table (cbgpPeer2AddrFamilyPrefixTable)
 | 
			
		||||
 | 
			
		||||
This table contains prefix related information related to address families
 | 
			
		||||
supported by a peer.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_acceptedprefixes (cbgpPeer2AcceptedPrefixes)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_deniedprefixes (cbgpPeer2DeniedPrefixes)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_prefixadminlimit (cbgpPeer2PrefixAdminLimit)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_prefixthreshold (cbgpPeer2PrefixThreshold)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_prefixclearthreshold (cbgpPeer2PrefixClearThreshold)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_advertisedprefixes (cbgpPeer2AdvertisedPrefixes)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_suppressedprefixes (cbgpPeer2SuppressedPrefixes)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_withdrawnprefixes (cbgpPeer2WithdrawnPrefixes)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 METHODS
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item parse_cisco_bgp_peer2_entry_index
 | 
			
		||||
 | 
			
		||||
Takes a cbgpPeer2Entry index as returned by all methods of the Cisco BGP Peer
 | 
			
		||||
2 Table methods.
 | 
			
		||||
 | 
			
		||||
Returns a list of type (numeric, cbgpPeer2Type), address length (in bytes:
 | 
			
		||||
4 for IPv4, 16 for IPv6) and the remote IP address as string.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::CiscoConfig
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Eric Miller
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,15 +30,16 @@
 | 
			
		||||
package SNMP::Info::CiscoConfig;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::CiscoConfig::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::CiscoConfig::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'CISCO-CONFIG-COPY-MIB' => 'ccCopyTable',
 | 
			
		||||
@@ -97,6 +97,10 @@ sub copy_run_tftp {
 | 
			
		||||
        print "Using new method, row iid: $rand\n" if $ciscoconfig->debug();
 | 
			
		||||
 | 
			
		||||
        #Check each set, delete created row if any fail
 | 
			
		||||
        unless ( $ciscoconfig->set_config_row_status( 5, $rand ) ) {
 | 
			
		||||
            $ciscoconfig->error_throw("Initializing config copy instruction failed");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        unless ( $ciscoconfig->set_config_source_type( 4, $rand ) ) {
 | 
			
		||||
            $ciscoconfig->error_throw("Setting source type failed");
 | 
			
		||||
            unless ( $ciscoconfig->set_config_row_status( 6, $rand ) ) {
 | 
			
		||||
@@ -332,10 +336,6 @@ These are methods that return scalar value from SNMP
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
to a hash.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Config Copy Request Table  (C<ccCopyTable>)
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::CiscoPortSecurity
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Eric Miller
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,19 +30,22 @@
 | 
			
		||||
package SNMP::Info::CiscoPortSecurity;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::CiscoPortSecurity::ISA       = qw/Exporter/;
 | 
			
		||||
@SNMP::Info::CiscoPortSecurity::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::CiscoPortSecurity::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PAECAPABILITIES/;
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE, %PAECAPABILITIES);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB',
 | 
			
		||||
    'CISCO-PAE-MIB'           => 'ciscoPaeMIB',
 | 
			
		||||
    'IEEE8021-PAE-MIB'        => 'dot1xAuthLastEapolFrameSource',
 | 
			
		||||
    'CISCO-ERR-DISABLE-MIB'   => 'ciscoErrDisableMIB',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
@@ -81,37 +83,34 @@ $VERSION = '3.33';
 | 
			
		||||
    # CISCO-PORT-SECURITY-MIB::cpsIfVlanTable
 | 
			
		||||
    'cps_i_v_mac_count' => 'cpsIfVlanCurSecureMacAddrCount',
 | 
			
		||||
    'cps_i_v_mac_max'   => 'cpsIfVlanMaxSecureMacAddr',
 | 
			
		||||
    'cps_i_v'           => 'cpsIfVlanIndex',
 | 
			
		||||
 | 
			
		||||
    # CISCO-PORT-SECURITY-MIB::cpsIfVlanSecureMacAddrTable
 | 
			
		||||
    'cps_i_v_mac_status' => 'cpsIfVlanSecureMacAddrRowStatus',
 | 
			
		||||
    'cps_i_v_mac_age'    => 'cpsIfVlanSecureMacAddrRemainAge',
 | 
			
		||||
    'cps_i_v_mac_type'   => 'cpsIfVlanSecureMacAddrType',
 | 
			
		||||
    'cps_i_v_vlan'       => 'cpsIfVlanSecureVlanIndex',
 | 
			
		||||
    'cps_i_v_mac'        => 'cpsIfVlanSecureMacAddress',
 | 
			
		||||
 | 
			
		||||
    # CISCO-PORT-SECURITY-MIB::cpsSecureMacAddressTable
 | 
			
		||||
    'cps_m_status' => 'cpsSecureMacAddrRowStatus',
 | 
			
		||||
    'cps_m_age'    => 'cpsSecureMacAddrRemainingAge',
 | 
			
		||||
    'cps_m_type'   => 'cpsSecureMacAddrType',
 | 
			
		||||
    'cps_m_mac'    => 'cpsSecureMacAddress',
 | 
			
		||||
 | 
			
		||||
    # IEEE8021-PAE-MIB::dot1xPaePortEntry
 | 
			
		||||
    'pae_i_capabilities'            => 'dot1xPaePortCapabilities',
 | 
			
		||||
    'pae_i_last_eapol_frame_source' => 'dot1xAuthLastEapolFrameSource',
 | 
			
		||||
 | 
			
		||||
    # CISCO-ERR-DISABLE-MIB::cErrDisableIfStatusEntry
 | 
			
		||||
    'cerr_i_cause' => 'cErrDisableIfStatusCause',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    'cps_i_mac'                     => \&SNMP::Info::munge_mac,
 | 
			
		||||
    'cps_m_mac'                     => \&SNMP::Info::munge_mac,
 | 
			
		||||
    'cps_i_v_mac'                   => \&SNMP::Info::munge_mac,
 | 
			
		||||
    'pae_i_last_eapol_frame_source' => \&SNMP::Info::munge_mac,
 | 
			
		||||
    'pae_i_capabilities'            => \&munge_pae_capabilities,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%PAECAPABILITIES = (
 | 
			
		||||
    0 => 'dot1xPaePortAuthCapable',
 | 
			
		||||
    1 => 'dot1xPaePortSuppCapable'
 | 
			
		||||
    1 => 'dot1xPaePortSuppCapable',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub munge_pae_capabilities {
 | 
			
		||||
@@ -123,13 +122,29 @@ sub munge_pae_capabilities {
 | 
			
		||||
    return join( ' ', @vals );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Define a generic method to show the cause for a port to be err-disabled.
 | 
			
		||||
# Cisco indexes cErrDisableIfStatusCause by {ifindex,vlan}, but for a more
 | 
			
		||||
# generic method, using ifIndex only makes it easier to implement across
 | 
			
		||||
# device classes. Besides, several (most?) err-disable features will disable
 | 
			
		||||
# the whole interface anyway, and not just a vlan on the interface.
 | 
			
		||||
sub i_err_disable_cause {
 | 
			
		||||
    my $cps = shift;
 | 
			
		||||
    my $ret;
 | 
			
		||||
    my $causes = $cps->cerr_i_cause() || {};
 | 
			
		||||
    foreach my $interfacevlan (keys %$causes) {
 | 
			
		||||
        my ($iid, $vid) = split(/\./, $interfacevlan);
 | 
			
		||||
        $ret->{$iid} = $causes->{$interfacevlan};
 | 
			
		||||
    }
 | 
			
		||||
    return $ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::CiscoPortSecurity - SNMP Interface to data from
 | 
			
		||||
F<CISCO-PORT-SECURITY-MIB> and F<CISCO-PAE-MIB>
 | 
			
		||||
F<CISCO-PORT-SECURITY-MIB>, F<CISCO-PAE-MIB> and F<CISCO-ERR-DISABLE-MIB>.
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
@@ -153,8 +168,9 @@ Eric Miller
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
SNMP::Info::CiscoPortSecurity is a subclass of SNMP::Info that provides
 | 
			
		||||
an interface to the F<CISCO-PORT-SECURITY-MIB> and F<CISCO-PAE-MIB>.  These
 | 
			
		||||
MIBs are used across the Catalyst family under CatOS and IOS.
 | 
			
		||||
an interface to the F<CISCO-PORT-SECURITY-MIB>, F<CISCO-PAE-MIB> and
 | 
			
		||||
F<CISCO-ERR-DISABLE-MIB>. These MIBs are used across the Catalyst
 | 
			
		||||
family under CatOS and IOS.
 | 
			
		||||
 | 
			
		||||
Use or create in a subclass of SNMP::Info.  Do not use directly.
 | 
			
		||||
 | 
			
		||||
@@ -172,16 +188,14 @@ None.
 | 
			
		||||
 | 
			
		||||
=item F<IEEE8021-PAE-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CISCO-ERR-DISABLE-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar values from SNMP
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 F<CISCO-PORT-SECURITY-MIB> globals
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -300,10 +314,6 @@ These are methods that return scalar values from SNMP
 | 
			
		||||
 | 
			
		||||
(C<cpsIfVlanMaxSecureMacAddr>)
 | 
			
		||||
 | 
			
		||||
=item $cps->cps_i_v()
 | 
			
		||||
 | 
			
		||||
(C<cpsIfVlanIndex>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 C<CISCO-PORT-SECURITY-MIB::cpsIfVlanSecureMacAddrTable>
 | 
			
		||||
@@ -322,14 +332,6 @@ These are methods that return scalar values from SNMP
 | 
			
		||||
 | 
			
		||||
(C<cpsIfVlanSecureMacAddrType>)
 | 
			
		||||
 | 
			
		||||
=item $cps->cps_i_v_vlan()
 | 
			
		||||
 | 
			
		||||
(C<cpsIfVlanSecureVlanIndex>)
 | 
			
		||||
 | 
			
		||||
=item $cps->cps_i_v_mac()
 | 
			
		||||
 | 
			
		||||
(C<cpsIfVlanSecureMacAddress>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 C<CISCO-PORT-SECURITY-MIB::cpsSecureMacAddressTable>
 | 
			
		||||
@@ -348,10 +350,6 @@ These are methods that return scalar values from SNMP
 | 
			
		||||
 | 
			
		||||
(C<cpsSecureMacAddrType>)
 | 
			
		||||
 | 
			
		||||
=item $cps->cps_m_mac()
 | 
			
		||||
 | 
			
		||||
(C<cpsSecureMacAddress>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 C<IEEE8021-PAE-MIB::dot1xPaePortEntry>
 | 
			
		||||
@@ -374,6 +372,31 @@ The source MAC address carried in the most recently received EAPOL frame.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 C<CISCO-ERR-DISABLE-MIB::cErrDisableIfStatusEntry>
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $cps->cerr_i_cause()
 | 
			
		||||
 | 
			
		||||
C<cErrDisableIfStatusCause>
 | 
			
		||||
 | 
			
		||||
Indicates the feature/event that caused the {interface, vlan} (or the entire
 | 
			
		||||
interface) to be error-disabled.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 METHODS
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item C<i_err_disable_cause>
 | 
			
		||||
 | 
			
		||||
Returns a HASH reference mapping ifIndex to err-disabled cause. The returned
 | 
			
		||||
data is sparse, so if the ifIndex is not present in the return value, the port
 | 
			
		||||
is not err-disabled.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 Data Munging Callback Subroutines
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::CiscoPower
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Bill Fenner
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,18 +30,20 @@
 | 
			
		||||
package SNMP::Info::CiscoPower;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::CiscoPower::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::CiscoPower::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex',
 | 
			
		||||
          'CISCO-CDP-MIB' => 'cdpCachePowerConsumption' );
 | 
			
		||||
          'CISCO-CDP-MIB' => 'cdpCachePowerConsumption',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = ();
 | 
			
		||||
 | 
			
		||||
@@ -153,6 +154,8 @@ Note that it requires that the device inherits from Info::Entity.
 | 
			
		||||
 | 
			
		||||
=item F<CISCO-POWER-ETHERNET-EXT-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CISCO-CDP-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::CiscoQOS
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2005 Alexander Hartmaier
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,15 +30,16 @@
 | 
			
		||||
package SNMP::Info::CiscoQOS;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::CiscoQOS::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::CiscoQOS::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'CISCO-CLASS-BASED-QOS-MIB' => 'cbQosIfIndex', );
 | 
			
		||||
 | 
			
		||||
@@ -118,8 +118,6 @@ none.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::CiscoRTT
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2005 Alexander Hartmaier
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,15 +30,16 @@
 | 
			
		||||
package SNMP::Info::CiscoRTT;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::CiscoRTT::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::CiscoRTT::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'CISCO-RTTMON-MIB' => 'rttMonCtrlAdminOwner', );
 | 
			
		||||
 | 
			
		||||
@@ -99,8 +99,6 @@ none.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -113,7 +111,7 @@ None
 | 
			
		||||
 | 
			
		||||
=head2 Overall Control Group Table
 | 
			
		||||
 | 
			
		||||
This table is from C<CISCO-RTTMAN-MIB::rttMonCtrlAdminTable>
 | 
			
		||||
This table is from C<CISCO-RTTMON-MIB::rttMonCtrlAdminTable>
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::CiscoStack
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Max Baker
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,14 +30,15 @@
 | 
			
		||||
package SNMP::Info::CiscoStack;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::CiscoStack::ISA       = qw/Exporter/;
 | 
			
		||||
@SNMP::Info::CiscoStack::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT/;
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE, %PORTSTAT);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', );
 | 
			
		||||
 | 
			
		||||
@@ -106,7 +106,7 @@ $VERSION = '3.33';
 | 
			
		||||
    1 => 'other',
 | 
			
		||||
    2 => 'ok',
 | 
			
		||||
    3 => 'minorFault',
 | 
			
		||||
    4 => 'majorFault'
 | 
			
		||||
    4 => 'majorFault',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
# Changes binary byte describing each port into ascii, and returns
 | 
			
		||||
@@ -194,7 +194,7 @@ sub i_duplex_admin {
 | 
			
		||||
        next if ( defined $partial and $iid !~ /^$partial$/ );
 | 
			
		||||
 | 
			
		||||
        # Test for gigabit
 | 
			
		||||
        if ( defined $p_duplex_cap->{$port} and $p_duplex_cap->{$port} == 1 ) {
 | 
			
		||||
        if ( defined $p_duplex_cap->{$port} and $p_duplex_cap->{$port} == 0 ) {
 | 
			
		||||
            $i_duplex_admin->{$iid} = 'full';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -286,8 +286,7 @@ __END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::CiscoStack - SNMP Interface to data from F<CISCO-STACK-MIB> and
 | 
			
		||||
F<CISCO-PORT-SECURITY-MIB>
 | 
			
		||||
SNMP::Info::CiscoStack - SNMP Interface to data from F<CISCO-STACK-MIB>
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
@@ -296,7 +295,7 @@ Max Baker
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
 # Let SNMP::Info determine the correct subclass for you.
 | 
			
		||||
 my $ciscostats = new SNMP::Info(
 | 
			
		||||
 my $ciscostack = new SNMP::Info(
 | 
			
		||||
                          AutoSpecify => 1,
 | 
			
		||||
                          Debug       => 1,
 | 
			
		||||
                          DestHost    => 'myswitch',
 | 
			
		||||
@@ -305,7 +304,7 @@ Max Baker
 | 
			
		||||
                        )
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
 my $class = $ciscostats->class();
 | 
			
		||||
 my $class = $ciscostack->class();
 | 
			
		||||
 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::CiscoStats
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Changes since Version 0.7 Copyright (c) 2008-2009 Max Baker and SNMP::Info Developers
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -34,22 +33,23 @@
 | 
			
		||||
package SNMP::Info::CiscoStats;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::CiscoStats::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::CiscoStats::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'SNMPv2-MIB'            => 'sysDescr',
 | 
			
		||||
    'CISCO-PROCESS-MIB'     => 'cpmCPUTotal5sec',
 | 
			
		||||
    'CISCO-MEMORY-POOL-MIB' => 'ciscoMemoryPoolUsed',
 | 
			
		||||
    'OLD-CISCO-SYSTEM-MIB'  => 'writeMem',
 | 
			
		||||
    'CISCO-PRODUCTS-MIB'    => 'sysName',
 | 
			
		||||
    'CISCO-PRODUCTS-MIB'    => 'ciscoIGS',
 | 
			
		||||
    'ENTITY-MIB'            => 'entPhysicalSoftwareRev',
 | 
			
		||||
    'CISCO-IMAGE-MIB'       => 'ciscoImageString',
 | 
			
		||||
 | 
			
		||||
@@ -105,6 +105,10 @@ sub os {
 | 
			
		||||
 | 
			
		||||
    # order here matters - there are Catalysts that run IOS and have catalyst
 | 
			
		||||
    # in their description field, as well as Catalysts that run IOS-XE.
 | 
			
		||||
    return 'ios-xe'   if ( $descr =~ /Denali/ );
 | 
			
		||||
    return 'ios-xe'   if ( $descr =~ /Fuji/ );
 | 
			
		||||
    return 'ios-xe'   if ( $descr =~ /Everest/ );
 | 
			
		||||
    return 'ios-xe'   if ( $descr =~ /Gibraltar/ );
 | 
			
		||||
    return 'ios-xe'   if ( $descr =~ /IOS-XE/ );
 | 
			
		||||
    return 'ios-xr'   if ( $descr =~ /IOS XR/ );
 | 
			
		||||
    return 'ios'      if ( $descr =~ /IOS/ );
 | 
			
		||||
@@ -385,8 +389,6 @@ None.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -29,14 +29,14 @@
 | 
			
		||||
package SNMP::Info::CiscoStpExtensions;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
use SNMP::Info::Bridge;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT $INIT/;
 | 
			
		||||
our ($VERSION, $DEBUG, %MIBS, %FUNCS, %GLOBALS, %MUNGE, %PORTSTAT, $INIT);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::CiscoStpExtensions::ISA = qw/SNMP::Info::Bridge SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::CiscoStpExtensions::EXPORT_OK = qw//;
 | 
			
		||||
@@ -54,12 +54,15 @@ $VERSION = '3.33';
 | 
			
		||||
            'stpx_stp_type'          => 'stpxSpanningTreeType',
 | 
			
		||||
            'stpx_bpduguard_enable'  => 'stpxFastStartBpduGuardEnable',
 | 
			
		||||
            'stpx_bpdufilter_enable' => 'stpxFastStartBpduFilterEnable',
 | 
			
		||||
            'stpx_faststart_default' => 'stpxFastStartGlobalDefaultMode',
 | 
			
		||||
           );
 | 
			
		||||
 | 
			
		||||
%FUNCS   = (
 | 
			
		||||
            %SNMP::Info::Bridge::FUNCS,
 | 
			
		||||
            'stpx_rootguard_enabled'      => 'stpxRootGuardConfigEnabled',
 | 
			
		||||
            'stpx_loopguard_enabled'      => 'stpxLoopGuardConfigEnabled',
 | 
			
		||||
            'stpx_faststart_enabled'      => 'stpxFastStartPortEnable',
 | 
			
		||||
            'stpx_faststart_operational'  => 'stpxFastStartPortMode',
 | 
			
		||||
            'stpx_port_bpduguard_mode'    => 'stpxFastStartPortBpduGuardMode',
 | 
			
		||||
            'stpx_port_bpdufilter_mode'   => 'stpxFastStartPortBpduFilterMode',
 | 
			
		||||
            'stpx_smst_root'              => 'stpxSMSTInstanceCISTRegionalRoot',
 | 
			
		||||
@@ -69,7 +72,7 @@ $VERSION = '3.33';
 | 
			
		||||
 | 
			
		||||
%MUNGE   = (
 | 
			
		||||
            %SNMP::Info::Bridge::MUNGE,
 | 
			
		||||
           'stpx_mst_config_digest'     => \&SNMP::Info::CiscoStpExtensions::oct2str,
 | 
			
		||||
           'stpx_mst_config_digest'      => \&SNMP::Info::CiscoStpExtensions::oct2str,
 | 
			
		||||
           );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -225,6 +228,36 @@ sub i_bpdufilter_enabled {
 | 
			
		||||
    return \%res;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_faststart_enabled {
 | 
			
		||||
    my $self    = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $faststart_default = $self->stpx_faststart_default();
 | 
			
		||||
    my $bp_index          = $self->bp_index($partial);
 | 
			
		||||
    my $faststart         = $self->stpx_faststart_enabled();
 | 
			
		||||
    my $faststart_oper    = $self->stpx_faststart_operational();
 | 
			
		||||
 | 
			
		||||
    my %res;
 | 
			
		||||
    # stpxFastStartPortEnable is deprecated in favour of stpxFastStartPortMode
 | 
			
		||||
    # see https://github.com/netdisco/netdisco/issues/12
 | 
			
		||||
    foreach my $index ( keys %$faststart, keys %$faststart_oper ){
 | 
			
		||||
        my $mode = $faststart_oper->{$index} || $faststart->{$index};
 | 
			
		||||
        my $iid  = $bp_index->{$index};
 | 
			
		||||
        next unless defined $iid;
 | 
			
		||||
        next unless defined $mode;
 | 
			
		||||
        if ( $mode eq 'default' ){
 | 
			
		||||
            $res{$iid} =  $faststart_default;
 | 
			
		||||
        }else{
 | 
			
		||||
            $res{$iid} = $mode;
 | 
			
		||||
        }
 | 
			
		||||
        $res{$iid} = 'enable'  if $res{$iid} eq 'true';
 | 
			
		||||
        $res{$iid} = 'disable' if $res{$iid} eq 'false';
 | 
			
		||||
        $res{$iid} = 1 if $res{$iid} =~ m/enable/i; # enableForTrunk
 | 
			
		||||
        $res{$iid} = 0 if $res{$iid} eq 'disable';
 | 
			
		||||
    }
 | 
			
		||||
    return \%res;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
sub oct2str {
 | 
			
		||||
    my ($v) = @_;
 | 
			
		||||
@@ -244,6 +277,19 @@ Carlos Vicente
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
   my $stpx = new SNMP::Info(
 | 
			
		||||
                         AutoSpecify => 1,
 | 
			
		||||
                         Debug       => 1,
 | 
			
		||||
                         DestHost    => 'myswitch',
 | 
			
		||||
                         Community   => 'public',
 | 
			
		||||
                         Version     => 2
 | 
			
		||||
                       )
 | 
			
		||||
 | 
			
		||||
   or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
   my $class = $stpx->class();
 | 
			
		||||
   print " Using device sub class : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Create or use a subclass of SNMP::Info that inherits this class.  Do not use
 | 
			
		||||
@@ -263,9 +309,15 @@ For debugging you can call new() directly as you would in SNMP::Info
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
 | 
			
		||||
=head1 GLOBAL METHODS
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<CISCO-STP-EXTENSIONS-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar values from SNMP
 | 
			
		||||
 | 
			
		||||
@@ -340,6 +392,13 @@ Format is a hash reference with key = C<ifIndex>, value = [1|0]
 | 
			
		||||
 | 
			
		||||
(C<stpxFastStartBpduFilterEnable>)
 | 
			
		||||
 | 
			
		||||
=item $stpx->i_faststart_enabled()
 | 
			
		||||
 | 
			
		||||
Returns 1 or 0 depending on whether FastStart (aka PortFast) is enabled on a
 | 
			
		||||
given port.  Format is a hash reference with key = C<ifIndex>, value = [1|0]
 | 
			
		||||
 | 
			
		||||
(C<stpxFastStartPortEnable> and C<stpxFastStartPortMode>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 MUNGES
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::CiscoVTP
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
 | 
			
		||||
#
 | 
			
		||||
@@ -33,15 +32,16 @@
 | 
			
		||||
package SNMP::Info::CiscoVTP;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::CiscoVTP::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::CiscoVTP::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'CISCO-VTP-MIB'                       => 'vtpVlanName',
 | 
			
		||||
@@ -61,7 +61,6 @@ $VERSION = '3.33';
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
 | 
			
		||||
    # CISCO-VTP-MIB::managementDomainTable
 | 
			
		||||
    'vtp_d_index'     => 'managementDomainIndex',
 | 
			
		||||
    'vtp_d_name'      => 'managementDomainName',
 | 
			
		||||
    'vtp_d_mode'      => 'managementDomainLocalMode',
 | 
			
		||||
    'vtp_d_rev'       => 'managementDomainConfigRevNumber',
 | 
			
		||||
@@ -566,8 +565,6 @@ None.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -780,10 +777,6 @@ Each bit represents a VLAN.  This is 3072 through 4095
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $vtp->vtp_d_index()
 | 
			
		||||
 | 
			
		||||
(C<managementDomainIndex>)
 | 
			
		||||
 | 
			
		||||
=item $vtp->vtp_d_name()
 | 
			
		||||
 | 
			
		||||
(C<managementDomainName>)
 | 
			
		||||
							
								
								
									
										126
									
								
								lib/SNMP/Info/DocsisCM.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								lib/SNMP/Info/DocsisCM.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,126 @@
 | 
			
		||||
# SNMP::Info::DocsisCM - SNMP Interface to DOCSIS Cable Modems
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2019 by The Netdisco Developer Team.
 | 
			
		||||
#
 | 
			
		||||
# 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::DocsisCM;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::DocsisCM::ISA       = qw/SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::DocsisCM::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS  = (
 | 
			
		||||
    %SNMP::Info::Layer2::FUNCS
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    %SNMP::Info::Layer2::MUNGE
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    my $cm = shift;
 | 
			
		||||
    my $descr = $cm->description();
 | 
			
		||||
    return $1 if $descr =~ /VENDOR: (.*?);/;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $cm = shift;
 | 
			
		||||
    my $descr = $cm->description();
 | 
			
		||||
    return $1 if $descr =~ /MODEL: (.*?)>>/;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os {
 | 
			
		||||
    return "CM";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os_ver {
 | 
			
		||||
    my $cm = shift;
 | 
			
		||||
    my $descr = $cm->description();
 | 
			
		||||
    return $1 if $descr =~ /SW_REV: (.*?);/;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::DocsisCM - SNMP Interface for DOCSIS Cable Modems
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
SNMP::Info::DocsisCM is a subclass of SNMP::Info that provides info
 | 
			
		||||
about a given cable modem. Extracts data from the sysDescr, which is 
 | 
			
		||||
mandated in the DOCSIS specification to match
 | 
			
		||||
"HW_REV: <value>; VENDOR: <value>; BOOTR: <value>; SW_REV: <value>; MODEL: <value>"
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
None.
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
 | 
			
		||||
None.
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $cm->vendor()
 | 
			
		||||
 | 
			
		||||
Returns the vendor of the cable modem.
 | 
			
		||||
 | 
			
		||||
=item $cm->model()
 | 
			
		||||
 | 
			
		||||
Returns the model of the cable modem.
 | 
			
		||||
 | 
			
		||||
=item $cm->os()
 | 
			
		||||
 | 
			
		||||
Returns 'cm', as the actual os is vendor and model dependent.
 | 
			
		||||
 | 
			
		||||
=item $cm->os_ver()
 | 
			
		||||
 | 
			
		||||
Returns the version of the software, extracted from the SW_REV field.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										124
									
								
								lib/SNMP/Info/DocsisHE.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								lib/SNMP/Info/DocsisHE.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,124 @@
 | 
			
		||||
package SNMP::Info::DocsisHE;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::DocsisHE::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::DocsisHE::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'DOCS-IF3-MIB' => 'docsIf3Mib',
 | 
			
		||||
    'DOCS-IF-MIB'  => 'docsIfMib',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = ();
 | 
			
		||||
 | 
			
		||||
%FUNCS  = (
 | 
			
		||||
    # DOCSIS 3.0 (DOCS-IF3-MIB) from CableLabs
 | 
			
		||||
    'docs_if3_cmts_cm_status_md_if_index'=> 'docsIf3CmtsCmRegStatusMdIfIndex',
 | 
			
		||||
    # DOCSIS (1.1, etc) from IETF
 | 
			
		||||
    'docs_if_cmts_cm_status_inet_address_type' => 'docsIfCmtsCmStatusInetAddressType',
 | 
			
		||||
    'docs_if_cmts_cm_status_inet_address'      => 'docsIfCmtsCmStatusInetAddress',
 | 
			
		||||
    'docs_cmts_cm_down_channel_if_index'       => 'docsIfCmtsCmStatusDownChannelIfIndex',
 | 
			
		||||
    'docs_cmts_cm_up_channel_if_index'         => 'docsIfCmtsCmStatusUpChannelIfIndex',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = ();
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::DocsisHE - SNMP Interface for F<DOCS-IF-MIB> and F<DOCS-IF3-MIB>
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
Ryan Gasik
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
 my $cmts = new SNMP::Info(
 | 
			
		||||
                             AutoSpecify => 1,
 | 
			
		||||
                             Debug       => 1,
 | 
			
		||||
                             DestHost    => 'cmts',
 | 
			
		||||
                             Community   => 'public',
 | 
			
		||||
                             Version     => 2
 | 
			
		||||
                          );
 | 
			
		||||
 # Get a list of modems off the DOCSIS CMTS
 | 
			
		||||
 my $modems = $cmts->docs_if_cmts_cm_status_inet_address()
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
SNMP::Info::DocsisHE is a subclass of SNMP::Info that provides information
 | 
			
		||||
about the cable modems of a DOCSIS CMTS.
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
None.
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<DOCS-IF-MIB>
 | 
			
		||||
Standard IETF MIBs for DOCSIS 1.1
 | 
			
		||||
 | 
			
		||||
=item F<DOCS-IF3-MIB>
 | 
			
		||||
CableLabs MIBs for DOCSIS 3
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
None.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $info->docs_if3_cmts_cm_status_md_if_index()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of the IfIndex associated with each cable modem.
 | 
			
		||||
 | 
			
		||||
(C<docsIf3CmtsCmRegStatusMdIfIndex>)
 | 
			
		||||
 | 
			
		||||
=item $info->docs_if_cmts_cm_status_inet_address_type()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of the type of IP address (ie, IPv4, IPv6)
 | 
			
		||||
associated with each cable modem
 | 
			
		||||
 | 
			
		||||
(C<docsIfCmtsCmStatusInetAddressType>)
 | 
			
		||||
 | 
			
		||||
=item $info->docs_if_cmts_cm_status_inet_address()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of the IP address associated with each
 | 
			
		||||
cable modem.
 | 
			
		||||
 | 
			
		||||
(C<docsIfCmtsCmStatusInetAddress>)
 | 
			
		||||
 | 
			
		||||
=item $info->docs_cmts_cm_down_channel_if_index()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of the IfIndex of the down channel
 | 
			
		||||
(for DOCSIS 1.1) or a down channel (DOCSIS 3+) associated with each
 | 
			
		||||
cable modem.
 | 
			
		||||
 | 
			
		||||
(C<docsIfCmtsCmStatusDownChannelIfIndex>)
 | 
			
		||||
 | 
			
		||||
=item $info->docs_cmts_cm_up_channel_if_index()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of the IfIndex of the up channel
 | 
			
		||||
(for DOCSIS 1.1) or a up channel (DOCSIS 3+) associated with each
 | 
			
		||||
cable modem.
 | 
			
		||||
 | 
			
		||||
(C<docsIfCmtsCmStatusUpChannelIfIndex>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -31,15 +31,16 @@
 | 
			
		||||
package SNMP::Info::EDP;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::LLDP::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::LLDP::EXPORT_OK = qw//;
 | 
			
		||||
@SNMP::Info::EDP::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::EDP::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'EXTREME-EDP-MIB'   => 'extremeEdpPortIfIndex',
 | 
			
		||||
@@ -75,7 +76,7 @@ sub hasEDP {
 | 
			
		||||
# address since they should all originate from the same device, but we don't
 | 
			
		||||
# know if they would all be reachable from the network management application.
 | 
			
		||||
#
 | 
			
		||||
# We don't inplement partials since this is private index function
 | 
			
		||||
# We don't implement partials since this is private index function
 | 
			
		||||
sub _edp_index {
 | 
			
		||||
    my $edp = shift;
 | 
			
		||||
 | 
			
		||||
@@ -204,10 +205,10 @@ Eric Miller
 | 
			
		||||
 my $class = $edp->class();
 | 
			
		||||
 print " Using device sub class : $class\n";
 | 
			
		||||
 | 
			
		||||
 $haslldp   = $edp->hasLLDP() ? 'yes' : 'no';
 | 
			
		||||
 $hasedp   = $edp->hasEDP() ? 'yes' : 'no';
 | 
			
		||||
 | 
			
		||||
 # Print out a map of device ports with LLDP neighbors:
 | 
			
		||||
 my $interfaces    = $edp->interfaces();
 | 
			
		||||
 # Print out a map of device ports with EDP neighbors:
 | 
			
		||||
 my $interfaces   = $edp->interfaces();
 | 
			
		||||
 my $edp_if       = $edp->edp_if();
 | 
			
		||||
 my $edp_ip       = $edp->edp_ip();
 | 
			
		||||
 my $edp_port     = $edp->edp_port();
 | 
			
		||||
@@ -243,7 +244,7 @@ None.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBAL METHODS
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar values from SNMP
 | 
			
		||||
 | 
			
		||||
@@ -251,7 +252,7 @@ These are methods that return scalar values from SNMP
 | 
			
		||||
 | 
			
		||||
=item $edp->hasEDP()
 | 
			
		||||
 | 
			
		||||
Is EDP is active in this device?  
 | 
			
		||||
Is EDP active on this device?
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Entity
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
 | 
			
		||||
#
 | 
			
		||||
@@ -33,15 +32,16 @@
 | 
			
		||||
package SNMP::Info::Entity;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Entity::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::Entity::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum' );
 | 
			
		||||
 | 
			
		||||
@@ -75,7 +75,7 @@ sub e_index {
 | 
			
		||||
    my $entity  = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    # Force use of MIB leaf to avoid inheritance issues in psuedo classes
 | 
			
		||||
    # Force use of MIB leaf to avoid inheritance issues in pseudo classes
 | 
			
		||||
    my $e_descr = $entity->entPhysicalDescr($partial);
 | 
			
		||||
 | 
			
		||||
    return unless ($e_descr);
 | 
			
		||||
@@ -109,6 +109,57 @@ sub e_port {
 | 
			
		||||
    return \%e_port;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub entity_derived_serial {
 | 
			
		||||
    my $entity  = shift;
 | 
			
		||||
 | 
			
		||||
    my $e_parent = $entity->e_parent() || {};
 | 
			
		||||
    my $e_class  = $entity->e_class() || {};
 | 
			
		||||
 | 
			
		||||
    # Sort keys to return a consistent result between runs
 | 
			
		||||
    foreach my $iid ( sort keys %$e_parent ) {
 | 
			
		||||
        my $parent = $e_parent->{$iid};
 | 
			
		||||
        my $class = $e_class->{$iid} || '';
 | 
			
		||||
        # Only consider serial numbers for entries without a parent, or
 | 
			
		||||
        # if they are of type "chassis"
 | 
			
		||||
        if ( $parent eq '0' or $class eq 'chassis') {
 | 
			
		||||
            my $serial = $entity->e_serial($iid);
 | 
			
		||||
            if ( $serial && $serial->{$iid} ) {
 | 
			
		||||
                return $serial->{$iid};
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                my $descr = $entity->e_descr($iid);
 | 
			
		||||
                if ( $descr and $descr->{$iid} =~ /serial#?:\s*([a-z0-9]+)/i )
 | 
			
		||||
                {
 | 
			
		||||
                    return $1;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub entity_derived_os_ver {
 | 
			
		||||
    my $entity  = shift;
 | 
			
		||||
 | 
			
		||||
    my $e_parent = $entity->e_parent() || {};
 | 
			
		||||
    my $e_class  = $entity->e_class() || {};
 | 
			
		||||
 | 
			
		||||
    # Sort keys to return a consistent result between runs
 | 
			
		||||
    foreach my $iid ( sort keys %$e_parent ) {
 | 
			
		||||
        my $parent = $e_parent->{$iid};
 | 
			
		||||
        my $class = $e_class->{$iid} || '';
 | 
			
		||||
        # Only consider serial numbers for entries without a parent, or
 | 
			
		||||
        # if they are of type "chassis"
 | 
			
		||||
        if ( $parent eq '0' or $class eq 'chassis') {
 | 
			
		||||
            my $os_ver = $entity->e_swver($iid);
 | 
			
		||||
            if ( $os_ver && $os_ver->{$iid} ) {
 | 
			
		||||
                return $os_ver->{$iid};
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
 | 
			
		||||
__END__
 | 
			
		||||
@@ -162,8 +213,6 @@ none.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
none.
 | 
			
		||||
@@ -173,6 +222,23 @@ none.
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
to a hash.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $entity->entity_derived_serial()
 | 
			
		||||
 | 
			
		||||
Tries to determine the device serial number from the F<ENTITY-MIB>. Only
 | 
			
		||||
considers serial numbers for entries without a parent, or if they are of type
 | 
			
		||||
chassis. Looks at C<entPhysicalSerialNum> and then C<entPhysicalDescr> for
 | 
			
		||||
serial number.
 | 
			
		||||
 | 
			
		||||
=item $entity->entity_derived_os_ver()
 | 
			
		||||
 | 
			
		||||
Tries to determine the device OS version from the F<ENTITY-MIB>. Only
 | 
			
		||||
considers serial numbers for entries without a parent, or if they are of type
 | 
			
		||||
chassis. Looks at C<entPhysicalSoftwareRev> for the version.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Entity Table
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::EtherLike
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
 | 
			
		||||
#
 | 
			
		||||
@@ -33,15 +32,16 @@
 | 
			
		||||
package SNMP::Info::EtherLike;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::EtherLike::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::EtherLike::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'EtherLike-MIB' => 'etherMIB' );
 | 
			
		||||
 | 
			
		||||
@@ -68,8 +68,7 @@ $VERSION = '3.33';
 | 
			
		||||
    'el_xmit_defer'      => 'dot3StatsDeferredTransmissions',
 | 
			
		||||
 | 
			
		||||
    # Ethernet-like Collision Statistics Group
 | 
			
		||||
    'el_coll_count' => 'dot3CollCount',
 | 
			
		||||
    'el_coll_freq'  => 'dot3CollFrequencies'
 | 
			
		||||
    'el_coll_freq'  => 'dot3CollFrequencies',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = ( %SNMP::Info::MUNGE, 'el_duplex' => \&munge_el_duplex, );
 | 
			
		||||
@@ -104,7 +103,7 @@ Max Baker
 | 
			
		||||
                             Version     => 2
 | 
			
		||||
                           );
 | 
			
		||||
 | 
			
		||||
 my $class = $cdp->class();
 | 
			
		||||
 my $class = $el->class();
 | 
			
		||||
 print " Using device sub class : $class\n";
 | 
			
		||||
 | 
			
		||||
 # Find the duplex setting for a port on a device that implements
 | 
			
		||||
@@ -144,8 +143,6 @@ None.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar values from SNMP
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::FDP
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Bruce Rodger, Max Baker
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -34,15 +33,16 @@
 | 
			
		||||
package SNMP::Info::FDP;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::FDP::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::FDP::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snFdpGlobalRun' );
 | 
			
		||||
 | 
			
		||||
@@ -50,11 +50,9 @@ $VERSION = '3.33';
 | 
			
		||||
    'fdp_run'      => 'snFdpGlobalRun',
 | 
			
		||||
    'fdp_interval' => 'snFdpGlobalMessageInterval',
 | 
			
		||||
    'fdp_holdtime' => 'snFdpGlobalHoldTime',
 | 
			
		||||
    'fdp_id'       => 'snFdpGlobalDeviceId',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    'fdp_index'        => 'snFdpCacheIfIndex',
 | 
			
		||||
    'fdp_proto'        => 'snFdpCacheAddressType',
 | 
			
		||||
    'fdp_ip'           => 'snFdpCacheAddress',
 | 
			
		||||
    'fdp_ver'          => 'snFdpCacheVersion',
 | 
			
		||||
@@ -62,14 +60,12 @@ $VERSION = '3.33';
 | 
			
		||||
    'fdp_port'         => 'snFdpCacheDevicePort',
 | 
			
		||||
    'fdp_platform'     => 'snFdpCachePlatform',
 | 
			
		||||
    'fdp_capabilities' => 'snFdpCacheCapabilities',
 | 
			
		||||
    'fdp_domain'       => 'snFdpCacheVTPMgmtDomain',
 | 
			
		||||
    'fdp_vlan'         => 'snFdpCacheNativeVLAN',
 | 
			
		||||
    'fdp_duplex'       => 'snFdpCacheDuplex',
 | 
			
		||||
    'fdp_cache_type'   => 'snFdpCacheVendorId',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    'fdp_capabilities' => \&SNMP::Info::munge_bits,
 | 
			
		||||
    'fdp_ip'           => \&SNMP::Info::munge_ip
 | 
			
		||||
    'fdp_ip'           => \&SNMP::Info::munge_ip,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub fdp_run {
 | 
			
		||||
@@ -84,9 +80,7 @@ sub fdp_run {
 | 
			
		||||
sub hasFDP {
 | 
			
		||||
    my $fdp = shift;
 | 
			
		||||
 | 
			
		||||
    my $ver = $fdp->{_version};
 | 
			
		||||
 | 
			
		||||
    #my $ver = $fdp->fdp_ver;
 | 
			
		||||
    my $ver = $fdp->snmp_ver();
 | 
			
		||||
 | 
			
		||||
    # SNMP v1 clients dont have the globals
 | 
			
		||||
    if ( defined $ver and $ver == 1 ) {
 | 
			
		||||
@@ -103,11 +97,6 @@ sub hasFDP {
 | 
			
		||||
sub fdp_if {
 | 
			
		||||
    my $fdp = shift;
 | 
			
		||||
 | 
			
		||||
    # See if by some miracle Cisco implemented the fdpCacheIfIndex entry
 | 
			
		||||
    my $fdp_index = $fdp->fdp_index();
 | 
			
		||||
    return $fdp_index if defined $fdp_index;
 | 
			
		||||
 | 
			
		||||
    # Nope, didn't think so. Now we fake it.
 | 
			
		||||
    my $fdp_ip = $fdp->fdp_ip();
 | 
			
		||||
    unless ( defined $fdp_ip ) {
 | 
			
		||||
        $fdp->error_throw(
 | 
			
		||||
@@ -157,7 +146,7 @@ Bruce Rodger, Max Baker
 | 
			
		||||
 $hasfdp   = $fdp->hasFDP() ? 'yes' : 'no';
 | 
			
		||||
 | 
			
		||||
 # Print out a map of device ports with FDP neighbors:
 | 
			
		||||
 my $interfaces = $fdp->interfaces();
 | 
			
		||||
 my $interfaces   = $fdp->interfaces();
 | 
			
		||||
 my $fdp_if       = $fdp->fdp_if();
 | 
			
		||||
 my $fdp_ip       = $fdp->fdp_ip();
 | 
			
		||||
 my $fdp_port     = $fdp->fdp_port();
 | 
			
		||||
@@ -201,7 +190,7 @@ work with B2R07600C.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBAL METHODS
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar values from SNMP
 | 
			
		||||
 | 
			
		||||
@@ -231,15 +220,6 @@ Time in seconds that FDP messages are kept.
 | 
			
		||||
 | 
			
		||||
(C<fdpGlobalHoldTime>)
 | 
			
		||||
 | 
			
		||||
=item  $fdp->fdp_id() 
 | 
			
		||||
 | 
			
		||||
Returns FDP device ID.  
 | 
			
		||||
 | 
			
		||||
This is the device id broadcast via FDP to other devices, and is what is
 | 
			
		||||
retrieved from remote devices with $fdp->id().
 | 
			
		||||
 | 
			
		||||
(C<fdpGlobalDeviceId>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Overrides
 | 
			
		||||
@@ -323,19 +303,6 @@ Thanks to Martin Lorensen for a pointer to this information.
 | 
			
		||||
 | 
			
		||||
(C<fdpCacheCapabilities>)
 | 
			
		||||
 | 
			
		||||
=item $fdp->fdp_domain()
 | 
			
		||||
 | 
			
		||||
The CDP version of this returns remote VTP Management Domain as defined
 | 
			
		||||
in C<CISCO-VTP-MIB::managementDomainName>
 | 
			
		||||
 | 
			
		||||
(C<fdpCacheVTPMgmtDomain>)
 | 
			
		||||
 | 
			
		||||
=item $fdp->fdp_duplex() 
 | 
			
		||||
 | 
			
		||||
Returns the port duplex status from remote devices.
 | 
			
		||||
 | 
			
		||||
(C<fdpCacheDuplex>)
 | 
			
		||||
 | 
			
		||||
=item $fdp->fdp_id()
 | 
			
		||||
 | 
			
		||||
Returns remote device id string
 | 
			
		||||
@@ -346,17 +313,9 @@ Returns remote device id string
 | 
			
		||||
 | 
			
		||||
Returns the mapping to the SNMP Interface Table.
 | 
			
		||||
 | 
			
		||||
Note that a lot devices don't implement $fdp->fdp_index(),  So if it isn't
 | 
			
		||||
around, we fake it. 
 | 
			
		||||
 | 
			
		||||
In order to map the fdp table entry back to the interfaces() entry, we
 | 
			
		||||
truncate the last number off of it :
 | 
			
		||||
 | 
			
		||||
  # it exists, yay.
 | 
			
		||||
  my $fdp_index     = $device->fdp_index();
 | 
			
		||||
  return $fdp_index if defined $fdp_index;
 | 
			
		||||
 | 
			
		||||
  # if not, let's fake it
 | 
			
		||||
  my $fdp_ip       = $device->fdp_ip();
 | 
			
		||||
 | 
			
		||||
  my %fdp_if
 | 
			
		||||
@@ -369,18 +328,6 @@ truncate the last number off of it :
 | 
			
		||||
 | 
			
		||||
  return \%fdp_if;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
=item $fdp->fdp_index()
 | 
			
		||||
 | 
			
		||||
Returns the mapping to the SNMP2 Interface table for FDP Cache Entries. 
 | 
			
		||||
 | 
			
		||||
Most devices don't implement this, so you probably want to use $fdp->fdp_if()
 | 
			
		||||
instead.
 | 
			
		||||
 | 
			
		||||
See fdp_if() entry.
 | 
			
		||||
 | 
			
		||||
(C<fdpCacheIfIndex>)
 | 
			
		||||
 | 
			
		||||
=item  $fdp->fdp_ip()
 | 
			
		||||
 | 
			
		||||
Returns remote IP address
 | 
			
		||||
@@ -411,11 +358,11 @@ Returns remote hardware version
 | 
			
		||||
 | 
			
		||||
(C<fdpCacheVersion>)
 | 
			
		||||
 | 
			
		||||
=item $fdp->fdp_vlan()
 | 
			
		||||
=item $fdp->fdp_cache_type()
 | 
			
		||||
 | 
			
		||||
Returns the remote interface native VLAN.
 | 
			
		||||
Returns type of entry received, either FDP or CDP.
 | 
			
		||||
 | 
			
		||||
(C<fdpCacheNativeVLAN>)
 | 
			
		||||
(C<snFdpCacheVendorId>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										230
									
								
								lib/SNMP/Info/IEEE802_Bridge.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										230
									
								
								lib/SNMP/Info/IEEE802_Bridge.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,230 @@
 | 
			
		||||
# SNMP::Info::IEEE802_Bridge
 | 
			
		||||
#
 | 
			
		||||
# Changes since Version 0.7 Copyright (c) 2004 Max Baker
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# 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::IEEE802_Bridge;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::IEEE802_Bridge::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::IEEE802_Bridge::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, $DEBUG, %MIBS, %FUNCS, %GLOBALS, %MUNGE, $INIT);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'IEEE8021-Q-BRIDGE-MIB' => 'ieee8021QBridgeVlanCurrentEgressPorts',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    'iqb_i_vlan'        => 'ieee8021QBridgePvid',
 | 
			
		||||
    'iqb_i_vlan_type'   => 'ieee8021QBridgePortAcceptableFrameTypes',
 | 
			
		||||
    'iqb_i_vlan_in_flt' => 'ieee8021QBridgePortIngressFiltering',
 | 
			
		||||
 | 
			
		||||
    'iqb_cv_egress'   => 'ieee8021QBridgeVlanCurrentEgressPorts',
 | 
			
		||||
    'iqb_cv_untagged' => 'ieee8021QBridgeVlanCurrentUntaggedPorts',
 | 
			
		||||
    'iqb_cv_stat'     => 'ieee8021QBridgeVlanStatus',
 | 
			
		||||
 | 
			
		||||
    'iqb_v_name'        => 'ieee8021QBridgeVlanStaticName',
 | 
			
		||||
    'iqb_v_egress'      => 'ieee8021QBridgeVlanStaticEgressPorts',
 | 
			
		||||
    'iqb_v_fbdn_egress' => 'ieee8021QBridgeVlanForbiddenEgressPorts',
 | 
			
		||||
    'iqb_v_untagged'    => 'ieee8021QBridgeVlanStaticUntaggedPorts',
 | 
			
		||||
    'iqb_v_stat'        => 'ieee8021QBridgeVlanStaticRowStatus',
 | 
			
		||||
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
 | 
			
		||||
    # Inherit all the built in munging
 | 
			
		||||
    %SNMP::Info::MUNGE,
 | 
			
		||||
 | 
			
		||||
    # Add ones for our class
 | 
			
		||||
    'iqb_cv_egress'     => \&SNMP::Info::munge_port_list,
 | 
			
		||||
    'iqb_cv_untagged'   => \&SNMP::Info::munge_port_list,
 | 
			
		||||
    'iqb_v_egress'      => \&SNMP::Info::munge_port_list,
 | 
			
		||||
    'iqb_v_fbdn_egress' => \&SNMP::Info::munge_port_list,
 | 
			
		||||
    'iqb_v_untagged'    => \&SNMP::Info::munge_port_list,
 | 
			
		||||
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::IEEE802_Bridge - SNMP Interface to SNMP data available through the
 | 
			
		||||
F<IEEE8021-Q-BRIDGE-MIB>
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
Jeroen van Ingen
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
FIXME update with better example
 | 
			
		||||
 my $bridge = new SNMP::Info (
 | 
			
		||||
                             AutoSpecify => 1,
 | 
			
		||||
                             Debug       => 1,
 | 
			
		||||
                             DestHost    => 'switch',
 | 
			
		||||
                             Community   => 'public',
 | 
			
		||||
                             Version     => 2
 | 
			
		||||
                             );
 | 
			
		||||
 | 
			
		||||
 my $class = $bridge->class();
 | 
			
		||||
 print " Using device sub class : $class\n";
 | 
			
		||||
 | 
			
		||||
 # Grab Forwarding Tables
 | 
			
		||||
 my $interfaces = $bridge->interfaces();
 | 
			
		||||
 my $fw_mac     = $bridge->fw_mac();
 | 
			
		||||
 my $fw_port    = $bridge->fw_port();
 | 
			
		||||
 my $bp_index   = $bridge->bp_index();
 | 
			
		||||
 | 
			
		||||
 foreach my $fw_index (keys %$fw_mac){
 | 
			
		||||
    my $mac   = $fw_mac->{$fw_index};
 | 
			
		||||
    my $bp_id = $fw_port->{$fw_index};
 | 
			
		||||
    my $iid   = $bp_index->{$bp_id};
 | 
			
		||||
    my $port  = $interfaces->{$iid};
 | 
			
		||||
 | 
			
		||||
    print "Port:$port forwarding to $mac\n";
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
F<IEEE8021-Q-BRIDGE-MIB> is used by some newer switches / Layer 2 devices.
 | 
			
		||||
It is derived from the IETF Q-BRIDGE-MIB (RFC 4363), extending it with the
 | 
			
		||||
concept of multiple VLAN-aware bridges (PBB).
 | 
			
		||||
 | 
			
		||||
Create or use a subclass of SNMP::Info that inherits this class.  Do not use
 | 
			
		||||
directly.
 | 
			
		||||
 | 
			
		||||
For debugging you can call new() directly as you would in SNMP::Info
 | 
			
		||||
 | 
			
		||||
 my $bridge = new SNMP::Info::IEEE802_Bridge(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
None.
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<IEEE8021-Q-BRIDGE-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar values from SNMP
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
to a hash.
 | 
			
		||||
 | 
			
		||||
=head2 Per-port VLAN configuration in the device (C<ieee8021QBridgePortVlanTable>)
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_i_vlan()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgePvid>)
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_i_vlan_type()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgePortAcceptableFrameTypes>)
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_i_vlan_in_flt()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgePortIngressFiltering>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 VLAN Current Table (C<ieee8021QBridgeVlanCurrentTable>)
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_cv_egress()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgeVlanCurrentEgressPorts>)
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_cv_untagged()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgeVlanCurrentUntaggedPorts>)
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_cv_stat()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgeVlanStatus>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 VLAN Static Table (C<ieee8021QBridgeVlanStaticTable>)
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_v_name()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgeVlanStaticName>)
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_v_egress()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgeVlanStaticEgressPorts>)
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_v_fbdn_egress()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgeVlanForbiddenEgressPorts>)
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_v_untagged()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgeVlanStaticUntaggedPorts>)
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_v_stat()
 | 
			
		||||
 | 
			
		||||
C<active> !
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgeVlanStaticRowStatus>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::IEEE802dot11
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Eric Miller
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,14 +30,16 @@
 | 
			
		||||
package SNMP::Info::IEEE802dot11;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::IEEE802dot11::ISA       = qw/Exporter/;
 | 
			
		||||
@SNMP::Info::IEEE802dot11::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::IEEE802dot11::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', );
 | 
			
		||||
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
# SNMP::Info::IEEE802dot3ad
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2014 SNMP::Info Developers
 | 
			
		||||
# Copyright (c) 2018 SNMP::Info Developers
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
@@ -30,6 +30,7 @@
 | 
			
		||||
package SNMP::Info::IEEE802dot3ad;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Aggregate;
 | 
			
		||||
 | 
			
		||||
@@ -41,9 +42,9 @@ use SNMP::Info::Aggregate;
 | 
			
		||||
  agg_ports_lag
 | 
			
		||||
/;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
  %SNMP::Info::Aggregate::MIBS,
 | 
			
		||||
@@ -52,29 +53,40 @@ $VERSION = '3.33';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = ();
 | 
			
		||||
 | 
			
		||||
%FUNCS = ();
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
  'ad_lag_ports'    => 'dot3adAggPortListPorts',
 | 
			
		||||
 );
 | 
			
		||||
 | 
			
		||||
%MUNGE = ();
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
  'ad_lag_ports' => \&SNMP::Info::munge_port_list,
 | 
			
		||||
 );
 | 
			
		||||
 | 
			
		||||
sub agg_ports_lag {
 | 
			
		||||
  my $dev = shift;
 | 
			
		||||
 | 
			
		||||
  # TODO: implement partial
 | 
			
		||||
  my $masters = $dev->dot3adAggActorOperKey;
 | 
			
		||||
  my $slaves  = $dev->dot3adAggPortActorOperKey;
 | 
			
		||||
  my $ports  = $dev->ad_lag_ports();
 | 
			
		||||
  my $index  = $dev->bp_index() || {};
 | 
			
		||||
 | 
			
		||||
  return {} unless
 | 
			
		||||
    ref {} eq ref $masters and scalar keys %$masters
 | 
			
		||||
    and ref {} eq ref $slaves and scalar keys %$slaves;
 | 
			
		||||
  return {} unless ref {} eq ref $ports and scalar keys %$ports;
 | 
			
		||||
 | 
			
		||||
  my $ret = {};
 | 
			
		||||
  foreach my $s (keys %$slaves) {
 | 
			
		||||
      next if $slaves->{$s} == 0;
 | 
			
		||||
      foreach my $m (keys %$masters) {
 | 
			
		||||
          next unless $masters->{$m} == $slaves->{$s};
 | 
			
		||||
          $ret->{$s} = $m;
 | 
			
		||||
          last;
 | 
			
		||||
  foreach my $m ( keys %$ports ) {
 | 
			
		||||
    my $idx = $m;
 | 
			
		||||
    my $portlist = $ports->{$m};
 | 
			
		||||
    next unless $portlist;
 | 
			
		||||
 | 
			
		||||
    # While dot3adAggTable is indexed by ifIndex, the portlist is indexed
 | 
			
		||||
    # with a dot1dBasePort, so we need to use dot1dBasePortIfIndex to map to
 | 
			
		||||
    # the ifIndex. If we don't have dot1dBasePortIfIndex assume
 | 
			
		||||
    # dot1dBasePort = ifIndex
 | 
			
		||||
    for ( my $i = 0; $i <= scalar(@$portlist); $i++ ) {
 | 
			
		||||
      my $ifindex = $i+1;
 | 
			
		||||
      if ( exists($index->{$i+1}) and defined($index->{$i+1}) ) {
 | 
			
		||||
        $ifindex = $index->{$i+1};
 | 
			
		||||
      }
 | 
			
		||||
      $ret->{$ifindex} = $idx if ( @$portlist[$i] );
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return $ret;
 | 
			
		||||
@@ -30,13 +30,14 @@
 | 
			
		||||
package SNMP::Info::IPv6;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::IPv6::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::IPv6::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE $METHOD/;
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE, $METHOD);
 | 
			
		||||
 | 
			
		||||
use constant {
 | 
			
		||||
    IPMIB   => 1,
 | 
			
		||||
@@ -44,7 +45,7 @@ use constant {
 | 
			
		||||
    IPV6MIB => 3,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -67,7 +68,7 @@ $VERSION = '3.33';
 | 
			
		||||
 | 
			
		||||
    'ip_n2p_phys_state' => 'ipNetToPhysicalState',          # IP-MIB
 | 
			
		||||
    'c_inet_phys_state' => 'cInetNetToMediaState',          # CISCO-IETF-IP-MIB
 | 
			
		||||
    'i6_n2p_phys_state' => 'ipv6NetToMediaState',           # IPV6-MIB
 | 
			
		||||
    'i6_n2p_phys_state' => 'ipv6IfNetToMediaState',         # IPV6-MIB
 | 
			
		||||
 | 
			
		||||
    'ip_pfx_origin'     => 'ipAddressPrefixOrigin',         # IP-MIB
 | 
			
		||||
    'c_pfx_origin'      => 'cIpAddressPfxOrigin',           # CISCO-IETF-IP-MIB
 | 
			
		||||
@@ -75,12 +76,16 @@ $VERSION = '3.33';
 | 
			
		||||
    'ip_addr6_pfx'      => 'ipAddressPrefix',               # IP-MIB
 | 
			
		||||
    'c_addr6_pfx'       => 'cIpAddressPrefix',              # CISCO-IETF-IP-MIB
 | 
			
		||||
 | 
			
		||||
    # Commented out are not-accessible according to MIB
 | 
			
		||||
    #'ip_addr6_pfxlen'   => 'ipAddressPrefixLength',        # IP-MIB
 | 
			
		||||
    #'c_addr6_pfxlen'    => 'cIpAddressPfxLength',          # CISCO-IETF-IP-MIB
 | 
			
		||||
    'i6_addr_pfxlen'    => 'ipv6AddrPfxLength',             # IPV6-MIB
 | 
			
		||||
 | 
			
		||||
    'ip_addr6_index'    => 'ipAddressIfIndex',              # IP-MIB
 | 
			
		||||
    'c_addr6_index'     => 'cIpAddressIfIndex',             # CISCO-IETF-IP-MIB
 | 
			
		||||
 | 
			
		||||
    'ip_addr6_type'     => 'ipAddressType',                 # IP-MIB
 | 
			
		||||
    'c_addr6_type'      => 'cIpAddressType',                # CISCO-IETF-IP-MIB
 | 
			
		||||
    
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
@@ -313,7 +318,9 @@ sub ipv6_addr_prefix {
 | 
			
		||||
    foreach my $row (keys %$ipv6_addr_prefix){
 | 
			
		||||
        if ($row =~ /^(\d+)\.[\d\.]+$/) {
 | 
			
		||||
            my $type = $1;
 | 
			
		||||
            if ($type == 2) { # IPv6
 | 
			
		||||
	    if (($type == 2) or ($type == 4)) { # IPv6
 | 
			
		||||
		# Remove interface specific part from vrf interfaces
 | 
			
		||||
		if ($row =~ /^((\d+\.){17}\d+)/) { $row = $1 }
 | 
			
		||||
		# Remove the OID part from the value
 | 
			
		||||
		my $val = $ipv6_addr_prefix->{$row};
 | 
			
		||||
		if ( $val =~ /^.+?((?:\d+\.){19}\d+)$/ ){
 | 
			
		||||
@@ -327,9 +334,36 @@ sub ipv6_addr_prefix {
 | 
			
		||||
    return $return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub ipv6_addr {
 | 
			
		||||
sub ipv6_addr_prefixlength {
 | 
			
		||||
    my $info = shift;
 | 
			
		||||
    my $return;
 | 
			
		||||
    my $ipv6_addr_prefix = &_test_methods( $info, {
 | 
			
		||||
        ip_addr6_pfx  => IPMIB,
 | 
			
		||||
        c_addr6_pfx   => CISCO,
 | 
			
		||||
    });
 | 
			
		||||
    return unless defined $ipv6_addr_prefix;
 | 
			
		||||
    foreach my $row (keys %$ipv6_addr_prefix) {
 | 
			
		||||
        if ($row =~ /^(\d+)\.[\d\.]+$/) {
 | 
			
		||||
            my $type = $1;
 | 
			
		||||
            if (($type == 2) or ($type == 4)) { # IPv6
 | 
			
		||||
                # Remove interface specific part from vrf interfaces
 | 
			
		||||
                if ($row =~ /^((\d+\.){17}\d+)/) { $row = $1 }
 | 
			
		||||
                # Remove the OID part from the value
 | 
			
		||||
                my $val = $ipv6_addr_prefix->{$row} || '';
 | 
			
		||||
                if ( $val =~ /^.+?((?:\d+\.){19}(\d+))$/ ) {
 | 
			
		||||
                    $val = $2;
 | 
			
		||||
                    $return->{$row} = $val;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    printf("%s: data comes from %s.\n", &_my_sub_name, $info->_method_used() ) if $info->debug();
 | 
			
		||||
    return $return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub ipv6_addr {
 | 
			
		||||
    my $info = shift;
 | 
			
		||||
    my $return = {};
 | 
			
		||||
    my $indexes = $info->ipv6_index();
 | 
			
		||||
    foreach my $row (keys %$indexes) {
 | 
			
		||||
        my @parts = split(/\./, $row);
 | 
			
		||||
@@ -343,8 +377,8 @@ sub ipv6_addr {
 | 
			
		||||
        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);
 | 
			
		||||
        } elsif ($info->debug()) {
 | 
			
		||||
            printf("%s: unable to decode table index to IPv6 address. Raw data is [%s].\n", &_my_sub_name, $row);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return $return;
 | 
			
		||||
@@ -353,6 +387,7 @@ sub ipv6_addr {
 | 
			
		||||
sub _method_used {
 | 
			
		||||
    my $info = shift;
 | 
			
		||||
    my $return = 'none of the MIBs';
 | 
			
		||||
    # FIXME ugh! a global. makes order of calls important for debug.
 | 
			
		||||
    if (defined $info::METHOD) {
 | 
			
		||||
        if ($info::METHOD eq IPMIB) {
 | 
			
		||||
            $return = 'IP-MIB';
 | 
			
		||||
@@ -372,6 +407,7 @@ sub _test_methods {
 | 
			
		||||
    foreach my $method (sort {$test->{$a} <=> $test->{$b}} keys %$test) {
 | 
			
		||||
        $return = $info->$method || {};
 | 
			
		||||
        if (scalar keys %$return) {
 | 
			
		||||
            # FIXME ugh! a global. makes order of calls important for debug.
 | 
			
		||||
            $info::METHOD = $test->{$method};
 | 
			
		||||
            last;
 | 
			
		||||
        }
 | 
			
		||||
@@ -444,7 +480,9 @@ none.
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<IP-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<IPV6-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CISCO-IETF-IP-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
@@ -488,6 +526,10 @@ Maps an IPv6 prefix with its origin (manual, well-known, dhcp, etc.)
 | 
			
		||||
 | 
			
		||||
Maps IPv6 addresses with their prefixes
 | 
			
		||||
 | 
			
		||||
=item $info->ipv6_addr_prefixlength()
 | 
			
		||||
 | 
			
		||||
Maps IPv6 addresses with their prefix length
 | 
			
		||||
 | 
			
		||||
=item $info->ipv6_addr()
 | 
			
		||||
 | 
			
		||||
Maps a table instance to an IPv6 address
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
# SNMP::Info::LLDP
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Eric Miller
 | 
			
		||||
# Copyright (c) 2018 Eric Miller
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
@@ -31,18 +30,20 @@
 | 
			
		||||
package SNMP::Info::LLDP;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::LLDP::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::LLDP::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'LLDP-MIB'          => 'lldpLocSysCapEnabled',
 | 
			
		||||
    'LLDP-EXT-MED-MIB'  => 'lldpXMedMIB',
 | 
			
		||||
    'LLDP-EXT-DOT1-MIB' => 'lldpXdot1MIB',
 | 
			
		||||
    'LLDP-EXT-DOT3-MIB' => 'lldpXdot3MIB',
 | 
			
		||||
);
 | 
			
		||||
@@ -54,10 +55,13 @@ $VERSION = '3.33';
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
 | 
			
		||||
    # LLDP-MIB::lldpLocManAddrTable
 | 
			
		||||
    'lldp_lman_addr' => 'lldpLocManAddrIfId',
 | 
			
		||||
 | 
			
		||||
    # LLDP-MIB::LldpLocPortEntry
 | 
			
		||||
    'lldp_lport_id'   => 'lldpLocPortId',
 | 
			
		||||
    'lldp_lport_desc' => 'lldpLocPortDesc',
 | 
			
		||||
 | 
			
		||||
    # LLDP-MIB::lldpRemTable
 | 
			
		||||
    'lldp_rem_id_type'  => 'lldpRemChassisIdSubtype',
 | 
			
		||||
    'lldp_rem_id'       => 'lldpRemChassisId',
 | 
			
		||||
@@ -69,6 +73,18 @@ $VERSION = '3.33';
 | 
			
		||||
    'lldp_rem_sys_cap'  => 'lldpRemSysCapEnabled',
 | 
			
		||||
    'lldp_rem_cap_spt'  => 'lldpRemSysCapSupported',
 | 
			
		||||
 | 
			
		||||
    # LLDP-MIB::lldpXMedRemInventoryTable
 | 
			
		||||
    'lldp_rem_hw_rev' => 'lldpXMedRemHardwareRev',
 | 
			
		||||
    'lldp_rem_fw_rev' => 'lldpXMedRemFirmwareRev',
 | 
			
		||||
    'lldp_rem_sw_rev' => 'lldpXMedRemSoftwareRev',
 | 
			
		||||
    'lldp_rem_serial' => 'lldpXMedRemSerialNum',
 | 
			
		||||
    'lldp_rem_vendor' => 'lldpXMedRemMfgName',
 | 
			
		||||
    'lldp_rem_model'  => 'lldpXMedRemModelName',
 | 
			
		||||
    'lldp_rem_asset'  => 'lldpXMedRemAssetID',
 | 
			
		||||
 | 
			
		||||
    'lldp_rem_media_cap'     => 'lldpXMedRemCapCurrent',
 | 
			
		||||
    'lldp_rem_media_cap_spt' => 'lldpXMedRemCapSupported',
 | 
			
		||||
 | 
			
		||||
    # LLDP-MIB::lldpRemManAddrTable
 | 
			
		||||
    'lldp_rman_addr' => 'lldpRemManAddrIfSubtype',
 | 
			
		||||
);
 | 
			
		||||
@@ -79,9 +95,22 @@ $VERSION = '3.33';
 | 
			
		||||
    'lldp_rem_sysname'   => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_rem_sysdesc'   => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_rem_port_desc' => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_lport_id'      => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_lport_desc'    => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_sys_cap'       => \&SNMP::Info::munge_bits,
 | 
			
		||||
    'lldp_rem_sys_cap'   => \&SNMP::Info::munge_bits,
 | 
			
		||||
    'lldp_rem_cap_spt'   => \&SNMP::Info::munge_bits,
 | 
			
		||||
 | 
			
		||||
    'lldp_rem_hw_rev' => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_rem_fw_rev' => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_rem_sw_rev' => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_rem_serial' => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_rem_vendor' => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_rem_model'  => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_rem_asset'  => \&SNMP::Info::munge_null,
 | 
			
		||||
 | 
			
		||||
    'lldp_rem_media_cap'     => \&SNMP::Info::munge_bits,
 | 
			
		||||
    'lldp_rem_media_cap_spt' => \&SNMP::Info::munge_bits,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub hasLLDP {
 | 
			
		||||
@@ -92,7 +121,8 @@ sub hasLLDP {
 | 
			
		||||
    my $lldp_cap = $lldp->lldp_sys_cap();
 | 
			
		||||
    return 1 if defined $lldp_cap;
 | 
			
		||||
 | 
			
		||||
    # If the device doesn't return local system capabilities, fallback by checking if it would report neighbors
 | 
			
		||||
    # If the device doesn't return local system capabilities, fallback
 | 
			
		||||
    # by checking if it would report neighbors
 | 
			
		||||
    my $lldp_rem = $lldp->lldp_rem_id() || {};
 | 
			
		||||
    return 1 if scalar keys %$lldp_rem;
 | 
			
		||||
 | 
			
		||||
@@ -114,13 +144,22 @@ sub lldp_if {
 | 
			
		||||
        my @aOID = split( '\.', $key );
 | 
			
		||||
        my $port = $aOID[1];
 | 
			
		||||
        next unless $port;
 | 
			
		||||
        # Local LLDP port may not equate to ifIndex, see LldpPortNumber TEXTUAL-CONVENTION in LLDP-MIB.
 | 
			
		||||
        # Cross reference lldpLocPortDesc with ifDescr and ifAlias to get ifIndex,
 | 
			
		||||
        # prefer ifDescr over ifAlias because using cross ref with description is correct behavior 
 | 
			
		||||
        # according to the LLDP-MIB. Some devices (eg H3C gear) seem to use ifAlias though.
 | 
			
		||||
        my $lldp_desc = $lldp->lldpLocPortDesc($port);
 | 
			
		||||
 | 
			
		||||
        # Local LLDP port may not equate to ifIndex, see LldpPortNumber
 | 
			
		||||
        # TEXTUAL-CONVENTION in LLDP-MIB. Cross reference lldpLocPortDesc
 | 
			
		||||
        # with ifDescr and ifAlias to get ifIndex, prefer ifDescr over
 | 
			
		||||
        # ifAlias because using cross ref with description is correct
 | 
			
		||||
        # behavior according to the LLDP-MIB. Some devices (eg H3C gear)
 | 
			
		||||
        # seem to use ifAlias though.
 | 
			
		||||
        # snmp::info #372 -> to make things even more complex some devices
 | 
			
		||||
        # have different behaviour depending on os version (nx-os 6 vs 7)
 | 
			
		||||
        # so we made this a function to allow overrides in more specific
 | 
			
		||||
        # modules
 | 
			
		||||
        my $lldp_desc = $lldp->lldp_lport_desc($port);
 | 
			
		||||
        my $desc      = $lldp_desc->{$port};
 | 
			
		||||
        # If cross reference is successful use it, otherwise stick with lldpRemLocalPortNum
 | 
			
		||||
 | 
			
		||||
        # If cross reference is successful use it, otherwise stick with
 | 
			
		||||
        # lldpRemLocalPortNum
 | 
			
		||||
        if ( $desc && exists $r_i_descr{$desc} ) {
 | 
			
		||||
            $port = $r_i_descr{$desc};
 | 
			
		||||
        }
 | 
			
		||||
@@ -141,7 +180,7 @@ sub lldp_ip {
 | 
			
		||||
 | 
			
		||||
    my %lldp_ip;
 | 
			
		||||
    foreach my $key ( keys %$rman_addr ) {
 | 
			
		||||
        my ( $index, $proto, $addr ) = _lldp_addr_index($key);
 | 
			
		||||
        my ( $index, $proto, $addr ) = $lldp->_lldp_addr_index($key);
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
        next unless $proto == 1;
 | 
			
		||||
        $lldp_ip{$index} = $addr;
 | 
			
		||||
@@ -157,7 +196,7 @@ sub lldp_ipv6 {
 | 
			
		||||
 | 
			
		||||
    my %lldp_ipv6;
 | 
			
		||||
    foreach my $key ( keys %$rman_addr ) {
 | 
			
		||||
        my ( $index, $proto, $addr ) = _lldp_addr_index($key);
 | 
			
		||||
        my ( $index, $proto, $addr ) = $lldp->_lldp_addr_index($key);
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
        next unless $proto == 2;
 | 
			
		||||
        $lldp_ipv6{$index} = $addr;
 | 
			
		||||
@@ -173,7 +212,7 @@ sub lldp_mac {
 | 
			
		||||
 | 
			
		||||
    my %lldp_ipv6;
 | 
			
		||||
    foreach my $key ( keys %$rman_addr ) {
 | 
			
		||||
        my ( $index, $proto, $addr ) = _lldp_addr_index($key);
 | 
			
		||||
        my ( $index, $proto, $addr ) = $lldp->_lldp_addr_index($key);
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
        next unless $proto == 6;
 | 
			
		||||
        $lldp_ipv6{$index} = $addr;
 | 
			
		||||
@@ -189,7 +228,7 @@ sub lldp_addr {
 | 
			
		||||
 | 
			
		||||
    my %lldp_ip;
 | 
			
		||||
    foreach my $key ( keys %$rman_addr ) {
 | 
			
		||||
        my ( $index, $proto, $addr ) = _lldp_addr_index($key);
 | 
			
		||||
        my ( $index, $proto, $addr ) = $lldp->_lldp_addr_index($key);
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
        $lldp_ip{$index} = $addr;
 | 
			
		||||
    }
 | 
			
		||||
@@ -209,7 +248,10 @@ sub lldp_port {
 | 
			
		||||
    foreach my $key ( sort keys %$pid ) {
 | 
			
		||||
        my $port = $pdesc->{$key};
 | 
			
		||||
        my $type = $ptype->{$key};
 | 
			
		||||
        if ( $type and $type eq 'interfaceName' ) {
 | 
			
		||||
        if (    $type
 | 
			
		||||
            and ( $type eq 'interfaceName' or $type eq 'local' )
 | 
			
		||||
            and ( defined $pid->{$key} and $pid->{$key} !~ /^\d+$/ ) )
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            # If the pid claims to be an interface name,
 | 
			
		||||
            # believe it.
 | 
			
		||||
@@ -222,8 +264,7 @@ sub lldp_port {
 | 
			
		||||
 | 
			
		||||
          # May need to format other types in the future, i.e. Network address
 | 
			
		||||
            if ( $type =~ /mac/ ) {
 | 
			
		||||
                $port = join( ':',
 | 
			
		||||
                    map { sprintf "%02x", $_ } unpack( 'C*', $port ) );
 | 
			
		||||
                $port = SNMP::Info::munge_mac($port)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -258,12 +299,13 @@ sub lldp_id {
 | 
			
		||||
 | 
			
		||||
        # May need to format other types in the future
 | 
			
		||||
        if ( $type =~ /mac/ ) {
 | 
			
		||||
            $id = join( ':', map { sprintf "%02x", $_ } unpack( 'C*', $id ) );
 | 
			
		||||
            $id = SNMP::Info::munge_mac($id)
 | 
			
		||||
        }
 | 
			
		||||
        elsif ( $type eq 'networkAddress' ) {
 | 
			
		||||
            if ( length( unpack( 'H*', $id ) ) == 10 ) {
 | 
			
		||||
 | 
			
		||||
                # IP address (first octet is sign, I guess)
 | 
			
		||||
                # IP address - first octet is IANA Address Family Number, need
 | 
			
		||||
                # walk with IPv6
 | 
			
		||||
                my @octets
 | 
			
		||||
                    = ( map { sprintf "%02x", $_ } unpack( 'C*', $id ) )
 | 
			
		||||
                    [ 1 .. 4 ];
 | 
			
		||||
@@ -299,7 +341,41 @@ sub lldp_cap {
 | 
			
		||||
    # 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 $oid
 | 
			
		||||
        = SNMP::translateObj( 'LLDP-MIB::lldpRemSysCapEnabled', 0, 1 ) || '';
 | 
			
		||||
    my $enums = (
 | 
			
		||||
        ( ref {} eq ref $SNMP::MIB{$oid}{'enums'} )
 | 
			
		||||
        ? $SNMP::MIB{$oid}{'enums'}
 | 
			
		||||
        : {}
 | 
			
		||||
    );
 | 
			
		||||
    my %r_enums = reverse %$enums;
 | 
			
		||||
 | 
			
		||||
    my %lldp_cap;
 | 
			
		||||
    foreach my $key ( keys %$lldp_caps ) {
 | 
			
		||||
        my $cap_bits = $lldp_caps->{$key};
 | 
			
		||||
        next unless $cap_bits;
 | 
			
		||||
 | 
			
		||||
        my $count = 0;
 | 
			
		||||
        foreach my $bit ( split //, $cap_bits ) {
 | 
			
		||||
            if ($bit) {
 | 
			
		||||
                push( @{ $lldp_cap{$key} }, $r_enums{$count} );
 | 
			
		||||
            }
 | 
			
		||||
            $count++;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return \%lldp_cap;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub lldp_media_cap {
 | 
			
		||||
    my $lldp    = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $lldp_caps = $lldp->lldp_rem_media_cap_spt($partial) || {};
 | 
			
		||||
 | 
			
		||||
    # Encoded as BITS which Perl Net-SNMP implementation doesn't seem to
 | 
			
		||||
    # be able to enumerate for us, so we have to get it from the MIB
 | 
			
		||||
    # and enumerate ourselves
 | 
			
		||||
    my $oid = SNMP::translateObj( 'lldpXMedRemCapCurrent', 0, 1 ) || '';
 | 
			
		||||
    my $enums = (
 | 
			
		||||
        ( ref {} eq ref $SNMP::MIB{$oid}{'enums'} )
 | 
			
		||||
        ? $SNMP::MIB{$oid}{'enums'}
 | 
			
		||||
@@ -344,11 +420,13 @@ sub lldp_cap {
 | 
			
		||||
# Break up the lldpRemManAddrTable INDEX into common index, protocol,
 | 
			
		||||
# and address.
 | 
			
		||||
sub _lldp_addr_index {
 | 
			
		||||
    my $idx    = shift;
 | 
			
		||||
    my @oids   = split( /\./, $idx );
 | 
			
		||||
    my $index  = join( '.', splice( @oids, 0, 3 ) );
 | 
			
		||||
    my $proto  = shift(@oids);
 | 
			
		||||
    shift(@oids) if scalar @oids > 4; # $length
 | 
			
		||||
    my $lldp = shift;
 | 
			
		||||
    my $idx  = shift;
 | 
			
		||||
 | 
			
		||||
    my @oids = split( /\./, $idx );
 | 
			
		||||
    my $index = join( '.', splice( @oids, 0, 3 ) );
 | 
			
		||||
    my $proto = shift(@oids);
 | 
			
		||||
    shift(@oids) if scalar @oids > 4;    # $length
 | 
			
		||||
 | 
			
		||||
    # IPv4
 | 
			
		||||
    if ( $proto == 1 ) {
 | 
			
		||||
@@ -358,7 +436,7 @@ sub _lldp_addr_index {
 | 
			
		||||
    # IPv6
 | 
			
		||||
    elsif ( $proto == 2 ) {
 | 
			
		||||
        return ( $index, $proto,
 | 
			
		||||
            join(':', unpack('(H4)*', pack('C*', @oids)) ) );
 | 
			
		||||
            join( ':', unpack( '(H4)*', pack( 'C*', @oids ) ) ) );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # MAC
 | 
			
		||||
@@ -435,13 +513,15 @@ None.
 | 
			
		||||
 | 
			
		||||
=item F<LLDP-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<LLDP-EXT-MED-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<LLDP-EXT-DOT1-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<LLDP-EXT-DOT3-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBAL METHODS
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar values from SNMP
 | 
			
		||||
 | 
			
		||||
@@ -567,6 +647,12 @@ Returns hash of arrays with each array containing the system capabilities
 | 
			
		||||
supported by the remote system.  Possible elements in the array are
 | 
			
		||||
enumerated from C<LldpSystemCapabilitiesMap>.
 | 
			
		||||
 | 
			
		||||
=item  $lldp->lldp_media_cap()
 | 
			
		||||
 | 
			
		||||
Returns hash of arrays with each array containing the media capabilities
 | 
			
		||||
supported by the remote system.  Possible elements in the array are
 | 
			
		||||
enumerated from C<LldpXMedCapabilities>.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 LLDP Remote Table (C<lldpRemTable>)
 | 
			
		||||
@@ -628,6 +714,65 @@ Nulls are removed before the value is returned.
 | 
			
		||||
 | 
			
		||||
(C<lldpRemSysDesc>)
 | 
			
		||||
 | 
			
		||||
=item $lldp->lldp_rem_hw_rev()
 | 
			
		||||
 | 
			
		||||
Returns the string value used to identify the hardware revision of the
 | 
			
		||||
remote system. Nulls are removed before the value is returned.
 | 
			
		||||
 | 
			
		||||
(C<lldpXMedRemHardwareRev>)
 | 
			
		||||
 | 
			
		||||
=item $lldp->lldp_rem_fw_rev()
 | 
			
		||||
 | 
			
		||||
Returns the string value used to identify the firmware revision of the
 | 
			
		||||
remote system. Nulls are removed before the value is returned.
 | 
			
		||||
 | 
			
		||||
(C<lldpXMedRemHardwareRev>)
 | 
			
		||||
 | 
			
		||||
=item $lldp->lldp_rem_sw_rev()
 | 
			
		||||
 | 
			
		||||
Returns the string value used to identify the software revision of the
 | 
			
		||||
remote system. Nulls are removed before the value is returned.
 | 
			
		||||
 | 
			
		||||
(C<lldpXMedRemSoftwareRev>)
 | 
			
		||||
 | 
			
		||||
=item $lldp->lldp_rem_serial()
 | 
			
		||||
 | 
			
		||||
Returns the string value used to identify the serial number of the
 | 
			
		||||
remote system. Nulls are removed before the value is returned.
 | 
			
		||||
 | 
			
		||||
(C<lldpXMedRemSerialNum>)
 | 
			
		||||
 | 
			
		||||
=item $lldp->lldp_rem_vendor()
 | 
			
		||||
 | 
			
		||||
Returns the string value used to identify the manufacturer of the
 | 
			
		||||
remote system. Nulls are removed before the value is returned.
 | 
			
		||||
 | 
			
		||||
(C<lldpXMedRemMfgName>)
 | 
			
		||||
 | 
			
		||||
=item $lldp->lldp_rem_asset()
 | 
			
		||||
 | 
			
		||||
Returns the string value used to identify the asset number of the
 | 
			
		||||
remote system. Nulls are removed before the value is returned.
 | 
			
		||||
 | 
			
		||||
(C<lldpXMedRemAssetID>)
 | 
			
		||||
 | 
			
		||||
=item $lldp->lldp_rem_model()
 | 
			
		||||
 | 
			
		||||
Returns the string value used to identify the model of the
 | 
			
		||||
remote system. Nulls are removed before the value is returned.
 | 
			
		||||
 | 
			
		||||
(C<lldpXMedRemModelName>)
 | 
			
		||||
 | 
			
		||||
=item  $lldp->lldp_rem_media_cap_spt()
 | 
			
		||||
 | 
			
		||||
Returns which media capabilities are supported on the remote system. Results
 | 
			
		||||
are munged into an ascii binary string, LSB.
 | 
			
		||||
 | 
			
		||||
=item  $lldp->lldp_rem_media_cap()
 | 
			
		||||
 | 
			
		||||
Returns which media capabilities are enabled on the remote system. Results
 | 
			
		||||
are munged into an ascii binary string, LSB.
 | 
			
		||||
 | 
			
		||||
=item  $lldp->lldp_rem_sys_cap()
 | 
			
		||||
 | 
			
		||||
Returns which system capabilities are enabled on the remote system.  Results
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer1 - SNMP Interface to Layer1 Devices
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
 | 
			
		||||
#
 | 
			
		||||
@@ -33,15 +32,16 @@
 | 
			
		||||
package SNMP::Info::Layer1;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer1::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::Layer1::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %PORTSTAT, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( %SNMP::Info::MIBS, 'SNMP-REPEATER-MIB' => 'rptrPortGroupIndex' );
 | 
			
		||||
 | 
			
		||||
@@ -49,7 +49,7 @@ $VERSION = '3.33';
 | 
			
		||||
    %SNMP::Info::GLOBALS,
 | 
			
		||||
    'ports_managed' => 'ifNumber',
 | 
			
		||||
    'rptr_slots'    => 'rptrGroupCapacity',
 | 
			
		||||
    'slots'         => 'rptrGroupCapacity'
 | 
			
		||||
    'slots'         => 'rptrGroupCapacity',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
@@ -86,7 +86,7 @@ sub ports {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# $l1->model() - Looks at sysObjectID which gives the oid of the system
 | 
			
		||||
#       name, contained in a propriatry MIB.
 | 
			
		||||
#       name, contained in a proprietary MIB.
 | 
			
		||||
sub model {
 | 
			
		||||
    my $l1    = shift;
 | 
			
		||||
    my $id    = $l1->id();
 | 
			
		||||
@@ -178,7 +178,7 @@ Max Baker
 | 
			
		||||
                          Debug       => 1,
 | 
			
		||||
                          DestHost    => 'myswitch',
 | 
			
		||||
                          Community   => 'public',
 | 
			
		||||
                          Version     => 1
 | 
			
		||||
                          Version     => 2
 | 
			
		||||
                        )
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
@@ -227,12 +227,9 @@ after determining a more specific class using the method above.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
MIBs required for L<SNMP::Info/"Required MIBs">
 | 
			
		||||
MIBs required for L<SNMP::Info/"REQUIREMENTS">
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
F<SNMP-REPEATER-MIB> needs to be extracted from
 | 
			
		||||
ftp://ftp.cisco.com/pub/mibs/v1/v1.tar.gz
 | 
			
		||||
See L<SNMP::Info/"REQUIREMENTS"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
@@ -278,7 +275,7 @@ Number of 'groups' in the Repeater MIB
 | 
			
		||||
 | 
			
		||||
=head2 Global Methods imported from SNMP::Info
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info/"GLOBALS"> for details.
 | 
			
		||||
See documentation in L<SNMP::Info/"USAGE"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
@@ -341,6 +338,6 @@ Group (slot) Number for given port.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info/"TABLE METHODS"> for details.
 | 
			
		||||
See documentation in L<SNMP::Info/"USAGE"> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer1::Allied
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
 | 
			
		||||
#
 | 
			
		||||
@@ -33,15 +32,16 @@
 | 
			
		||||
package SNMP::Info::Layer1::Allied;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer1;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer1::Allied::ISA       = qw/SNMP::Info::Layer1 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer1::Allied::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
# Set for No CDP
 | 
			
		||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, 'root_ip' => 'actualIPAddr', );
 | 
			
		||||
@@ -52,9 +52,14 @@ $VERSION = '3.33';
 | 
			
		||||
    'ati_up'     => 'linkTestLED',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MIBS = ( %SNMP::Info::Layer1::MIBS, 'ATI-MIB' => 'atiPortGroupIndex' );
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer1::MIBS,
 | 
			
		||||
    'ATI-MIB' => 'atiPortGroupIndex',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = ( %SNMP::Info::Layer1::MUNGE, );
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    %SNMP::Info::Layer1::MUNGE,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    return 'allied';
 | 
			
		||||
@@ -68,9 +73,10 @@ sub os_ver {
 | 
			
		||||
    my $allied = shift;
 | 
			
		||||
    my $descr  = $allied->description();
 | 
			
		||||
 | 
			
		||||
    if ( $descr =~ m/version (\d+\.\d+)/ ) {
 | 
			
		||||
    if ( defined ($descr) && $descr =~ m/version (\d+\.\d+)/ ) {
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
@@ -78,7 +84,7 @@ sub model {
 | 
			
		||||
 | 
			
		||||
    my $desc = $allied->description();
 | 
			
		||||
 | 
			
		||||
    if ( $desc =~ /(AT-\d{4}\S{1})/ ) {
 | 
			
		||||
    if ( defined ($desc) && $desc =~ /(AT-\d{4}\S{1})/ ) {
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer1::Asante
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
 | 
			
		||||
#
 | 
			
		||||
@@ -33,15 +32,16 @@
 | 
			
		||||
package SNMP::Info::Layer1::Asante;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer1;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer1::Asante::ISA       = qw/SNMP::Info::Layer1 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer1::Asante::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
# Set for No CDP
 | 
			
		||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, );
 | 
			
		||||
@@ -81,9 +81,10 @@ sub os_ver {
 | 
			
		||||
    my $asante = shift;
 | 
			
		||||
    my $descr  = $asante->description();
 | 
			
		||||
 | 
			
		||||
    if ( $descr =~ /software v(\d+\.\d+)/ ) {
 | 
			
		||||
    if ( defined ($descr) && $descr =~ /software v(\d+\.\d+)/ ) {
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
@@ -94,7 +95,7 @@ sub model {
 | 
			
		||||
    my $asante = shift;
 | 
			
		||||
 | 
			
		||||
    my $id    = $asante->id();
 | 
			
		||||
    my $model = &SNMP::translateObj($id);
 | 
			
		||||
    my $model = SNMP::translateObj($id);
 | 
			
		||||
 | 
			
		||||
    return $model;
 | 
			
		||||
}
 | 
			
		||||
@@ -108,8 +109,8 @@ sub i_up {
 | 
			
		||||
    my $i_up = {};
 | 
			
		||||
    foreach my $port ( keys %$asante_up ) {
 | 
			
		||||
        my $up = $asante_up->{$port};
 | 
			
		||||
        $i_up->{$port} = 'down' if $up =~ /on/;
 | 
			
		||||
        $i_up->{$port} = 'up'   if $up =~ /off/;
 | 
			
		||||
        $i_up->{$port} = 'down' if $up =~ /off/;
 | 
			
		||||
        $i_up->{$port} = 'up'   if $up =~ /on/;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $i_up;
 | 
			
		||||
@@ -149,7 +150,7 @@ sub i_name {
 | 
			
		||||
    my $asante  = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $i_name = $asante->orig_i_descr($partial) || {};
 | 
			
		||||
    my $i_name = $asante->orig_i_description($partial) || {};
 | 
			
		||||
 | 
			
		||||
    my %i_name;
 | 
			
		||||
 | 
			
		||||
@@ -187,7 +188,7 @@ Max Baker
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Provides abstraction to the configuration information obtainable from a 
 | 
			
		||||
Provides abstraction to the configuration information obtainable from an
 | 
			
		||||
Asante device through SNMP.
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
@@ -226,7 +227,7 @@ Culls software version from description()
 | 
			
		||||
 | 
			
		||||
=item $asante->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'asante' :)
 | 
			
		||||
Returns 'asante'
 | 
			
		||||
 | 
			
		||||
=item $asante->model()
 | 
			
		||||
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer1::Bayhub
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Eric Miller, Max Baker
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,18 +30,19 @@
 | 
			
		||||
package SNMP::Info::Layer1::Bayhub;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::SONMP;
 | 
			
		||||
use SNMP::Info::NortelStack;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer1::Bayhub::ISA
 | 
			
		||||
    = qw/SNMP::Info::SONMP SNMP::Info::NortelStack  SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
    = qw/SNMP::Info::SONMP SNMP::Info::NortelStack SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer1::Bayhub::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
@@ -505,11 +505,6 @@ Provides abstraction to the configuration information obtainable from a
 | 
			
		||||
Bay hub device through SNMP.  Also provides device MAC to port mapping through
 | 
			
		||||
the proprietary MIB.
 | 
			
		||||
 | 
			
		||||
For speed or debugging purposes you can call the subclass directly, but not
 | 
			
		||||
after determining a more specific class using the method above. 
 | 
			
		||||
 | 
			
		||||
my $bayhub = new SNMP::Info::Layer1::Bayhub(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
							
								
								
									
										640
									
								
								lib/SNMP/Info/Layer1/Cyclades.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										640
									
								
								lib/SNMP/Info/Layer1/Cyclades.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,640 @@
 | 
			
		||||
# SNMP::Info::Layer1::Cyclades
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2018 Eric Miller
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
# modification, are permitted provided that the following conditions are met:
 | 
			
		||||
#
 | 
			
		||||
#     * Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
#       this list of conditions and the following disclaimer.
 | 
			
		||||
#     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
#       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
#       documentation and/or other materials provided with the distribution.
 | 
			
		||||
#     * Neither the name of the University of California, Santa Cruz nor the
 | 
			
		||||
#       names of its contributors may be used to endorse or promote products
 | 
			
		||||
#       derived from this software without specific prior written permission.
 | 
			
		||||
#
 | 
			
		||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
			
		||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
package SNMP::Info::Layer1::Cyclades;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer1;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer1::Cyclades::ISA       = qw/SNMP::Info::Layer1 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer1::Cyclades::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $AUTOLOAD);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer1::MIBS,
 | 
			
		||||
    'CYCLADES-ACS-SYS-MIB'    => 'cyACSversion',
 | 
			
		||||
    'CYCLADES-ACS5K-SYS-MIB'  => 'cyACS5Kversion',
 | 
			
		||||
    'CYCLADES-ACS-CONF-MIB'   => 'cyACSConf',
 | 
			
		||||
    'CYCLADES-ACS5K-CONF-MIB' => 'cyACS5KConf',
 | 
			
		||||
    'CYCLADES-ACS-INFO-MIB'   => 'cyACSInfo',
 | 
			
		||||
    'CYCLADES-ACS5K-INFO-MIB' => 'cyACS5KInfo',
 | 
			
		||||
    'ACS-MIB'                 => 'acs6016',
 | 
			
		||||
    'ACS8000-MIB'             => 'acs8048',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
 | 
			
		||||
    %SNMP::Info::Layer1::GLOBALS,
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS-SYS-MIB
 | 
			
		||||
    'cy_os_ver'     => 'cyACSversion',
 | 
			
		||||
    'cy_model'      => 'cyACSpname',
 | 
			
		||||
    'cy_serial'     => 'cyACSDevId',
 | 
			
		||||
    'cy_ps1_status' => 'cyACSPw1',
 | 
			
		||||
    'cy_ps2_status' => 'cyACSPw2',
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS-CONF-MIB
 | 
			
		||||
    'cy_root_ip' => 'CYCLADES_ACS_CONF_MIB__cyEthIPaddr',
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS5K-SYS-MIB
 | 
			
		||||
    'cy5k_os_ver'     => 'cyACS5Kversion',
 | 
			
		||||
    'cy5k_model'      => 'cyACS5Kpname',
 | 
			
		||||
    'cy5k_serial'     => 'cyACS5KDevId',
 | 
			
		||||
    'cy5k_ps1_status' => 'cyACS5KPw1',
 | 
			
		||||
    'cy5k_ps2_status' => 'cyACS5KPw2',
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS5K-CONF-MIB
 | 
			
		||||
    'cy5k_root_ip'   => 'CYCLADES_ACS5K_CONF_MIB__cyEthIPaddr',
 | 
			
		||||
 | 
			
		||||
    # ACS-MIB
 | 
			
		||||
    'acs_os_ver'     => 'ACS_MIB__acsFirmwareVersion',
 | 
			
		||||
    'acs_model'      => 'ACS_MIB__acsProductModel',
 | 
			
		||||
    'acs_serial'     => 'ACS_MIB__acsSerialNumber',
 | 
			
		||||
    'acs_ps1_status' => 'ACS_MIB__acsPowerSupplyStatePw1',
 | 
			
		||||
    'acs_ps2_status' => 'ACS_MIB__acsPowerSupplyStatePw2',
 | 
			
		||||
 | 
			
		||||
    # ACS8000-MIB
 | 
			
		||||
    'acs8k_os_ver'     => 'ACS8000_MIB__acsFirmwareVersion',
 | 
			
		||||
    'acs8k_model'      => 'ACS8000_MIB__acsProductModel',
 | 
			
		||||
    'acs8k_serial'     => 'ACS8000_MIB__acsSerialNumber',
 | 
			
		||||
    'acs8k_ps1_status' => 'ACS8000_MIB__acsPowerSupplyStatePw1',
 | 
			
		||||
    'acs8k_ps2_status' => 'ACS8000_MIB__acsPowerSupplyStatePw2',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer1::FUNCS,
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS-INFO-MIB::cyInfoSerialTable
 | 
			
		||||
    'cy_port_tty'   => 'CYCLADES_ACS_INFO_MIB__cyISPortTty',
 | 
			
		||||
    'cy_port_name'  => 'CYCLADES_ACS_INFO_MIB__cyISPortName',
 | 
			
		||||
    'cy_port_speed' => 'CYCLADES_ACS_INFO_MIB__cyISPortSpeed',
 | 
			
		||||
    'cy_port_cd'    => 'CYCLADES_ACS_INFO_MIB__cyISPortSigCD',
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS-CONF-MIB::cySerialPortTable
 | 
			
		||||
    'cy_port_socket' => 'CYCLADES_ACS_CONF_MIB__cySPortSocketPort',
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS5K-INFO-MIB::cyInfoSerialTable
 | 
			
		||||
    'cy5k_port_tty'   => 'CYCLADES_ACS5K_INFO_MIB__cyISPortTty',
 | 
			
		||||
    'cy5k_port_name'  => 'CYCLADES_ACS5K_INFO_MIB__cyISPortName',
 | 
			
		||||
    'cy5k_port_speed' => 'CYCLADES_ACS5K_INFO_MIB__cyISPortSpeed',
 | 
			
		||||
    'cy5k_port_cd'    => 'CYCLADES_ACS5K_INFO_MIB__cyISPortSigCD',
 | 
			
		||||
 | 
			
		||||
    # CYCLADES-ACS5K-CONF-MIB::cySerialPortTable
 | 
			
		||||
    'cy5k_port_socket' => 'CYCLADES_ACS5K_CONF_MIB__cySPortSocketPort',
 | 
			
		||||
 | 
			
		||||
    # ACS-MIB::acsSerialPortTable
 | 
			
		||||
    'acs_port_tty'   => 'ACS_MIB__acsSerialPortTableDeviceName',
 | 
			
		||||
    'acs_port_name'  => 'ACS_MIB__acsSerialPortTableName',
 | 
			
		||||
    'acs_port_speed' => 'ACS_MIB__acsSerialPortTableComSpeed',
 | 
			
		||||
    'acs_port_cd'    => 'ACS_MIB__acsSerialPortTableSignalStateDCD',
 | 
			
		||||
 | 
			
		||||
    # Equivalent to cySPortSocketPort doesn't exist in ACS-MIB
 | 
			
		||||
    # Use 'acsSerialPortTableDeviceName' as an equivalent, it just needs
 | 
			
		||||
    # to be unique so that we can differentiate between the index in the
 | 
			
		||||
    # acsSerialPortTable from ifIndex which are both integers
 | 
			
		||||
    # ACS-MIB::acsSerialPortTableEntry
 | 
			
		||||
    'acs_port_socket' => 'ACS_MIB__acsSerialPortTableDeviceName',
 | 
			
		||||
 | 
			
		||||
    # ACS8000-MIB::acsSerialPortTable
 | 
			
		||||
    'acs8k_port_tty'   => 'ACS8000_MIB__acsSerialPortTableDeviceName',
 | 
			
		||||
    'acs8k_port_name'  => 'ACS8000_MIB__acsSerialPortTableName',
 | 
			
		||||
    'acs8k_port_speed' => 'ACS8000_MIB__acsSerialPortTableComSpeed',
 | 
			
		||||
    'acs8k_port_cd'    => 'ACS8000_MIB__acsSerialPortTableSignalStateDCD',
 | 
			
		||||
 | 
			
		||||
    # Equivalent to cySPortSocketPort doesn't exist in ACS-MIB
 | 
			
		||||
    # Use 'acsSerialPortTableDeviceName' as an equivalent, it just needs
 | 
			
		||||
    # to be unique so that we can differentiate between the index in the
 | 
			
		||||
    # acsSerialPortTable from ifIndex which are both integers
 | 
			
		||||
    # ACS8000-MIB::acsSerialPortTableEntry
 | 
			
		||||
    'acs8k_port_socket' => 'ACS8000_MIB__acsSerialPortTableDeviceName',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = ( %SNMP::Info::Layer1::MUNGE, );
 | 
			
		||||
 | 
			
		||||
# These devices don't have a FDB and we probably don't want to poll for ARP
 | 
			
		||||
# cache so turn off reported L2/L3.
 | 
			
		||||
sub layers {
 | 
			
		||||
    return '01000001';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os {
 | 
			
		||||
    return 'avocent';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Use "short circuit" to return the first MIB instance that returns data to
 | 
			
		||||
# reduce network communications
 | 
			
		||||
# We'll try newest (acs*) first assuming those are most likely deployed
 | 
			
		||||
sub os_ver {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
 | 
			
		||||
    return
 | 
			
		||||
           $cyclades->acs_os_ver()
 | 
			
		||||
        || $cyclades->acs8k_os_ver()
 | 
			
		||||
        || $cyclades->cy5k_os_ver()
 | 
			
		||||
        || $cyclades->cy_os_ver()
 | 
			
		||||
        || undef;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    return 'vertiv';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
 | 
			
		||||
    my $model
 | 
			
		||||
        = $cyclades->acs_model()
 | 
			
		||||
        || $cyclades->acs8k_model()
 | 
			
		||||
        || $cyclades->cy5k_model()
 | 
			
		||||
        || $cyclades->cy_model()
 | 
			
		||||
        || undef;
 | 
			
		||||
 | 
			
		||||
    return lc($model) if ( defined $model );
 | 
			
		||||
 | 
			
		||||
    my $id   = $cyclades->id();
 | 
			
		||||
    my $prod = SNMP::translateObj($id);
 | 
			
		||||
 | 
			
		||||
    return $prod || $id;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub serial {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
 | 
			
		||||
    return
 | 
			
		||||
           $cyclades->acs_serial()
 | 
			
		||||
        || $cyclades->acs8k_serial()
 | 
			
		||||
        || $cyclades->cy5k_serial()
 | 
			
		||||
        || $cyclades->cy_serial()
 | 
			
		||||
        || undef;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub root_ip {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
 | 
			
		||||
    return
 | 
			
		||||
           $cyclades->cy5k_root_ip()
 | 
			
		||||
        || $cyclades->cy_root_ip()
 | 
			
		||||
        || undef;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub ps1_status {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
 | 
			
		||||
    return
 | 
			
		||||
           $cyclades->acs_ps1_status()
 | 
			
		||||
        || $cyclades->acs8k_ps1_status()
 | 
			
		||||
        || $cyclades->cy5k_ps1_status()
 | 
			
		||||
        || $cyclades->cy_ps1_status()
 | 
			
		||||
        || undef;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub ps2_status {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
 | 
			
		||||
    return
 | 
			
		||||
           $cyclades->acs_ps2_status()
 | 
			
		||||
        || $cyclades->acs8k_ps2_status()
 | 
			
		||||
        || $cyclades->cy5k_ps2_status()
 | 
			
		||||
        || $cyclades->cy_ps2_status()
 | 
			
		||||
        || undef;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Extend interface methods to include serial ports
 | 
			
		||||
#
 | 
			
		||||
# Partials don't really help in this class, but implemented
 | 
			
		||||
# for consistency
 | 
			
		||||
 | 
			
		||||
sub i_index {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $orig_index = $cyclades->orig_i_index($partial) || {};
 | 
			
		||||
    my $cy_index
 | 
			
		||||
        = $cyclades->acs_port_socket()
 | 
			
		||||
        || $cyclades->acs8k_port_socket()
 | 
			
		||||
        || $cyclades->cy5k_port_socket()
 | 
			
		||||
        || $cyclades->cy_port_socket()
 | 
			
		||||
        || {};
 | 
			
		||||
 | 
			
		||||
    my %i_index;
 | 
			
		||||
    foreach my $iid ( keys %$orig_index ) {
 | 
			
		||||
        my $index = $orig_index->{$iid};
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
 | 
			
		||||
        $i_index{$iid} = $index;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Use alternative labeling system for the serial port, listening socket
 | 
			
		||||
    # to avoid conflicts with ifIndex.
 | 
			
		||||
    foreach my $iid ( keys %$cy_index ) {
 | 
			
		||||
        my $index = $cy_index->{$iid};
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
        next if ( defined $partial and $index !~ /^$partial$/ );
 | 
			
		||||
 | 
			
		||||
        $i_index{$index} = $index;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return \%i_index;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub interfaces {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $i_descr = $cyclades->orig_i_description($partial) || {};
 | 
			
		||||
    my $cy_index
 | 
			
		||||
        = $cyclades->acs_port_socket()
 | 
			
		||||
        || $cyclades->acs8k_port_socket()
 | 
			
		||||
        || $cyclades->cy5k_port_socket()
 | 
			
		||||
        || $cyclades->cy_port_socket()
 | 
			
		||||
        || {};
 | 
			
		||||
    my $cy_p_tty
 | 
			
		||||
        = $cyclades->acs_port_tty()
 | 
			
		||||
        || $cyclades->acs8k_port_tty()
 | 
			
		||||
        || $cyclades->cy5k_port_tty()
 | 
			
		||||
        || $cyclades->cy_port_tty()
 | 
			
		||||
        || {};
 | 
			
		||||
 | 
			
		||||
    my %if;
 | 
			
		||||
    foreach my $iid ( keys %$i_descr ) {
 | 
			
		||||
        my $descr = $i_descr->{$iid};
 | 
			
		||||
        next unless defined $descr;
 | 
			
		||||
 | 
			
		||||
        $if{$iid} = $descr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    foreach my $iid ( keys %$cy_p_tty ) {
 | 
			
		||||
        my $index = $cy_index->{$iid};
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
        next if ( defined $partial and $index !~ /^$partial$/ );
 | 
			
		||||
        my $name = $cy_p_tty->{$iid};
 | 
			
		||||
        next unless defined $name;
 | 
			
		||||
 | 
			
		||||
        $if{$index} = $name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return \%if;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_speed {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $i_speed    = $cyclades->orig_i_speed($partial) || {};
 | 
			
		||||
    my $cy_index
 | 
			
		||||
        = $cyclades->acs_port_socket()
 | 
			
		||||
        || $cyclades->acs8k_port_socket()
 | 
			
		||||
        || $cyclades->cy5k_port_socket()
 | 
			
		||||
        || $cyclades->cy_port_socket()
 | 
			
		||||
        || {};
 | 
			
		||||
    my $cy_p_speed
 | 
			
		||||
        = $cyclades->acs_port_speed()
 | 
			
		||||
        || $cyclades->acs8k_port_speed()
 | 
			
		||||
        || $cyclades->cy5k_port_speed()
 | 
			
		||||
        || $cyclades->cy_port_speed()
 | 
			
		||||
        || {};
 | 
			
		||||
 | 
			
		||||
    my %i_speed;
 | 
			
		||||
    foreach my $iid ( keys %$i_speed ) {
 | 
			
		||||
        my $speed = $i_speed->{$iid};
 | 
			
		||||
        next unless defined $speed;
 | 
			
		||||
 | 
			
		||||
        $i_speed{$iid} = $speed;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    foreach my $iid ( keys %$cy_p_speed ) {
 | 
			
		||||
        my $index = $cy_index->{$iid};
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
        next if ( defined $partial and $index !~ /^$partial$/ );
 | 
			
		||||
        my $speed = $cy_p_speed->{$iid};
 | 
			
		||||
        next unless defined $speed;
 | 
			
		||||
 | 
			
		||||
        $i_speed{$index} = $speed;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return \%i_speed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_up {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $i_up     = $cyclades->orig_i_up($partial) || {};
 | 
			
		||||
    my $cy_index
 | 
			
		||||
        = $cyclades->acs_port_socket()
 | 
			
		||||
        || $cyclades->acs8k_port_socket()
 | 
			
		||||
        || $cyclades->cy5k_port_socket()
 | 
			
		||||
        || $cyclades->cy_port_socket()
 | 
			
		||||
        || {};
 | 
			
		||||
    my $cy_p_up
 | 
			
		||||
        = $cyclades->acs_port_cd()
 | 
			
		||||
        || $cyclades->acs8k_port_cd()
 | 
			
		||||
        || $cyclades->cy5k_port_cd()
 | 
			
		||||
        || $cyclades->cy_port_cd()
 | 
			
		||||
        || {};
 | 
			
		||||
 | 
			
		||||
    my %i_up;
 | 
			
		||||
    foreach my $iid ( keys %$i_up ) {
 | 
			
		||||
        my $up = $i_up->{$iid};
 | 
			
		||||
        next unless defined $up;
 | 
			
		||||
 | 
			
		||||
        $i_up{$iid} = $up;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    foreach my $iid ( keys %$cy_p_up ) {
 | 
			
		||||
        my $index = $cy_index->{$iid};
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
        next if ( defined $partial and $index !~ /^$partial$/ );
 | 
			
		||||
        my $up = $cy_p_up->{$iid};
 | 
			
		||||
        next unless defined $up;
 | 
			
		||||
 | 
			
		||||
        $i_up{$index} = $up;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return \%i_up;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_description {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $i_desc    = $cyclades->orig_i_description($partial) || {};
 | 
			
		||||
    my $cy_index
 | 
			
		||||
        = $cyclades->acs_port_socket()
 | 
			
		||||
        || $cyclades->acs8k_port_socket()
 | 
			
		||||
        || $cyclades->cy5k_port_socket()
 | 
			
		||||
        || $cyclades->cy_port_socket()
 | 
			
		||||
        || {};
 | 
			
		||||
    my $cy_p_desc
 | 
			
		||||
        = $cyclades->acs_port_name()
 | 
			
		||||
        || $cyclades->acs8k_port_name()
 | 
			
		||||
        || $cyclades->cy5k_port_name()
 | 
			
		||||
        || $cyclades->cy_port_name()
 | 
			
		||||
        || {};
 | 
			
		||||
 | 
			
		||||
    my %descr;
 | 
			
		||||
    foreach my $iid ( keys %$i_desc ) {
 | 
			
		||||
        my $desc = $i_desc->{$iid};
 | 
			
		||||
        next unless defined $desc;
 | 
			
		||||
 | 
			
		||||
        $descr{$iid} = $desc;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    foreach my $iid ( keys %$cy_p_desc ) {
 | 
			
		||||
        my $index = $cy_index->{$iid};
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
        next if ( defined $partial and $index !~ /^$partial$/ );
 | 
			
		||||
        my $desc = $cy_p_desc->{$iid};
 | 
			
		||||
        next unless defined $desc;
 | 
			
		||||
 | 
			
		||||
        $descr{$index} = $desc;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return \%descr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_name {
 | 
			
		||||
    my $cyclades = shift;
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $i_name    = $cyclades->orig_i_name($partial) || {};
 | 
			
		||||
    my $cy_index
 | 
			
		||||
        = $cyclades->acs_port_socket()
 | 
			
		||||
        || $cyclades->acs8k_port_socket()
 | 
			
		||||
        || $cyclades->cy5k_port_socket()
 | 
			
		||||
        || $cyclades->cy_port_socket()
 | 
			
		||||
        || {};
 | 
			
		||||
    my $cy_p_desc
 | 
			
		||||
        = $cyclades->acs_port_name()
 | 
			
		||||
        || $cyclades->acs8k_port_name()
 | 
			
		||||
        || $cyclades->cy5k_port_name()
 | 
			
		||||
        || $cyclades->cy_port_name()
 | 
			
		||||
        || {};
 | 
			
		||||
 | 
			
		||||
    my %i_name;
 | 
			
		||||
    foreach my $iid ( keys %$i_name ) {
 | 
			
		||||
        my $name = $i_name->{$iid};
 | 
			
		||||
        next unless defined $name;
 | 
			
		||||
 | 
			
		||||
        $i_name{$iid} = $name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    foreach my $iid ( keys %$cy_p_desc ) {
 | 
			
		||||
        my $index = $cy_index->{$iid};
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
        next if ( defined $partial and $index !~ /^$partial$/ );
 | 
			
		||||
        my $name = $cy_p_desc->{$iid};
 | 
			
		||||
        next unless defined $name;
 | 
			
		||||
 | 
			
		||||
        $i_name{$index} = $name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return \%i_name;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer1::Cyclades - SNMP Interface to Cyclades/Avocent terminal
 | 
			
		||||
servers
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
Eric Miller
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
    #Let SNMP::Info determine the correct subclass for you.
 | 
			
		||||
 | 
			
		||||
    my $cyclades = 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 = $cyclades->class();
 | 
			
		||||
    print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Provides abstraction to the configuration information obtainable from a
 | 
			
		||||
Cyclades/Avocent device through SNMP.
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer1
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<ACS-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<ACS6000-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CYCLADES-ACS-SYS-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CYCLADES-ACS-CONF-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CYCLADES-ACS-INFO-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CYCLADES-ACS5K-SYS-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CYCLADES-ACS5K-CONF-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CYCLADES-ACS5K-INFO-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Inherited MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer1/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $cyclades->os_ver()
 | 
			
		||||
 | 
			
		||||
(C<acsFirmwareVersion>), (C<cyACS5Kversion>), or (C<cyACSversion>)
 | 
			
		||||
 | 
			
		||||
=item $cyclades->serial()
 | 
			
		||||
 | 
			
		||||
(C<acsSerialNumber>), (C<cyACS5KDevId>), or (C<cyACSDevId>)
 | 
			
		||||
 | 
			
		||||
=item $cyclades->root_ip()
 | 
			
		||||
 | 
			
		||||
(C<cyEthIPaddr>)
 | 
			
		||||
 | 
			
		||||
=item $cyclades->ps1_status()
 | 
			
		||||
 | 
			
		||||
(C<acsPowerSupplyStatePw1>), (C<cyACS5KPw1>), or (C<cyACSPw1>)
 | 
			
		||||
 | 
			
		||||
=item $cyclades->ps2_status()
 | 
			
		||||
 | 
			
		||||
(C<acsPowerSupplyStatePw2>), (C<cyACS5KPw2>), or (C<cyACSPw2>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Overrides
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $cyclades->layers()
 | 
			
		||||
 | 
			
		||||
Returns 01000001.  These devices don't have a FDB and we probably don't want
 | 
			
		||||
to poll for an ARP cache so turn off reported Layer 2 and Layer 3.
 | 
			
		||||
 | 
			
		||||
=item $cyclades->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'vertiv'
 | 
			
		||||
 | 
			
		||||
=item $cyclades->os()
 | 
			
		||||
 | 
			
		||||
Returns 'avocent'
 | 
			
		||||
 | 
			
		||||
=item $cyclades->model()
 | 
			
		||||
 | 
			
		||||
Returns lower case (C<cyACSpname>) or (C<acsProductModel>) if it exists
 | 
			
		||||
otherwise tries to reference $cyclades->id() to one of the MIBs listed above
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Layer1
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer1/"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 $cyclades->i_index()
 | 
			
		||||
 | 
			
		||||
Returns reference to map of IIDs to Interface index.
 | 
			
		||||
 | 
			
		||||
Extended to include serial ports.  Serial ports are indexed with the
 | 
			
		||||
alternative labeling system for the serial port, either the listening socket
 | 
			
		||||
port C<cySPortSocketPort> or C<acsSerialPortTableDeviceName> name to avoid
 | 
			
		||||
conflicts with C<ifIndex>.
 | 
			
		||||
 | 
			
		||||
=item $cyclades->interfaces()
 | 
			
		||||
 | 
			
		||||
Returns reference to map of IIDs to physical ports.  Extended to include
 | 
			
		||||
serial ports, C<acsSerialPortTableDeviceName> or C<cyISPortTty>.
 | 
			
		||||
 | 
			
		||||
=item $cyclades->i_speed()
 | 
			
		||||
 | 
			
		||||
Returns interface speed.  Extended to include serial ports,
 | 
			
		||||
C<acsSerialPortTableComSpeed> or C<cyISPortSpeed>.
 | 
			
		||||
 | 
			
		||||
=item $cyclades->i_up()
 | 
			
		||||
 | 
			
		||||
Returns link status for each port.  Extended to include serial ports,
 | 
			
		||||
C<acsSerialPortTableSignalStateDCD> or C<cyISPortSigCD>.
 | 
			
		||||
 | 
			
		||||
=item $cyclades->i_description()
 | 
			
		||||
 | 
			
		||||
Returns description of each port.  Extended to include serial ports,
 | 
			
		||||
C<acsSerialPortTableName> or C<cyISPortName>.
 | 
			
		||||
 | 
			
		||||
=item $cyclades->i_name()
 | 
			
		||||
 | 
			
		||||
Returns name of each port.  Extended to include serial ports,
 | 
			
		||||
C<acsSerialPortTableName> or C<cyISPortName>.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer1
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer1/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer1::S3000
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Eric Miller
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,15 +30,16 @@
 | 
			
		||||
package SNMP::Info::Layer1::S3000;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer1::S3000::ISA       = qw/SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer1::S3000::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
@@ -386,11 +386,6 @@ Provides abstraction to the configuration information obtainable from a
 | 
			
		||||
Bay hub device through SNMP.  Also provides device MAC to port mapping through
 | 
			
		||||
the proprietary MIB.
 | 
			
		||||
 | 
			
		||||
For speed or debugging purposes you can call the subclass directly, but not
 | 
			
		||||
after determining a more specific class using the method above. 
 | 
			
		||||
 | 
			
		||||
my $s3000 = new SNMP::Info::Layer1::S3000(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer2 - SNMP Interface to Layer2 Devices
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Max Baker -- All changes from Version 0.7 on
 | 
			
		||||
#
 | 
			
		||||
@@ -33,30 +32,33 @@
 | 
			
		||||
package SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
use SNMP::Info::Bridge;
 | 
			
		||||
use SNMP::Info::Entity;
 | 
			
		||||
use SNMP::Info::PowerEthernet;
 | 
			
		||||
use SNMP::Info::LLDP;
 | 
			
		||||
use SNMP::Info::DocsisHE;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::ISA
 | 
			
		||||
    = qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::Entity SNMP::Info::PowerEthernet SNMP::Info::LLDP Exporter/;
 | 
			
		||||
    = qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::Entity SNMP::Info::PowerEthernet SNMP::Info::LLDP SNMP::Info::DocsisHE Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %PORTSTAT, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,         %SNMP::Info::Bridge::MIBS,
 | 
			
		||||
    %SNMP::Info::Entity::MIBS, %SNMP::Info::PowerEthernet::MIBS,
 | 
			
		||||
    %SNMP::Info::LLDP::MIBS,
 | 
			
		||||
    %SNMP::Info::LLDP::MIBS,   %SNMP::Info::DocsisHE::MIBS,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::GLOBALS,
 | 
			
		||||
    %SNMP::Info::Bridge::GLOBALS,
 | 
			
		||||
    %SNMP::Info::DocsisHE::GLOBALS,
 | 
			
		||||
    %SNMP::Info::Entity::GLOBALS,
 | 
			
		||||
    %SNMP::Info::PowerEthernet::GLOBALS,
 | 
			
		||||
    %SNMP::Info::LLDP::GLOBALS,
 | 
			
		||||
@@ -67,7 +69,7 @@ $VERSION = '3.33';
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::FUNCS,         %SNMP::Info::Bridge::FUNCS,
 | 
			
		||||
    %SNMP::Info::Entity::FUNCS, %SNMP::Info::PowerEthernet::FUNCS,
 | 
			
		||||
    %SNMP::Info::LLDP::FUNCS,
 | 
			
		||||
    %SNMP::Info::LLDP::FUNCS,   %SNMP::Info::DocsisHE::FUNCS,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
@@ -75,6 +77,7 @@ $VERSION = '3.33';
 | 
			
		||||
    # Inherit all the built in munging
 | 
			
		||||
    %SNMP::Info::MUNGE,
 | 
			
		||||
    %SNMP::Info::Bridge::MUNGE,
 | 
			
		||||
    %SNMP::Info::DocsisHE::MUNGE,
 | 
			
		||||
    %SNMP::Info::Entity::MUNGE,
 | 
			
		||||
    %SNMP::Info::PowerEthernet::MUNGE,
 | 
			
		||||
    %SNMP::Info::LLDP::MUNGE,
 | 
			
		||||
@@ -83,7 +86,7 @@ $VERSION = '3.33';
 | 
			
		||||
# Method OverRides
 | 
			
		||||
 | 
			
		||||
# $l2->model() - Looks at sysObjectID which gives the oid of the system
 | 
			
		||||
#       name, contained in a propriatry MIB.
 | 
			
		||||
#       name, contained in a proprietary MIB.
 | 
			
		||||
sub model {
 | 
			
		||||
    my $l2    = shift;
 | 
			
		||||
    my $id    = $l2->id();
 | 
			
		||||
@@ -102,8 +105,8 @@ sub model {
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    my $l2    = shift;
 | 
			
		||||
    my $model = $l2->model();
 | 
			
		||||
    my $descr = $l2->description();
 | 
			
		||||
    my $model = $l2->model() || '';
 | 
			
		||||
    my $descr = $l2->description() || '';
 | 
			
		||||
 | 
			
		||||
    if ( $model =~ /hp/i or $descr =~ /\bhp\b/i ) {
 | 
			
		||||
        return 'hp';
 | 
			
		||||
@@ -118,24 +121,18 @@ sub vendor {
 | 
			
		||||
sub serial {
 | 
			
		||||
    my $l2 = shift;
 | 
			
		||||
 | 
			
		||||
    my $serial1  = $l2->serial1();
 | 
			
		||||
    my $e_descr  = $l2->e_descr() || {};
 | 
			
		||||
    my $e_serial = $l2->e_serial() || {};
 | 
			
		||||
 | 
			
		||||
    my $serial2 = $e_serial->{1} || undef;
 | 
			
		||||
    my $chassis = $e_descr->{1}  || undef;
 | 
			
		||||
 | 
			
		||||
    # precedence
 | 
			
		||||
    #   serial2,chassis parse,serial1
 | 
			
		||||
    return $serial2 if ( defined $serial2 and $serial2 !~ /^\s*$/ );
 | 
			
		||||
 | 
			
		||||
    if ( defined $chassis and $chassis =~ /serial#?:\s*([a-z0-9]+)/i ) {
 | 
			
		||||
        return $1;
 | 
			
		||||
    my $entity_serial = $l2->entity_derived_serial();
 | 
			
		||||
    if ( defined $entity_serial and $entity_serial !~ /^\s*$/ ){
 | 
			
		||||
        return $entity_serial;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ );
 | 
			
		||||
    my $serial1  = $l2->serial1();
 | 
			
		||||
    if ( defined $serial1 and $serial1 !~ /^\s*$/ ) {
 | 
			
		||||
        return $serial1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub interfaces {
 | 
			
		||||
@@ -148,15 +145,25 @@ sub interfaces {
 | 
			
		||||
    # 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 ) {
 | 
			
		||||
    my (%seen, %first_seen_as);
 | 
			
		||||
    foreach my $iid ( sort keys %$i_descr ) {
 | 
			
		||||
        my $port = $i_descr->{$iid};
 | 
			
		||||
        next unless defined $port;
 | 
			
		||||
 | 
			
		||||
        $port = SNMP::Info::munge_null($port);
 | 
			
		||||
        $port =~ s/^\s+//; $port =~ s/\s+$//;
 | 
			
		||||
        next unless length $port;
 | 
			
		||||
 | 
			
		||||
        if ( $seen{$port}++ ) {
 | 
			
		||||
            # (#320) also fixup the port this is a duplicate of
 | 
			
		||||
            $interfaces->{ $first_seen_as{$port} }
 | 
			
		||||
              = sprintf( "%s (%d)", $port, $first_seen_as{$port} );
 | 
			
		||||
 | 
			
		||||
            $interfaces->{$iid} = sprintf( "%s (%d)", $port, $iid );
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            $interfaces->{$iid} = $port;
 | 
			
		||||
            $first_seen_as{$port} = $iid;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return $interfaces;
 | 
			
		||||
@@ -221,10 +228,14 @@ after determining a more specific class using the method above.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Bridge
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::DocsisHE
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Entity
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::LLDP
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::PowerEthernet
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
@@ -262,13 +273,13 @@ Tries to discover the vendor from $l2->model() and $l2->description()
 | 
			
		||||
 | 
			
		||||
=item $l2->serial()
 | 
			
		||||
 | 
			
		||||
Returns serial number if available through SNMP
 | 
			
		||||
Returns a serial number if found from F<ENTITY-MIB> and F<OLD-CISCO->... MIB.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info/"GLOBALS"> for details.
 | 
			
		||||
See documentation in L<SNMP::Info/"USAGE"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Bridge
 | 
			
		||||
 | 
			
		||||
@@ -302,7 +313,7 @@ Defaults to C<ifDescr> but checks and overrides with C<ifName>
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info/"TABLE METHODS"> for details.
 | 
			
		||||
See documentation in L<SNMP::Info/"USAGE"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Bridge
 | 
			
		||||
 | 
			
		||||
@@ -1,40 +1,63 @@
 | 
			
		||||
# SNMP::Info::Layer2::3Com - SNMP Interface to 3Com Devices
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2019 by The Netdisco Developer Team.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
# modification, are permitted provided that the following conditions are met:
 | 
			
		||||
#
 | 
			
		||||
#     * Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
#       this list of conditions and the following disclaimer.
 | 
			
		||||
#     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
#       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
#       documentation and/or other materials provided with the distribution.
 | 
			
		||||
#     * Neither the name of the University of California, Santa Cruz nor the
 | 
			
		||||
#       names of its contributors may be used to endorse or promote products
 | 
			
		||||
#       derived from this software without specific prior written permission.
 | 
			
		||||
#
 | 
			
		||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
			
		||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
package SNMP::Info::Layer2::3Com;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
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::ISA       = qw/SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::3Com::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $AUTOLOAD);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%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';
 | 
			
		||||
}
 | 
			
		||||
@@ -49,6 +72,7 @@ sub serial {
 | 
			
		||||
            return $e_serial->{$e};
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os_ver {
 | 
			
		||||
@@ -61,19 +85,25 @@ sub os_ver {
 | 
			
		||||
            return $e_swver->{$e};
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    return '3Com';
 | 
			
		||||
    return '3com';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
 | 
			
		||||
    my $dsmodel = shift;
 | 
			
		||||
    my $descr = $dsmodel->description();
 | 
			
		||||
    if ( $descr =~ /^([\S ]+) Software.*/){
 | 
			
		||||
 | 
			
		||||
    if (defined ($descr)) {
 | 
			
		||||
      if ($descr =~ /^([\S ]+) Software.*/) {
 | 
			
		||||
        return $1;
 | 
			
		||||
      } else {
 | 
			
		||||
        return $descr;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
@@ -95,7 +125,7 @@ Max Kosmach
 | 
			
		||||
                          Debug       => 1,
 | 
			
		||||
                          DestHost    => 'myrouter',
 | 
			
		||||
                          Community   => 'public',
 | 
			
		||||
                          Version     => 1
 | 
			
		||||
                          Version     => 2
 | 
			
		||||
                        )
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
@@ -136,7 +166,7 @@ These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=item $device->vendor()
 | 
			
		||||
 | 
			
		||||
Returns '3Com'
 | 
			
		||||
Returns '3com'
 | 
			
		||||
 | 
			
		||||
=item $device->os()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										308
									
								
								lib/SNMP/Info/Layer2/Adtran.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										308
									
								
								lib/SNMP/Info/Layer2/Adtran.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,308 @@
 | 
			
		||||
# SNMP::Info::Layer2::Adtran - SNMP Interface to Adtran Devices
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2019 by The Netdisco Developer Team.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
# modification, are permitted provided that the following conditions are met:
 | 
			
		||||
#
 | 
			
		||||
#     * Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
#       this list of conditions and the following disclaimer.
 | 
			
		||||
#     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
#       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
#       documentation and/or other materials provided with the distribution.
 | 
			
		||||
#     * Neither the name of the University of California, Santa Cruz nor the
 | 
			
		||||
#       names of its contributors may be used to endorse or promote products
 | 
			
		||||
#       derived from this software without specific prior written permission.
 | 
			
		||||
#
 | 
			
		||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
			
		||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
package SNMP::Info::Layer2::Adtran;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::Adtran::ISA       = qw/SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::Adtran::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
# 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,
 | 
			
		||||
    'serial'    => 'adProdSerialNumber',
 | 
			
		||||
    'ad_mgmtevcvid' => 'adGenEVCSysMgmtEVCSTagVID',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = ( %SNMP::Info::Layer2::FUNCS,
 | 
			
		||||
           %SNMP::Info::Layer3::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::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 @splitout = split(/\./,$port);
 | 
			
		||||
            $i_name->{$splitout[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 @splitout = split(/(\.0)+\./,$entry);
 | 
			
		||||
            my $name = pack("C*", split(/\./,$splitout[0]));
 | 
			
		||||
            push @{$if_vlans->{$splitout[2]}}, $vlans->{$name};
 | 
			
		||||
        }
 | 
			
		||||
        my $mgmtevcports = $adtran->ad_mgmtevcports();
 | 
			
		||||
        my $mgmtevcid = $adtran->ad_mgmtevcvid();
 | 
			
		||||
        foreach my $port (keys %$mgmtevcports) {
 | 
			
		||||
           push @{$if_vlans->{$port}}, $mgmtevcid;
 | 
			
		||||
        }
 | 
			
		||||
        return $if_vlans;
 | 
			
		||||
    }
 | 
			
		||||
    return {};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub v_name {
 | 
			
		||||
    my $adtran = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
    my $v_index = $adtran->ad_evcstag();
 | 
			
		||||
    return {} unless defined $v_index;
 | 
			
		||||
    $v_index->{$adtran->ad_mgmtevcvid()} = 'system-management-evc';
 | 
			
		||||
    return $v_index;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer2::Adtran - SNMP Interface to Adtran Devices
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
 # Let SNMP::Info determine the correct subclass for you.
 | 
			
		||||
 my $adtran = new SNMP::Info(
 | 
			
		||||
                          AutoSpecify => 1,
 | 
			
		||||
                          Debug       => 1,
 | 
			
		||||
                          DestHost    => 'myrouter',
 | 
			
		||||
                          Community   => 'public',
 | 
			
		||||
                          Version     => 2
 | 
			
		||||
                        )
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
 my $class      = $adtran->class();
 | 
			
		||||
 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Subclass for adtran Devices running JUNOS
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes' MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $adtran->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'adtran'
 | 
			
		||||
 | 
			
		||||
=item $adtran->os()
 | 
			
		||||
 | 
			
		||||
Returns 'aos'
 | 
			
		||||
 | 
			
		||||
=item $adtran->layers()
 | 
			
		||||
 | 
			
		||||
Ensures that layer two is reported, at least.
 | 
			
		||||
 | 
			
		||||
=item $adtran->os_ver()
 | 
			
		||||
 | 
			
		||||
Returns the software version extracted first from C<adProdSwVersion> or
 | 
			
		||||
C<adAOSDeviceVersion>.
 | 
			
		||||
 | 
			
		||||
=item $adtran->model()
 | 
			
		||||
 | 
			
		||||
Returns the model extracted first from C<adProdName> or
 | 
			
		||||
C<adAOSDeviceProductName>.
 | 
			
		||||
 | 
			
		||||
=item $adtran->serial()
 | 
			
		||||
 | 
			
		||||
Returns serial number.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
to a hash.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $adtran->v_name()
 | 
			
		||||
 | 
			
		||||
VLAN names table.
 | 
			
		||||
 | 
			
		||||
=item $adtran->i_name()
 | 
			
		||||
 | 
			
		||||
Interface names table.
 | 
			
		||||
 | 
			
		||||
=item $adtran->i_vlan()
 | 
			
		||||
 | 
			
		||||
Returns a mapping between C<ifIndex> and the PVID or default VLAN.
 | 
			
		||||
 | 
			
		||||
=item $adtran->i_vlan_membership()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
 | 
			
		||||
IDs.  These are the VLANs which are members of the egress list for the port.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
							
								
								
									
										512
									
								
								lib/SNMP/Info/Layer2/Aerohive.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										512
									
								
								lib/SNMP/Info/Layer2/Aerohive.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,512 @@
 | 
			
		||||
# SNMP::Info::Layer2::Aerohive
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2018 Eric Miller
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
# modification, are permitted provided that the following conditions are met:
 | 
			
		||||
#
 | 
			
		||||
#     * Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
#       this list of conditions and the following disclaimer.
 | 
			
		||||
#     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
#       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
#       documentation and/or other materials provided with the distribution.
 | 
			
		||||
#     * Neither the name of the University of California, Santa Cruz nor the
 | 
			
		||||
#       names of its contributors may be used to endorse or promote products
 | 
			
		||||
#       derived from this software without specific prior written permission.
 | 
			
		||||
#
 | 
			
		||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
			
		||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
package SNMP::Info::Layer2::Aerohive;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::Aerohive::ISA       = qw/SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::Aerohive::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
    'AH-SYSTEM-MIB'    => 'ahSystemSerial',
 | 
			
		||||
    'AH-INTERFACE-MIB' => 'ahSSIDName',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
 | 
			
		||||
    # AH-SYSTEM-MIB
 | 
			
		||||
    'serial' => 'ahSystemSerial',
 | 
			
		||||
    'os_bin' => 'ahFirmwareVersion',
 | 
			
		||||
    # not documented in the most recent mib,
 | 
			
		||||
    # but this is the base mac for the device
 | 
			
		||||
    'ah_mac' => '.1.3.6.1.4.1.26928.1.3.2.0',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer2::FUNCS,
 | 
			
		||||
 | 
			
		||||
    # AH-INTERFACE-MIB::ahRadioAttributeTable
 | 
			
		||||
    'i_80211channel'      => 'ahRadioChannel',
 | 
			
		||||
    'dot11_cur_tx_pwr_mw' => 'ahRadioTxPower',
 | 
			
		||||
 | 
			
		||||
    # AH-INTERFACE-MIB::ahXIfTable
 | 
			
		||||
    'ah_i_ssidlist' => 'ahSSIDName',
 | 
			
		||||
 | 
			
		||||
    # AH-INTERFACE-MIB::ahAssociationTable
 | 
			
		||||
    'cd11_txrate'      => 'ahClientLastTxRate',
 | 
			
		||||
    'cd11_uptime'      => 'ahClientLinkUptime',
 | 
			
		||||
    'cd11_sigstrength' => 'ahClientRSSI',
 | 
			
		||||
    'cd11_rxpkt'       => 'ahClientRxDataFrames',
 | 
			
		||||
    'cd11_txpkt'       => 'ahClientTxDataFrames',
 | 
			
		||||
    'cd11_rxbyte'      => 'ahClientRxDataOctets',
 | 
			
		||||
    'cd11_txbyte'      => 'ahClientTxDataOctets',
 | 
			
		||||
    'cd11_ssid'        => 'ahClientSSID',
 | 
			
		||||
    'ah_c_vlan'        => 'ahClientVLAN',
 | 
			
		||||
    'ah_c_ip'          => 'ahClientIP',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE
 | 
			
		||||
    = ( %SNMP::Info::Layer2::MUNGE, 'at_paddr' => \&SNMP::Info::munge_mac, );
 | 
			
		||||
 | 
			
		||||
# hiveos does not have sysServices
 | 
			
		||||
sub layers {
 | 
			
		||||
    return '00000111';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    return 'aerohive';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os {
 | 
			
		||||
    return 'hiveos';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub serial {
 | 
			
		||||
    my $aerohive = shift;
 | 
			
		||||
 | 
			
		||||
    return $aerohive->ahSystemSerial()
 | 
			
		||||
      || $aerohive->SUPER::serial();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os_ver {
 | 
			
		||||
    my $aerohive = shift;
 | 
			
		||||
    my $descr    = $aerohive->description();
 | 
			
		||||
 | 
			
		||||
    if ( defined ($descr) && $descr =~ m/\bHiveOS\s(\d+\.\w+)\b/ix ) {
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub mac {
 | 
			
		||||
    my $aerohive = shift;
 | 
			
		||||
    my $ahmac = $aerohive->ah_mac();
 | 
			
		||||
 | 
			
		||||
    # newer hiveos version just return the mac address
 | 
			
		||||
    if (defined $ahmac) {
 | 
			
		||||
      # aerohive has a 0000:0000:0000 mac format by default,
 | 
			
		||||
      # change to 00:00:00:00:00:00
 | 
			
		||||
      $ahmac =~ s/(..)(..:?)/$1:$2/g;
 | 
			
		||||
      return $ahmac;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    my @macs;
 | 
			
		||||
    my $macs = $aerohive->i_mac();
 | 
			
		||||
    foreach my $iid (keys %$macs) {
 | 
			
		||||
      if (defined $macs->{$iid}) {
 | 
			
		||||
        push( @macs, $macs->{$iid} );
 | 
			
		||||
      }
 | 
			
		||||
      @macs = sort(@macs);
 | 
			
		||||
    }
 | 
			
		||||
    return $macs[0];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $aerohive = shift;
 | 
			
		||||
    my $descr    = $aerohive->description();
 | 
			
		||||
 | 
			
		||||
    if ( defined ($descr) && $descr =~ m/\b(?:Hive|)(AP\d+)\b/ix ) {
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_ssidlist {
 | 
			
		||||
    my $aerohive = shift;
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $ssids = $aerohive->ah_i_ssidlist($partial) || {};
 | 
			
		||||
 | 
			
		||||
    my %i_ssidlist;
 | 
			
		||||
    foreach my $iid ( keys %$ssids ) {
 | 
			
		||||
        my $ssid = $ssids->{$iid};
 | 
			
		||||
        next if $ssid =~ /N\/A/i;
 | 
			
		||||
 | 
			
		||||
        $i_ssidlist{$iid} = $ssid;
 | 
			
		||||
    }
 | 
			
		||||
    return \%i_ssidlist;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_ssidmac {
 | 
			
		||||
    my $aerohive = shift;
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $ssids = $aerohive->i_ssidlist($partial) || {};
 | 
			
		||||
    my $macs  = $aerohive->i_mac($partial)      || {};
 | 
			
		||||
 | 
			
		||||
    my %i_ssidmac;
 | 
			
		||||
    foreach my $iid ( keys %$ssids ) {
 | 
			
		||||
        my $mac = $macs->{$iid};
 | 
			
		||||
        next unless $mac;
 | 
			
		||||
 | 
			
		||||
        $i_ssidmac{$iid} = $mac;
 | 
			
		||||
    }
 | 
			
		||||
    return \%i_ssidmac;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Break up the ahAssociationEntry INDEX into ifIndex and MAC Address.
 | 
			
		||||
sub _ah_association_index {
 | 
			
		||||
    my $idx     = shift;
 | 
			
		||||
    my @values  = split( /\./, $idx );
 | 
			
		||||
    my $ifindex = shift(@values);
 | 
			
		||||
    my $length  = shift(@values);
 | 
			
		||||
    return ( $ifindex, join( ':', map { sprintf "%02x", $_ } @values ) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub cd11_port {
 | 
			
		||||
    my $aerohive = shift;
 | 
			
		||||
 | 
			
		||||
    my $cd11_txrate = $aerohive->cd11_txrate();
 | 
			
		||||
    my $interfaces  = $aerohive->interfaces();
 | 
			
		||||
 | 
			
		||||
    my %ret;
 | 
			
		||||
    foreach ( keys %$cd11_txrate ) {
 | 
			
		||||
        my ( $ifindex, $mac ) = _ah_association_index($_);
 | 
			
		||||
        $ret{$_} = $interfaces->{$ifindex};
 | 
			
		||||
    }
 | 
			
		||||
    return \%ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub cd11_mac {
 | 
			
		||||
    my $aerohive = shift;
 | 
			
		||||
 | 
			
		||||
    my $cd11_txrate = $aerohive->cd11_txrate();
 | 
			
		||||
 | 
			
		||||
    my %ret;
 | 
			
		||||
    foreach ( keys %$cd11_txrate ) {
 | 
			
		||||
        my ( $ifindex, $mac ) = _ah_association_index($_);
 | 
			
		||||
        $ret{$_} = $mac;
 | 
			
		||||
    }
 | 
			
		||||
    return \%ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Does not support the standard Bridge MIB
 | 
			
		||||
sub bp_index {
 | 
			
		||||
    my $aerohive = shift;
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    # somewhere caching is doing something strange, without load_
 | 
			
		||||
    # netdisco can't find bp_index mappings & will not registerer
 | 
			
		||||
    # any clients. netdisco/netdisco#496
 | 
			
		||||
    my $i_index = $aerohive->load_i_index($partial) || {};
 | 
			
		||||
 | 
			
		||||
    my %bp_index;
 | 
			
		||||
    foreach my $iid ( keys %$i_index ) {
 | 
			
		||||
        my $index = $i_index->{$iid};
 | 
			
		||||
        next unless defined $index;
 | 
			
		||||
 | 
			
		||||
        $bp_index{$index} = $iid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return \%bp_index;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub qb_fw_port {
 | 
			
		||||
    my $aerohive = shift;
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $txrate = $aerohive->cd11_txrate($partial) || {};
 | 
			
		||||
 | 
			
		||||
    my $qb_fw_port = {};
 | 
			
		||||
    foreach my $idx ( keys %$txrate ) {
 | 
			
		||||
        my ( $fdb_id, $mac ) = _ah_association_index($idx);
 | 
			
		||||
        $qb_fw_port->{$idx} = $fdb_id;
 | 
			
		||||
    }
 | 
			
		||||
    return $qb_fw_port;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub qb_fw_mac {
 | 
			
		||||
    my $aerohive = shift;
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $txrate = $aerohive->cd11_txrate($partial) || {};
 | 
			
		||||
 | 
			
		||||
    my $qb_fw_mac = {};
 | 
			
		||||
    foreach my $idx ( keys %$txrate ) {
 | 
			
		||||
        my ( $fdb_id, $mac ) = _ah_association_index($idx);
 | 
			
		||||
        $qb_fw_mac->{$idx} = $mac;
 | 
			
		||||
    }
 | 
			
		||||
    return $qb_fw_mac;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub qb_fw_vlan {
 | 
			
		||||
    my $aerohive = shift;
 | 
			
		||||
    my $partial  = shift;
 | 
			
		||||
 | 
			
		||||
    my $vlans = $aerohive->ah_c_vlan($partial) || {};
 | 
			
		||||
 | 
			
		||||
    my $qb_fw_vlan = {};
 | 
			
		||||
    foreach my $idx ( keys %$vlans ) {
 | 
			
		||||
        my $vlan = $vlans->{$idx};
 | 
			
		||||
        next unless defined $vlan;
 | 
			
		||||
        $qb_fw_vlan->{$idx} = $vlan;
 | 
			
		||||
    }
 | 
			
		||||
    return $qb_fw_vlan;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# arpnip:
 | 
			
		||||
#
 | 
			
		||||
# This is the AP snooping on the MAC->IP mappings.
 | 
			
		||||
# Pretending this is arpnip data allows us to get MAC->IP
 | 
			
		||||
# mappings even for stations that only communicate locally.
 | 
			
		||||
 | 
			
		||||
sub at_paddr {
 | 
			
		||||
    my $aerohive = shift;
 | 
			
		||||
 | 
			
		||||
    my $txrate = $aerohive->cd11_txrate() || {};
 | 
			
		||||
 | 
			
		||||
    my $at_paddr = {};
 | 
			
		||||
    foreach my $idx ( keys %$txrate ) {
 | 
			
		||||
        my ( $fdb_id, $mac ) = _ah_association_index($idx);
 | 
			
		||||
        $at_paddr->{$idx} = $mac;
 | 
			
		||||
    }
 | 
			
		||||
    return $at_paddr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub at_netaddr {
 | 
			
		||||
    my $aerohive = shift;
 | 
			
		||||
 | 
			
		||||
    my $ips = $aerohive->ah_c_ip() || {};
 | 
			
		||||
 | 
			
		||||
    my $ret = {};
 | 
			
		||||
    foreach my $idx ( keys %$ips ) {
 | 
			
		||||
        next if ( $ips->{$idx} eq '0.0.0.0' );
 | 
			
		||||
        $ret->{$idx} = $ips->{$idx};
 | 
			
		||||
    }
 | 
			
		||||
    return $ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer2::Aerohive - SNMP Interface to Aerohive / Extreme
 | 
			
		||||
access points
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
Eric Miller
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
 # Let SNMP::Info determine the correct subclass for you.
 | 
			
		||||
 my $aerohive = new SNMP::Info(
 | 
			
		||||
                          AutoSpecify => 1,
 | 
			
		||||
                          Debug       => 1,
 | 
			
		||||
                          DestHost    => 'myswitch',
 | 
			
		||||
                          Community   => 'public',
 | 
			
		||||
                          Version     => 2
 | 
			
		||||
                        )
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
 my $class = $aerohive->class();
 | 
			
		||||
 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Provides abstraction to the configuration information obtainable from an
 | 
			
		||||
Aerohive / Extreme wireless access point through SNMP.
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<AH-SYSTEM-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<AH-INTERFACE-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Inherited MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $aerohive->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'aerohive'.
 | 
			
		||||
 | 
			
		||||
=item $aerohive->os()
 | 
			
		||||
 | 
			
		||||
Returns 'hiveos'.
 | 
			
		||||
 | 
			
		||||
=item $aerohive->serial()
 | 
			
		||||
 | 
			
		||||
Returns the serial number extracted from C<ahSystemSerial>.
 | 
			
		||||
 | 
			
		||||
=item $aerohive->os_ver()
 | 
			
		||||
 | 
			
		||||
Returns the OS version extracted from C<sysDescr>.
 | 
			
		||||
 | 
			
		||||
=item $aerohive->os_bin()
 | 
			
		||||
 | 
			
		||||
Returns the firmware version extracted from C<ahFirmwareVersion>.
 | 
			
		||||
 | 
			
		||||
=item $aerohive->mac()
 | 
			
		||||
 | 
			
		||||
Returns the base mac address of the aerohive unit from an undocumented
 | 
			
		||||
snmp oid. if this oid is not available it will walk all interfaces and
 | 
			
		||||
return the lowest numbered mac address.
 | 
			
		||||
 | 
			
		||||
=item $aerohive->model()
 | 
			
		||||
 | 
			
		||||
Returns the model extracted from C<sysDescr>.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Overrides
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $aerohive->layers()
 | 
			
		||||
 | 
			
		||||
Returns 00000111. Layer 2 and Layer 3 functionality through proprietary MIBs.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Global Methods imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
to a hash.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $aerohive->i_ssidlist()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash. SSID's recognized by the radio interface.
 | 
			
		||||
 | 
			
		||||
=item $aerohive->i_ssidmac()
 | 
			
		||||
 | 
			
		||||
With the same keys as i_ssidlist, returns the Basic service set
 | 
			
		||||
identification (BSSID), MAC address, the AP is using for the SSID.
 | 
			
		||||
 | 
			
		||||
=item $aerohive->i_80211channel()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash.  Current operating frequency channel of the radio
 | 
			
		||||
interface.
 | 
			
		||||
 | 
			
		||||
C<ahRadioChannel>
 | 
			
		||||
 | 
			
		||||
=item $aerohive->dot11_cur_tx_pwr_mw()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash.  Current transmit power, in milliwatts, of the
 | 
			
		||||
radio interface.
 | 
			
		||||
 | 
			
		||||
C<ahRadioTxPower>
 | 
			
		||||
 | 
			
		||||
=item $aerohive->cd11_port()
 | 
			
		||||
 | 
			
		||||
Returns radio interfaces.
 | 
			
		||||
 | 
			
		||||
=item $aerohive->cd11_mac()
 | 
			
		||||
 | 
			
		||||
Returns client radio interface MAC addresses.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Overrides
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $aerohive->bp_index()
 | 
			
		||||
 | 
			
		||||
Simulates bridge MIB by returning reference to a hash mapping i_index() to
 | 
			
		||||
the interface iid.
 | 
			
		||||
 | 
			
		||||
=item $aerohive->qb_fw_port()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of forwarding table entries port interface
 | 
			
		||||
identifier (iid).
 | 
			
		||||
 | 
			
		||||
=item $aerohive->qb_fw_mac()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of forwarding table MAC Addresses.
 | 
			
		||||
 | 
			
		||||
C<ahClientMac>
 | 
			
		||||
 | 
			
		||||
=item $aerohive->qb_fw_vlan()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of forwarding table entries VLAN ID.
 | 
			
		||||
 | 
			
		||||
C<ahClientVLAN>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Arp Cache Table Augmentation
 | 
			
		||||
 | 
			
		||||
The AP has knowledge of MAC->IP mappings for wireless clients.
 | 
			
		||||
Augmenting the arp cache data with these MAC->IP mappings enables visibility
 | 
			
		||||
for stations that only communicate locally.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $aerohive->at_paddr()
 | 
			
		||||
 | 
			
		||||
C<ahClientMac>
 | 
			
		||||
 | 
			
		||||
=item $aerohive->at_netaddr()
 | 
			
		||||
 | 
			
		||||
C<ahClientIP>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -29,6 +29,7 @@
 | 
			
		||||
package SNMP::Info::Layer2::Airespace;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Bridge;
 | 
			
		||||
use SNMP::Info::CDP;
 | 
			
		||||
@@ -38,9 +39,9 @@ use SNMP::Info::Airespace;
 | 
			
		||||
    = qw/SNMP::Info::Airespace SNMP::Info::CDP SNMP::Info::Bridge Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::Airespace::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,      %SNMP::Info::Bridge::MIBS,
 | 
			
		||||
@@ -97,6 +98,14 @@ my $mcs_index = {
 | 
			
		||||
	m13 => '104',
 | 
			
		||||
	m14 => '117',
 | 
			
		||||
	m15 => '130',
 | 
			
		||||
	m16 => '19.5',
 | 
			
		||||
	m17 => '39',
 | 
			
		||||
	m18 => '58.5',
 | 
			
		||||
	m19 => '78',
 | 
			
		||||
	m20 => '117',
 | 
			
		||||
	m21 => '156',
 | 
			
		||||
	m22 => '175.5',
 | 
			
		||||
	m23 => '195',
 | 
			
		||||
	# This is a cheat for 802.11a bonded
 | 
			
		||||
	m108 => '108',
 | 
			
		||||
    },
 | 
			
		||||
@@ -117,6 +126,14 @@ my $mcs_index = {
 | 
			
		||||
	m13 => '240',
 | 
			
		||||
	m14 => '270',
 | 
			
		||||
	m15 => '300',
 | 
			
		||||
	m16 => '45',
 | 
			
		||||
	m17 => '90',
 | 
			
		||||
	m18 => '135',
 | 
			
		||||
	m19 => '180',
 | 
			
		||||
	m20 => '270',
 | 
			
		||||
	m21 => '360',
 | 
			
		||||
	m22 => '405',
 | 
			
		||||
	m23 => '450',
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -165,6 +182,7 @@ sub cd11_txrate {
 | 
			
		||||
	elsif ( $rate =~ /^m/ ) {
 | 
			
		||||
	    my $band = $protos->{$idx};
 | 
			
		||||
	    my $bw   = $bws->{$band};
 | 
			
		||||
	    # FIXME throw some kind of error if we get an index/rate that we haven't implemented yet? Now we simply return "0.0"...
 | 
			
		||||
	    $cd11_txrate->{$idx} = [ $mcs_index->{$bw}->{$rate} || '0.0' ];
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
@@ -255,11 +273,6 @@ Eric Miller
 | 
			
		||||
Provides abstraction to the configuration information obtainable from
 | 
			
		||||
Cisco (Airespace) Wireless Controllers 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 $airespace = new SNMP::Info::Layer2::Airespace(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer2::Aironet
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008-2009 Max Baker changes from version 0.8 and beyond.
 | 
			
		||||
#
 | 
			
		||||
@@ -33,9 +32,9 @@
 | 
			
		||||
package SNMP::Info::Layer2::Aironet;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
use SNMP::Info::Entity;
 | 
			
		||||
use SNMP::Info::EtherLike;
 | 
			
		||||
use SNMP::Info::CiscoStats;
 | 
			
		||||
use SNMP::Info::CiscoConfig;
 | 
			
		||||
@@ -43,31 +42,28 @@ use SNMP::Info::CDP;
 | 
			
		||||
use SNMP::Info::IEEE802dot11;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::Aironet::ISA
 | 
			
		||||
    = qw/SNMP::Info::Layer2 SNMP::Info::Entity SNMP::Info::EtherLike
 | 
			
		||||
    = qw/SNMP::Info::Layer2 SNMP::Info::EtherLike
 | 
			
		||||
    SNMP::Info::CiscoStats SNMP::Info::CiscoConfig SNMP::Info::CDP Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::Aironet::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::IEEE802dot11::GLOBALS,
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
    %SNMP::Info::Entity::GLOBALS,
 | 
			
		||||
    %SNMP::Info::EtherLike::GLOBALS,
 | 
			
		||||
    %SNMP::Info::CiscoStats::GLOBALS,
 | 
			
		||||
    %SNMP::Info::CiscoConfig::GLOBALS,
 | 
			
		||||
    %SNMP::Info::CDP::GLOBALS,
 | 
			
		||||
    'serial' => 'entPhysicalSerialNum.1',
 | 
			
		||||
    'descr'  => 'sysDescr',
 | 
			
		||||
    'ps1_type' => 'cpoePdCurrentPowerSource'
 | 
			
		||||
    'ps1_type' => 'cpoePdCurrentPowerSource',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::IEEE802dot11::FUNCS,
 | 
			
		||||
    %SNMP::Info::Layer2::FUNCS,
 | 
			
		||||
    %SNMP::Info::Entity::FUNCS,
 | 
			
		||||
    %SNMP::Info::EtherLike::FUNCS,
 | 
			
		||||
    %SNMP::Info::CiscoStats::FUNCS,
 | 
			
		||||
    %SNMP::Info::CiscoConfig::FUNCS,
 | 
			
		||||
@@ -89,7 +85,6 @@ $VERSION = '3.33';
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::IEEE802dot11::MIBS,
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
    %SNMP::Info::Entity::MIBS,
 | 
			
		||||
    %SNMP::Info::EtherLike::MIBS,
 | 
			
		||||
    %SNMP::Info::CiscoStats::MIBS,
 | 
			
		||||
    %SNMP::Info::CiscoConfig::MIBS,
 | 
			
		||||
@@ -104,7 +99,6 @@ $VERSION = '3.33';
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    %SNMP::Info::IEEE802dot11::MUNGE,
 | 
			
		||||
    %SNMP::Info::Layer2::MUNGE,
 | 
			
		||||
    %SNMP::Info::Entity::MUNGE,
 | 
			
		||||
    %SNMP::Info::EtherLike::MUNGE,
 | 
			
		||||
    %SNMP::Info::CiscoStats::MUNGE,
 | 
			
		||||
    %SNMP::Info::CiscoConfig::MUNGE,
 | 
			
		||||
@@ -119,7 +113,6 @@ $VERSION = '3.33';
 | 
			
		||||
    = \&SNMP::Info::IEEE802dot11::dot11_cur_tx_pwr_mw;
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
 | 
			
		||||
    # Sorry, but it's true.
 | 
			
		||||
    return 'cisco';
 | 
			
		||||
}
 | 
			
		||||
@@ -136,11 +129,16 @@ sub interfaces {
 | 
			
		||||
# Tag on e_descr.1
 | 
			
		||||
sub description {
 | 
			
		||||
    my $aironet = shift;
 | 
			
		||||
    my $descr   = $aironet->descr();
 | 
			
		||||
    my $descr   = $aironet->SUPER::description();
 | 
			
		||||
    my $e_descr = $aironet->e_descr();
 | 
			
		||||
 | 
			
		||||
    $descr = "$e_descr->{1}  $descr" if defined $e_descr->{1};
 | 
			
		||||
 | 
			
		||||
    if (defined $e_descr->{1}) {
 | 
			
		||||
      if (defined $descr) {
 | 
			
		||||
        $descr = "$e_descr->{1}  $descr"
 | 
			
		||||
      } else {
 | 
			
		||||
        $descr = "$e_descr->{1}"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return $descr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -528,8 +526,6 @@ my $aironet = new SNMP::Info::Layer2::Aironet(...);
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Entity
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::EtherLike
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::CiscoStats
 | 
			
		||||
@@ -542,6 +538,16 @@ my $aironet = new SNMP::Info::Layer2::Aironet(...);
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<CISCO-DOT11-ASSOCIATION-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CISCO-DOT11-IF-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CISCO-DOT11-SSID-SECURITY-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CISCO-POE-PD-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB>
 | 
			
		||||
 | 
			
		||||
=item Inherited Classes
 | 
			
		||||
 | 
			
		||||
MIBs required by the inherited classes listed above.
 | 
			
		||||
@@ -568,10 +574,6 @@ System description. Adds info from method e_descr() from SNMP::Info::Entity
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Entity
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Entity/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::EtherLike
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::EtherLike/"GLOBALS"> for details.
 | 
			
		||||
@@ -669,10 +671,6 @@ C<cpoePdSupportedPowerMode>.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Entity
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Entity/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::EtherLike
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::EtherLike/"TABLE METHODS"> for details.
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer2::Allied
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Max Baker
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,6 +30,7 @@
 | 
			
		||||
package SNMP::Info::Layer2::Allied;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
use SNMP::Info::Layer1;
 | 
			
		||||
@@ -38,9 +38,9 @@ use SNMP::Info::Layer1;
 | 
			
		||||
@SNMP::Info::Layer2::Allied::ISA       = qw/SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::Allied::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
 | 
			
		||||
 | 
			
		||||
@@ -70,17 +70,17 @@ sub os_ver {
 | 
			
		||||
    my $allied = shift;
 | 
			
		||||
    my $descr  = $allied->description();
 | 
			
		||||
 | 
			
		||||
    if ( $descr =~ m/version (\d+\.\d+)/ ) {
 | 
			
		||||
    if ( defined ($descr) && $descr =~ m/version (\d+\.\d+)/ ) {
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $allied = shift;
 | 
			
		||||
 | 
			
		||||
    my $desc = $allied->description();
 | 
			
		||||
 | 
			
		||||
    if ( $desc =~ /(AT-80\d{2}\S*)/ ) {
 | 
			
		||||
    if ( defined ($desc) &&  $desc =~ /(AT-80\d{2}\S*)/ ) {
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
@@ -190,7 +190,7 @@ These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=item $allied->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'allied' :)
 | 
			
		||||
Returns 'allied'
 | 
			
		||||
 | 
			
		||||
=item $allied->os()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										168
									
								
								lib/SNMP/Info/Layer2/Atmedia.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								lib/SNMP/Info/Layer2/Atmedia.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,168 @@
 | 
			
		||||
# SNMP::Info::Layer2::Atmedia
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2018 Netdisco Developers
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
# modification, are permitted provided that the following conditions are met:
 | 
			
		||||
#
 | 
			
		||||
#     * Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
#       this list of conditions and the following disclaimer.
 | 
			
		||||
#     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
#       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
#       documentation and/or other materials provided with the distribution.
 | 
			
		||||
#     * Neither the name of the University of California, Santa Cruz nor the
 | 
			
		||||
#       names of its contributors may be used to endorse or promote products
 | 
			
		||||
#       derived from this software without specific prior written permission.
 | 
			
		||||
#
 | 
			
		||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
			
		||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
package SNMP::Info::Layer2::Atmedia;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::Atmedia::ISA       = qw/SNMP::Info::Layer2/;
 | 
			
		||||
@SNMP::Info::Layer2::Atmedia::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( %SNMP::Info::Layer2::MIBS );
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
    'os_ver'          => '.1.3.6.1.4.1.13458.1.2.1.0',
 | 
			
		||||
    'atm_serial'      => '.1.3.6.1.4.1.13458.1.1.2.0',
 | 
			
		||||
    'atm_hardversion' => '.1.3.6.1.4.1.13458.1.3.1.0',
 | 
			
		||||
    'atm_model'       => '.1.3.6.1.4.1.13458.1.1.6.0',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (%SNMP::Info::Layer2::FUNCS);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (%SNMP::Info::Layer2::MUNGE);
 | 
			
		||||
 | 
			
		||||
sub serial {
 | 
			
		||||
    my $atmedia = shift;
 | 
			
		||||
 | 
			
		||||
    return $atmedia->atm_serial();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os {
 | 
			
		||||
    return 'Atmedia-OS';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $atmedia = shift;
 | 
			
		||||
 | 
			
		||||
    my $atmedia_model = $atmedia->atm_model();
 | 
			
		||||
    if (defined $atmedia_model) {
 | 
			
		||||
      $atmedia_model =~ s/\<|\>//g;
 | 
			
		||||
      $atmedia_model =~ s/\//_/g;
 | 
			
		||||
      return $atmedia_model;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    return 'atmedia';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer2::Atmedia - SNMP Interface to atmedia encryptors
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
Netdisco Developers
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
 # Let SNMP::Info determine the correct subclass for you.
 | 
			
		||||
 my $atmedia = new SNMP::Info(
 | 
			
		||||
                          AutoSpecify => 1,
 | 
			
		||||
                          Debug       => 1,
 | 
			
		||||
                          DestHost    => 'myhub',
 | 
			
		||||
                          Community   => 'public',
 | 
			
		||||
                          Version     => 1
 | 
			
		||||
                        )
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
 my $class = $atmedia->class();
 | 
			
		||||
 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Provides abstraction to information obtainable from a atmedia encryptor
 | 
			
		||||
through SNMP. See inherited classes' documentation for inherited methods.
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Inherited MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=head2 Overrides
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $atmedia->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'atmedia'
 | 
			
		||||
 | 
			
		||||
=item $atmedia->os()
 | 
			
		||||
 | 
			
		||||
Returns 'Atmedia-OS'
 | 
			
		||||
 | 
			
		||||
=item $atmedia->os_ver()
 | 
			
		||||
 | 
			
		||||
(C<acSoftVersion>)
 | 
			
		||||
 | 
			
		||||
=item $atmedia->model()
 | 
			
		||||
 | 
			
		||||
(C<acDescr>)
 | 
			
		||||
 | 
			
		||||
=item $atmedia->serial()
 | 
			
		||||
 | 
			
		||||
(C<acSerialNumber>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer2::Baystack
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,38 +30,38 @@
 | 
			
		||||
package SNMP::Info::Layer2::Baystack;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::SONMP;
 | 
			
		||||
use SNMP::Info::NortelStack;
 | 
			
		||||
use SNMP::Info::RapidCity;
 | 
			
		||||
use SNMP::Info::LLDP;
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::Baystack::ISA
 | 
			
		||||
    = qw/SNMP::Info::SONMP SNMP::Info::NortelStack
 | 
			
		||||
    SNMP::Info::RapidCity SNMP::Info::LLDP
 | 
			
		||||
    SNMP::Info::RapidCity
 | 
			
		||||
    SNMP::Info::Layer3 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::Baystack::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,    %SNMP::Info::LLDP::MIBS,
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
    %SNMP::Info::RapidCity::MIBS, %SNMP::Info::NortelStack::MIBS,
 | 
			
		||||
    %SNMP::Info::SONMP::MIBS,
 | 
			
		||||
    'BAY-STACK-PETH-EXT-MIB' => 'bspePethPsePortExtMeasuredPower',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer3::GLOBALS,    %SNMP::Info::LLDP::GLOBALS,
 | 
			
		||||
    %SNMP::Info::Layer3::GLOBALS,
 | 
			
		||||
    %SNMP::Info::RapidCity::GLOBALS, %SNMP::Info::NortelStack::GLOBALS,
 | 
			
		||||
    %SNMP::Info::SONMP::GLOBALS,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer3::FUNCS,    %SNMP::Info::LLDP::FUNCS,
 | 
			
		||||
    %SNMP::Info::Layer3::FUNCS,
 | 
			
		||||
    %SNMP::Info::RapidCity::FUNCS, %SNMP::Info::NortelStack::FUNCS,
 | 
			
		||||
    %SNMP::Info::SONMP::FUNCS,
 | 
			
		||||
    'peth_port_power' => 'bspePethPsePortExtMeasuredPower',
 | 
			
		||||
@@ -74,7 +73,7 @@ $SNMP::Info::SPEED_MAP{200_000_000}   = '100 Mbps';
 | 
			
		||||
$SNMP::Info::SPEED_MAP{2_000_000_000} = '1.0 Gbps';
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    %SNMP::Info::Layer3::MUNGE,    %SNMP::Info::LLDP::MUNGE,
 | 
			
		||||
    %SNMP::Info::Layer3::MUNGE,
 | 
			
		||||
    %SNMP::Info::RapidCity::MUNGE, %SNMP::Info::NortelStack::MUNGE,
 | 
			
		||||
    %SNMP::Info::SONMP::MUNGE,
 | 
			
		||||
);
 | 
			
		||||
@@ -229,7 +228,7 @@ sub index_factor {
 | 
			
		||||
        if ( ( $model =~ /(470)/ )
 | 
			
		||||
        or ( $os =~ m/(boss|bes)/ ) and ( $op_mode eq 'pure' ) );
 | 
			
		||||
    $index_factor = 128
 | 
			
		||||
        if ( ( $model =~ /(5[56]\d\d)|VSP/ )
 | 
			
		||||
        if ( ( $model =~ /(5[56]\d\d)|VSP|4950|59100/ )
 | 
			
		||||
        and ( $os_ver >= 6 ) );
 | 
			
		||||
 | 
			
		||||
    return $index_factor;
 | 
			
		||||
@@ -429,11 +428,6 @@ Provides abstraction to the configuration information obtainable from an
 | 
			
		||||
Avaya Ethernet Switch (formerly Nortel/Bay Baystack) and VSP 7000 series
 | 
			
		||||
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 $baystack = new SNMP::Info::Layer2::Baystack(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -444,8 +438,6 @@ my $baystack = new SNMP::Info::Layer2::Baystack(...);
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::RapidCity
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::LLDP
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
@@ -454,7 +446,7 @@ my $baystack = new SNMP::Info::Layer2::Baystack(...);
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<BAY-STACK-PETH-EXT-MIBB>
 | 
			
		||||
=item F<BAY-STACK-PETH-EXT-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
@@ -466,8 +458,6 @@ See L<SNMP::Info::NortelStack/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::RapidCity/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
@@ -537,10 +527,6 @@ See L<SNMP::Info::NortelStack/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::RapidCity/"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::Layer3
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer3/"GLOBALS"> for details.
 | 
			
		||||
@@ -566,10 +552,6 @@ Returns reference to the map between IID and physical Port.
 | 
			
		||||
 | 
			
		||||
  The physical port name is returned as slot.port.
 | 
			
		||||
 | 
			
		||||
=item $baystack->i_ignore()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of IIDs to ignore.
 | 
			
		||||
 | 
			
		||||
=item $baystack->i_mac()
 | 
			
		||||
 | 
			
		||||
Returns the C<ifPhysAddress> table entries.
 | 
			
		||||
@@ -700,10 +682,6 @@ See L<SNMP::Info::NortelStack/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::RapidCity/"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::Layer3
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer2::C1900
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
 | 
			
		||||
#
 | 
			
		||||
@@ -33,6 +32,7 @@
 | 
			
		||||
package SNMP::Info::Layer2::C1900;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::CDP;
 | 
			
		||||
use SNMP::Info::CiscoStats;
 | 
			
		||||
@@ -46,9 +46,9 @@ use SNMP::Info::Layer2;
 | 
			
		||||
    Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::C1900::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
@@ -200,6 +200,8 @@ sub set_i_duplex_admin {
 | 
			
		||||
 | 
			
		||||
    my $iid = $c1900->c1900_p_ifindex($port);
 | 
			
		||||
 | 
			
		||||
    return 0 unless $iid->{$port};
 | 
			
		||||
 | 
			
		||||
    $duplex = lc($duplex);
 | 
			
		||||
 | 
			
		||||
    return 0 unless defined $duplexes{$duplex};
 | 
			
		||||
@@ -218,11 +220,11 @@ sub i_vlan {
 | 
			
		||||
        || 'disabled';
 | 
			
		||||
 | 
			
		||||
    if ( $overlap eq 'enabled' ) {
 | 
			
		||||
        return;
 | 
			
		||||
        return {};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    my $member_of = $c1900->bridgeGroupMemberPortOfBridgeGroup()
 | 
			
		||||
        || $c1900->vlanMemberPortOfVlan();
 | 
			
		||||
        || $c1900->vlanMemberPortOfVlan() || {};
 | 
			
		||||
 | 
			
		||||
    my $i_pvid = {};
 | 
			
		||||
    foreach my $idx ( keys %$member_of ) {
 | 
			
		||||
@@ -244,7 +246,7 @@ sub i_vlan_membership {
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $member_of = $c1900->bridgeGroupMemberPortOfBridgeGroup()
 | 
			
		||||
        || $c1900->vlanMemberPortOfVlan();
 | 
			
		||||
        || $c1900->vlanMemberPortOfVlan() || {};
 | 
			
		||||
 | 
			
		||||
    my $i_vlan_membership = {};
 | 
			
		||||
    foreach my $idx ( keys %$member_of ) {
 | 
			
		||||
@@ -261,7 +263,7 @@ sub i_vlan_membership {
 | 
			
		||||
    return $i_vlan_membership;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_vlan_membership_untagged { return; }
 | 
			
		||||
sub i_vlan_membership_untagged { return {}; }
 | 
			
		||||
 | 
			
		||||
sub bp_index {
 | 
			
		||||
    my $c1900   = shift;
 | 
			
		||||
@@ -309,11 +311,6 @@ Catalyst 1900 device through SNMP.  See SNMP::Info for full documentation
 | 
			
		||||
 | 
			
		||||
Note that most of these devices only talk SNMP version 1, but not all.
 | 
			
		||||
 | 
			
		||||
For speed or debugging purposes you can call the subclass directly, but not
 | 
			
		||||
after determining a more specific class using the method above. 
 | 
			
		||||
 | 
			
		||||
 my $c1900 = new SNMP::Info::Layer2::C1900(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -340,8 +337,6 @@ after determining a more specific class using the method above.
 | 
			
		||||
 | 
			
		||||
F<ESSWITCH-MIB> is included in the Version 1 MIBs from Cisco.
 | 
			
		||||
 | 
			
		||||
They can be found at ftp://ftp.cisco.com/pub/mibs/v1/v1.tar.gz
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Inherited MIBs
 | 
			
		||||
@@ -384,7 +379,7 @@ the version from there.
 | 
			
		||||
 | 
			
		||||
=item $c1900->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'cisco' :)
 | 
			
		||||
Returns 'cisco'
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
@@ -418,10 +413,6 @@ See L<SNMP::Info::CiscoConfig/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::CiscoStpExtensions/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::CiscoAgg
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::CiscoAgg/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer2::C2900
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
 | 
			
		||||
#
 | 
			
		||||
@@ -33,15 +32,16 @@
 | 
			
		||||
package SNMP::Info::Layer2::C2900;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer2::Cisco;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::C2900::ISA = qw/SNMP::Info::Layer2::Cisco Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::C2900::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::Cisco::GLOBALS,
 | 
			
		||||
@@ -128,25 +128,24 @@ sub i_speed_admin {
 | 
			
		||||
    my $c2900   = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my %i_speed_admin;
 | 
			
		||||
    my $p_port        = $c2900->p_port() || {};
 | 
			
		||||
    my $interfaces    = $c2900->interfaces($partial);
 | 
			
		||||
    my $c2900_p_index = $c2900->c2900_p_index() || {};
 | 
			
		||||
    my $c2900_p_admin = $c2900->c2900_p_speed_admin();
 | 
			
		||||
 | 
			
		||||
    my %reverse_2900 = reverse %$c2900_p_index;
 | 
			
		||||
    my $c2900_p_speed
 | 
			
		||||
        = $c2900->c2900_p_speed_admin( $reverse_2900{$partial} );
 | 
			
		||||
 | 
			
		||||
    my %speeds = (
 | 
			
		||||
        'autoDetect' => 'auto',
 | 
			
		||||
        's10000000'  => '10 Mbps',
 | 
			
		||||
        's100000000' => '100 Mbps',
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    %i_speed_admin
 | 
			
		||||
        = map { $c2900_p_index->{$_} => $speeds{ $c2900_p_speed->{$_} } }
 | 
			
		||||
        keys %$c2900_p_index;
 | 
			
		||||
    my %i_speed_admin;
 | 
			
		||||
    foreach my $if ( keys %$interfaces ) {
 | 
			
		||||
        my $port_2900 = $reverse_2900{$if};
 | 
			
		||||
        next unless defined $port_2900;
 | 
			
		||||
        my $speed = $c2900_p_admin->{$port_2900};
 | 
			
		||||
        next unless defined $speed;
 | 
			
		||||
 | 
			
		||||
        $speed = 'auto' if $speed eq 'autoDetect';
 | 
			
		||||
        $speed = '10 Mbps' if $speed eq 's10000000';
 | 
			
		||||
        $speed = '100 Mbps' if $speed eq 's100000000';
 | 
			
		||||
        $i_speed_admin{$if} = $speed;
 | 
			
		||||
    }
 | 
			
		||||
    return \%i_speed_admin;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -190,7 +189,7 @@ sub set_i_duplex_admin {
 | 
			
		||||
    return $c2900->set_c2900_p_duplex_admin( $duplexes{$duplex}, $iid );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Use i_descritption for port key, cuz i_name can be manually entered.
 | 
			
		||||
# Use i_description for port key, cuz i_name can be manually entered.
 | 
			
		||||
sub interfaces {
 | 
			
		||||
    my $c2900   = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
@@ -245,11 +244,6 @@ Max Baker
 | 
			
		||||
Provides abstraction to the configuration information obtainable from a
 | 
			
		||||
C2900 device through SNMP.
 | 
			
		||||
 | 
			
		||||
For speed or debugging purposes you can call the subclass directly, but not
 | 
			
		||||
after determining a more specific class using the method above. 
 | 
			
		||||
 | 
			
		||||
 my $c2900 = new SNMP::Info::Layer2::C2900(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -282,7 +276,7 @@ These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=item $c2900->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'cisco' :)
 | 
			
		||||
Returns 'cisco'
 | 
			
		||||
 | 
			
		||||
=item $c2900->cisco_comm_indexing()
 | 
			
		||||
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer2::Catalyst
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2002,2003 Regents of the University of California
 | 
			
		||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond
 | 
			
		||||
@@ -32,6 +31,7 @@
 | 
			
		||||
package SNMP::Info::Layer2::Catalyst;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::CiscoStack;
 | 
			
		||||
use SNMP::Info::Layer2::Cisco;
 | 
			
		||||
@@ -40,9 +40,9 @@ use SNMP::Info::Layer2::Cisco;
 | 
			
		||||
    = qw/SNMP::Info::CiscoStack SNMP::Info::Layer2::Cisco Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::Catalyst::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::Cisco::MIBS,
 | 
			
		||||
@@ -64,13 +64,13 @@ $VERSION = '3.33';
 | 
			
		||||
    %SNMP::Info::CiscoStack::MUNGE,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
# Overidden Methods
 | 
			
		||||
# Overridden Methods
 | 
			
		||||
 | 
			
		||||
# i_physical sets a hash entry as true if the iid is a physical port
 | 
			
		||||
sub i_physical {
 | 
			
		||||
    my $cat = shift;
 | 
			
		||||
 | 
			
		||||
    my $p_port = $cat->p_port();
 | 
			
		||||
    my $p_port = $cat->p_port() || {};
 | 
			
		||||
 | 
			
		||||
    my %i_physical;
 | 
			
		||||
    foreach my $port ( keys %$p_port ) {
 | 
			
		||||
@@ -104,8 +104,8 @@ sub os_ver {
 | 
			
		||||
# Workaround for incomplete bp_index
 | 
			
		||||
sub bp_index {
 | 
			
		||||
    my $cat     = shift;
 | 
			
		||||
    my $p_index = $cat->p_port();
 | 
			
		||||
    my $b_index = $cat->p_oidx();
 | 
			
		||||
    my $p_index = $cat->p_port() || {};
 | 
			
		||||
    my $b_index = $cat->p_oidx() || {};
 | 
			
		||||
 | 
			
		||||
    my %bp_index;
 | 
			
		||||
    foreach my $iid ( keys %$p_index ) {
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer2::Centillion
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Eric Miller
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,9 +30,9 @@
 | 
			
		||||
package SNMP::Info::Layer2::Centillion;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
use SNMP::Info::Bridge;
 | 
			
		||||
use SNMP::Info::NortelStack;
 | 
			
		||||
use SNMP::Info::SONMP;
 | 
			
		||||
 | 
			
		||||
@@ -41,9 +40,9 @@ use SNMP::Info::SONMP;
 | 
			
		||||
    = qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::NortelStack SNMP::Info::SONMP Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::Centillion::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,
 | 
			
		||||
@@ -292,11 +291,6 @@ Eric Miller
 | 
			
		||||
Provides abstraction to the configuration information obtainable from a
 | 
			
		||||
Centillion device through SNMP.
 | 
			
		||||
 | 
			
		||||
For speed or debugging purposes you can call the subclass directly, but not
 | 
			
		||||
after determining a more specific class using the method above. 
 | 
			
		||||
 | 
			
		||||
 my $centillion = new SNMP::Info::Layer2::centillion(...);
 | 
			
		||||
 
 | 
			
		||||
Note:  This class supports version 4.X and 5.X which are VLAN based rather
 | 
			
		||||
than bridge group based.
 | 
			
		||||
 | 
			
		||||
@@ -328,7 +322,7 @@ than bridge group based.
 | 
			
		||||
 | 
			
		||||
=item Inherited Classes' MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
See L<SNMP::Info/"REQUIREMENTS"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Bridge/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
@@ -346,7 +340,7 @@ These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=item $centillion->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'Nortel'
 | 
			
		||||
Returns 'nortel'
 | 
			
		||||
 | 
			
		||||
=item $centillion->model()
 | 
			
		||||
 | 
			
		||||
@@ -357,7 +351,7 @@ Removes C<sreg-> from the model name
 | 
			
		||||
 | 
			
		||||
=item $centillion->os()
 | 
			
		||||
 | 
			
		||||
Returns 'Centillion'
 | 
			
		||||
Returns 'centillion'
 | 
			
		||||
 | 
			
		||||
=item $centillion->tftp_action()
 | 
			
		||||
 | 
			
		||||
@@ -399,7 +393,7 @@ start at 0.  Returns 0.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info/"GLOBALS"> for details.
 | 
			
		||||
See documentation in L<SNMP::Info/"USAGE"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Bridge
 | 
			
		||||
 | 
			
		||||
@@ -513,7 +507,7 @@ Returns reference to hash.  Key: Table entry, Value: VLAN Type
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info/"TABLE METHODS"> for details.
 | 
			
		||||
See documentation in L<SNMP::Info/"USAGE"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Bridge
 | 
			
		||||
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer2::Cisco
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Max Baker
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,6 +30,7 @@
 | 
			
		||||
package SNMP::Info::Layer2::Cisco;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::CiscoVTP;
 | 
			
		||||
use SNMP::Info::CDP;
 | 
			
		||||
@@ -50,9 +50,9 @@ use SNMP::Info::Layer2;
 | 
			
		||||
    Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::Cisco::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
@@ -194,7 +194,7 @@ These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=item $cisco->vendor()
 | 
			
		||||
 | 
			
		||||
    Returns 'cisco'
 | 
			
		||||
Returns 'cisco'
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
@@ -226,10 +226,6 @@ See documentation in L<SNMP::Info::CiscoPortSecurity/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::CiscoStpExtensions/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::CiscoAgg
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::CiscoAgg/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer2::CiscoSB
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2013 Nic Bernstein
 | 
			
		||||
#
 | 
			
		||||
@@ -35,61 +34,60 @@
 | 
			
		||||
package SNMP::Info::Layer2::CiscoSB;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
use SNMP::Info::Entity;
 | 
			
		||||
use SNMP::Info::EtherLike;
 | 
			
		||||
use SNMP::Info::CiscoStats;
 | 
			
		||||
use SNMP::Info::CiscoConfig;
 | 
			
		||||
use SNMP::Info::CDP;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::CiscoSB::ISA
 | 
			
		||||
    = qw/SNMP::Info::Layer2 SNMP::Info::Entity SNMP::Info::EtherLike
 | 
			
		||||
    = qw/SNMP::Info::Layer2 SNMP::Info::EtherLike
 | 
			
		||||
    SNMP::Info::CiscoStats SNMP::Info::CiscoConfig SNMP::Info::CDP Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::CiscoSB::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
    %SNMP::Info::Entity::GLOBALS,
 | 
			
		||||
    %SNMP::Info::EtherLike::GLOBALS,
 | 
			
		||||
    %SNMP::Info::CiscoStats::GLOBALS,
 | 
			
		||||
    %SNMP::Info::CiscoConfig::GLOBALS,
 | 
			
		||||
    %SNMP::Info::CDP::GLOBALS,
 | 
			
		||||
    'descr'  => 'sysDescr'
 | 
			
		||||
    'descr'  => 'sysDescr',
 | 
			
		||||
    'mac'    => 'rndBasePhysicalAddress',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer2::FUNCS,
 | 
			
		||||
    %SNMP::Info::Entity::FUNCS,
 | 
			
		||||
    %SNMP::Info::EtherLike::FUNCS,
 | 
			
		||||
    %SNMP::Info::CiscoStats::FUNCS,
 | 
			
		||||
    %SNMP::Info::CiscoConfig::FUNCS,
 | 
			
		||||
    %SNMP::Info::CDP::FUNCS,
 | 
			
		||||
    'peth_port_power' => 'rlPethPsePortOutputPower',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
    %SNMP::Info::Entity::MIBS,
 | 
			
		||||
    %SNMP::Info::EtherLike::MIBS,
 | 
			
		||||
    %SNMP::Info::CiscoStats::MIBS,
 | 
			
		||||
    %SNMP::Info::CiscoConfig::MIBS,
 | 
			
		||||
    %SNMP::Info::CDP::MIBS,
 | 
			
		||||
    'CISCOSB-POE-MIB'          => 'rlPethPsePortOutputPower',
 | 
			
		||||
    'CISCOSB-DEVICEPARAMS-MIB' => 'rndBasePhysicalAddress',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    %SNMP::Info::Layer2::MUNGE,
 | 
			
		||||
    %SNMP::Info::Entity::MUNGE,
 | 
			
		||||
    %SNMP::Info::EtherLike::MUNGE,
 | 
			
		||||
    %SNMP::Info::CiscoStats::MUNGE,
 | 
			
		||||
    %SNMP::Info::CiscoConfig::MUNGE,
 | 
			
		||||
    %SNMP::Info::CDP::MUNGE,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    return 'cisco';
 | 
			
		||||
}
 | 
			
		||||
@@ -130,13 +128,34 @@ sub model {
 | 
			
		||||
 | 
			
		||||
    foreach my $e ( sort keys %$e_model ) {
 | 
			
		||||
        if (defined $e_model->{$e} and $e_model->{$e} !~ /^\s*$/) {
 | 
			
		||||
            my $model = "$e_model->{$e} $e_hwver->{$e}";
 | 
			
		||||
            return $model;
 | 
			
		||||
            return $e_model->{$e};
 | 
			
		||||
            #my $model = "$e_model->{$e} $e_hwver->{$e}";
 | 
			
		||||
            #return $model;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return $ciscosb->description();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# CISCOSBinterfaces.mib also contains duplex info if needed
 | 
			
		||||
sub i_duplex {
 | 
			
		||||
    my $ciscosb = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $el_duplex = $ciscosb->el_duplex($partial);
 | 
			
		||||
 | 
			
		||||
    if ( defined $el_duplex and scalar( keys %$el_duplex ) ) {
 | 
			
		||||
        my %i_duplex;
 | 
			
		||||
        foreach my $el_port ( keys %$el_duplex ) {
 | 
			
		||||
            my $duplex = $el_duplex->{$el_port};
 | 
			
		||||
            next unless defined $duplex;
 | 
			
		||||
 | 
			
		||||
            $i_duplex{$el_port} = 'half' if $duplex =~ /half/i;
 | 
			
		||||
            $i_duplex{$el_port} = 'full' if $duplex =~ /full/i;
 | 
			
		||||
        }
 | 
			
		||||
        return \%i_duplex;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# ifDescr is the same for all interfaces in a class, but the ifName is
 | 
			
		||||
# unique, so let's use that for port name.
 | 
			
		||||
sub interfaces {
 | 
			
		||||
@@ -148,7 +167,6 @@ sub interfaces {
 | 
			
		||||
    return $interfaces;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
@@ -184,15 +202,15 @@ managed switches. [i.e. those matching enterprises(1).cisco(9).otherEnterprises(
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2
 | 
			
		||||
=item SNMP::Info::CDP
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Entity
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::EtherLike
 | 
			
		||||
=item SNMP::Info::CiscoConfig
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::CiscoStats
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::CiscoConfig
 | 
			
		||||
=item SNMP::Info::EtherLike
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
@@ -200,6 +218,10 @@ managed switches. [i.e. those matching enterprises(1).cisco(9).otherEnterprises(
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<CISCOSB-DEVICEPARAMS-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<CISCOSB-POE-MIB>
 | 
			
		||||
 | 
			
		||||
=item Inherited Classes
 | 
			
		||||
 | 
			
		||||
MIBs required by the inherited classes listed above.
 | 
			
		||||
@@ -208,17 +230,13 @@ MIBs required by the inherited classes listed above.
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP
 | 
			
		||||
These are methods that return scalar value from SNMP.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $ciscosb->vendor()
 | 
			
		||||
=item $ciscosb->mac()
 | 
			
		||||
 | 
			
		||||
Returns 'cisco'
 | 
			
		||||
 | 
			
		||||
=item $ciscosb->os()
 | 
			
		||||
 | 
			
		||||
Returns 'ros'
 | 
			
		||||
Returns mac from (C<rndBasePhysicalAddress>)
 | 
			
		||||
 | 
			
		||||
=item $ciscosb->os_ver()
 | 
			
		||||
 | 
			
		||||
@@ -235,20 +253,43 @@ Returns model and hardware revision of unit
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Overrides
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $ciscosb->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'cisco'.
 | 
			
		||||
 | 
			
		||||
=item $ciscosb->os()
 | 
			
		||||
 | 
			
		||||
Returns 'ros'.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Entity
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Entity/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::EtherLike
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::EtherLike/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $ciscosb->peth_port_power()
 | 
			
		||||
 | 
			
		||||
Power supplied by PoE ports, in milliwatts.
 | 
			
		||||
(C<rlPethPsePortOutputPower>)
 | 
			
		||||
 | 
			
		||||
=item $ciscosb->i_duplex()
 | 
			
		||||
 | 
			
		||||
Return duplex based upon the result of EtherLike->el_duplex().
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Overrides
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -263,10 +304,6 @@ Uses the i_name() field.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Entity
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Entity/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::EtherLike
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::EtherLike/"TABLE METHODS"> for details.
 | 
			
		||||
							
								
								
									
										201
									
								
								lib/SNMP/Info/Layer2/Exinda.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								lib/SNMP/Info/Layer2/Exinda.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,201 @@
 | 
			
		||||
# SNMP::Info::Layer2::Exinda
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2018 nick nauwelaerts
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
# modification, are permitted provided that the following conditions are met:
 | 
			
		||||
#
 | 
			
		||||
#     * Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
#       this list of conditions and the following disclaimer.
 | 
			
		||||
#     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
#       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
#       documentation and/or other materials provided with the distribution.
 | 
			
		||||
#     * Neither the name of the University of California, Santa Cruz nor the
 | 
			
		||||
#       names of its contributors may be used to endorse or promote products
 | 
			
		||||
#       derived from this software without specific prior written permission.
 | 
			
		||||
#
 | 
			
		||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
			
		||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
package SNMP::Info::Layer2::Exinda;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::Exinda::ISA = qw/
 | 
			
		||||
    SNMP::Info::Layer2
 | 
			
		||||
    Exporter
 | 
			
		||||
/;
 | 
			
		||||
@SNMP::Info::Layer2::Exinda::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
    'EXINDA-MIB' => 'systemVersion',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
    # EXINDA-MIB
 | 
			
		||||
    'exinda_model' => 'hardwareSeries',
 | 
			
		||||
    'serial1'      => 'systemHostId',
 | 
			
		||||
    'uptime'       => 'systemUptime',
 | 
			
		||||
    'os_ver'       => 'systemVersion',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer2::FUNCS,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    %SNMP::Info::Layer2::MUNGE,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# layer 2: bridged shaping and failopen interfaces
 | 
			
		||||
# layer 3/4: ip and layer 4 protocol fiddling and accell
 | 
			
		||||
# layer 7: wccp support
 | 
			
		||||
sub layers {
 | 
			
		||||
    return '01001110';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    return 'exinda';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# overwrite l2->model, hardwareSeries returns a plain string
 | 
			
		||||
sub model {
 | 
			
		||||
    my $exinda = shift;
 | 
			
		||||
    return $exinda->exinda_model;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# systemHostId (and thus serial1) is actually also a mac address
 | 
			
		||||
sub mac {
 | 
			
		||||
    my $exinda = shift;
 | 
			
		||||
    my $exinda_mac = $exinda->serial1;
 | 
			
		||||
 | 
			
		||||
    return unless (defined $exinda_mac && (length $exinda_mac) == 12);
 | 
			
		||||
    return join(":", $exinda_mac =~ m/\w{2}/g);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os {
 | 
			
		||||
    return 'exos';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer2::Exinda - SNMP Interface to exinda / gfi traffic shapers.
 | 
			
		||||
 | 
			
		||||
=head1 AUTHORS
 | 
			
		||||
 | 
			
		||||
nick nauwelaerts
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
    # Let SNMP::Info determine the correct subclass for you.
 | 
			
		||||
    my $exinda = new SNMP::Info(
 | 
			
		||||
                          AutoSpecify => 1,
 | 
			
		||||
                          Debug       => 1,
 | 
			
		||||
                          DestHost    => 'myrouter',
 | 
			
		||||
                          Community   => 'public',
 | 
			
		||||
                          Version     => 2
 | 
			
		||||
                        )
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
    my $class      = $exinda->class();
 | 
			
		||||
    print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Subclass for exinda / gfi network orchestrator traffic shapers.
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<EXINDA-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Inherited MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $exinda->layers()
 | 
			
		||||
 | 
			
		||||
Returns '01001110'.
 | 
			
		||||
 | 
			
		||||
=item $exinda->mac()
 | 
			
		||||
 | 
			
		||||
Returns a mac address extracted from C<systemHostId>.
 | 
			
		||||
 | 
			
		||||
=item $exinda->model()
 | 
			
		||||
 | 
			
		||||
Returns C<hardwareSeries>.
 | 
			
		||||
 | 
			
		||||
=item $exinda->os()
 | 
			
		||||
 | 
			
		||||
Returns 'exos'.
 | 
			
		||||
 | 
			
		||||
=item $exinda->os_ver()
 | 
			
		||||
 | 
			
		||||
Returns C<systemVersion>.
 | 
			
		||||
 | 
			
		||||
=item $exinda->uptime()
 | 
			
		||||
 | 
			
		||||
Returns the uptime extracted from C<systemUptime>.
 | 
			
		||||
 | 
			
		||||
=item $exinda->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'exinda'.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Global Methods imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE ENTRIES
 | 
			
		||||
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
to a hash.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer2::HP - SNMP Interface to HP ProCurve Switches
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008-2009 Max Baker changes from version 0.8 and beyond.
 | 
			
		||||
#
 | 
			
		||||
@@ -33,6 +32,7 @@
 | 
			
		||||
package SNMP::Info::Layer2::HP;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
use SNMP::Info::MAU;
 | 
			
		||||
@@ -48,24 +48,26 @@ use SNMP::Info::Aggregate 'agg_ports_ifstack';
 | 
			
		||||
/;
 | 
			
		||||
@SNMP::Info::Layer2::HP::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %PORTSTAT, %MODEL_MAP, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
    %SNMP::Info::MAU::MIBS,
 | 
			
		||||
    %SNMP::Info::CDP::MIBS,
 | 
			
		||||
    %SNMP::Info::Aggregate::MIBS,
 | 
			
		||||
    'RFC1271-MIB'    => 'logDescription',
 | 
			
		||||
    'HP-ICF-OID'     => 'hpSwitch4000',
 | 
			
		||||
    'STATISTICS-MIB' => 'hpSwitchCpuStat',
 | 
			
		||||
    'NETSWITCH-MIB'  => 'hpMsgBufFree',
 | 
			
		||||
    'CONFIG-MIB'     => 'hpSwitchConfig',
 | 
			
		||||
    'HP-ICF-CHASSIS' => 'hpicfSensorObjectId',
 | 
			
		||||
    'HP-ICF-BRIDGE'  => 'hpicfBridgeRstpForceVersion',
 | 
			
		||||
    'HP-ICF-POE-MIB' => 'hpicfPoePethPsePortCurrent',
 | 
			
		||||
    'SEMI-MIB'       => 'hpHttpMgSerialNumber',
 | 
			
		||||
    'RFC1271-MIB'            => 'logDescription',
 | 
			
		||||
    'HP-ICF-OID'             => 'hpSwitch4000',
 | 
			
		||||
    'STATISTICS-MIB'         => 'hpSwitchCpuStat',
 | 
			
		||||
    'NETSWITCH-MIB'          => 'hpMsgBufFree',
 | 
			
		||||
    'CONFIG-MIB'             => 'hpSwitchConfig',
 | 
			
		||||
    'HP-ICF-CHASSIS'         => 'hpicfSensorObjectId',
 | 
			
		||||
    'HP-ICF-BRIDGE'          => 'hpicfBridgeRstpForceVersion',
 | 
			
		||||
    'HP-ICF-POE-MIB'         => 'hpicfPoePethPsePortCurrent',
 | 
			
		||||
    'SEMI-MIB'               => 'hpHttpMgSerialNumber',
 | 
			
		||||
    'HP-SWITCH-PL-MIB'       => 'hpSwitchProliant',
 | 
			
		||||
    'BLADETYPE4-NETWORK-MIB' => 'hpProLiant-GbE2c-InterconnectSwitch',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
@@ -156,6 +158,12 @@ $VERSION = '3.33';
 | 
			
		||||
    'J8771A' => '4202vl-48G',
 | 
			
		||||
    'J4865A' => '4108GL',
 | 
			
		||||
    'J4887A' => '4104GL',
 | 
			
		||||
    'JL074A' => '3810M-48G-PoE+',
 | 
			
		||||
    'JL072A' => '3810M-48G',
 | 
			
		||||
    'JL076A' => '3810M-40G-8SR-PoE+',
 | 
			
		||||
    'JL073A' => '3810M-24G-PoE+',
 | 
			
		||||
    'JL071A' => '3810M-24G',
 | 
			
		||||
    'JL075A' => '3810M-16SFP+',
 | 
			
		||||
    'J9588A' => '3800-48G-PoE+-4XG',
 | 
			
		||||
    'J9574A' => '3800-48G-PoE+-4SFP+',
 | 
			
		||||
    'J9586A' => '3800-48G-4XG',
 | 
			
		||||
@@ -175,6 +183,23 @@ $VERSION = '3.33';
 | 
			
		||||
    'J4905A' => '3400cl-24G',
 | 
			
		||||
    'J4815A' => '3324XL',
 | 
			
		||||
    'J4851A' => '3124',
 | 
			
		||||
    'JL322A' => '2930M-48G-PoE+',
 | 
			
		||||
    'JL321A' => '2930M-48G',
 | 
			
		||||
    'JL323A' => '2930M-40G-8SR-PoE+',
 | 
			
		||||
    'JL320A' => '2930M-24G-PoE+',
 | 
			
		||||
    'JL324A' => '2930M-24G-8SR-PoE+',
 | 
			
		||||
    'JL319A' => '2930M-24G',
 | 
			
		||||
    'JL258A' => '2930F-8G-PoE+-2SFP+',
 | 
			
		||||
    'JL558A' => '2930F-48G-PoE+-4SFP+-740W',
 | 
			
		||||
    'JL557A' => '2930F-48G-PoE+-4SFP-740W',
 | 
			
		||||
    'JL256A' => '2930F-48G-PoE+-4SFP+',
 | 
			
		||||
    'JL262A' => '2930F-48G-PoE+-4SFP',
 | 
			
		||||
    'JL254A' => '2930F-48G-4SFP+',
 | 
			
		||||
    'JL260A' => '2930F-48G-4SFP',
 | 
			
		||||
    'JL255A' => '2930F-24G-PoE+-4SFP+',
 | 
			
		||||
    'JL261A' => '2930F-24G-PoE+-4SFP',
 | 
			
		||||
    'JL253A' => '2930F-24G-4SFP+',
 | 
			
		||||
    'JL259A' => '2930F-24G-4SFP',
 | 
			
		||||
    'J9729A' => '2920-48G-PoE+',
 | 
			
		||||
    'J9729A' => '2920-48G-PoE+',
 | 
			
		||||
    'J9728A' => '2920-48G',
 | 
			
		||||
@@ -214,7 +239,13 @@ $VERSION = '3.33';
 | 
			
		||||
    'J9086A' => '2610-24/12PWR',
 | 
			
		||||
    'J9085A' => '2610-24',
 | 
			
		||||
    'J8762A' => '2600-8-PWR',
 | 
			
		||||
    'JL357A' => '2540-48G-PoE+-4SFP+',
 | 
			
		||||
    'JL355A' => '2540-48G-4SFP+',
 | 
			
		||||
    'JL356A' => '2540-24G-PoE+-4SFP+',
 | 
			
		||||
    'JL354A' => '2540-24G-4SFP+',
 | 
			
		||||
    'JL070A' => '2530-8-PoE+ Internal PS',
 | 
			
		||||
    'J9780A' => '2530-8-PoE+',
 | 
			
		||||
    'J9774A' => '2530-8G-PoEP',
 | 
			
		||||
    'J9777A' => '2530-8G',
 | 
			
		||||
    'J9783A' => '2530-8',
 | 
			
		||||
    'J9778A' => '2530-48-PoE+',
 | 
			
		||||
@@ -302,7 +333,7 @@ sub model {
 | 
			
		||||
    my $model = &SNMP::translateObj($id);
 | 
			
		||||
    return $id unless defined $model;
 | 
			
		||||
 | 
			
		||||
    $model =~ s/^hpswitch//i;
 | 
			
		||||
    $model =~ s/^(hp|aruba)switch//i;
 | 
			
		||||
 | 
			
		||||
    return defined $MODEL_MAP{$model} ? $MODEL_MAP{$model} : $model;
 | 
			
		||||
}
 | 
			
		||||
@@ -623,6 +654,14 @@ Included in V2 mibs from Cisco
 | 
			
		||||
 | 
			
		||||
=item F<HP-ICF-POE-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<HP-ICF-CHASSIS>
 | 
			
		||||
 | 
			
		||||
=item F<SEMI-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<HP-SWITCH-PL-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<BLADETYPE4-NETWORK-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
The last four MIBs listed are from HP and can be found at
 | 
			
		||||
@@ -32,6 +32,7 @@
 | 
			
		||||
package SNMP::Info::Layer2::HP4000;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
use SNMP::Info::MAU;
 | 
			
		||||
@@ -42,14 +43,13 @@ use SNMP::Info::CDP;
 | 
			
		||||
    SNMP::Info::CDP Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::HP4000::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %PORTSTAT, %MODEL_MAP, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
    %SNMP::Info::MAU::MIBS,
 | 
			
		||||
    %SNMP::Info::LLDP::MIBS,
 | 
			
		||||
    %SNMP::Info::CDP::MIBS,
 | 
			
		||||
    'RFC1271-MIB'    => 'logDescription',
 | 
			
		||||
    'HP-ICF-OID'     => 'hpSwitch4000',
 | 
			
		||||
@@ -427,7 +427,7 @@ sub set_i_vlan {
 | 
			
		||||
                    $hp->error_throw("Error removing previous untagged vlan from port, should never happen...\n") unless defined $rv;
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                # If vlan change was not succesful, try to revert to the old situation.
 | 
			
		||||
                # If vlan change was not successful, try to revert to the old situation.
 | 
			
		||||
                if (defined $old_untagged) {
 | 
			
		||||
                    $rv = $hp->set_hp_v_if_tag(2, $old_untagged) if defined $old_untagged;
 | 
			
		||||
                    if (defined $rv) {
 | 
			
		||||
@@ -504,11 +504,6 @@ Note:  Some HP Switches will connect via SNMP version 1, but a lot of config
 | 
			
		||||
data will not be available.  Make sure you try and connect with Version 2
 | 
			
		||||
first, and then fail back to version 1.
 | 
			
		||||
 | 
			
		||||
For speed or debugging purposes you can call the subclass directly, but not
 | 
			
		||||
after determining a more specific class using the method above. 
 | 
			
		||||
 | 
			
		||||
 my $hp = new SNMP::Info::Layer2::HP4000(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -31,21 +31,20 @@
 | 
			
		||||
package SNMP::Info::Layer2::HPVC;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
use SNMP::Info::LLDP;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::HPVC::ISA
 | 
			
		||||
    = qw/SNMP::Info::Layer2 SNMP::Info::LLDP Exporter/;
 | 
			
		||||
    = qw/SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::HPVC::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
    %SNMP::Info::LLDP::MIBS,
 | 
			
		||||
    'HPVC-MIB'       => 'vcDomainName',
 | 
			
		||||
    'CPQSINFO-MIB'   => 'cpqSiSysSerialNum',
 | 
			
		||||
    'HPVCMODULE-MIB' => 'vcModuleDomainName',
 | 
			
		||||
@@ -53,7 +52,6 @@ $VERSION = '3.33';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
    %SNMP::Info::LLDP::GLOBALS,
 | 
			
		||||
    'serial1'      => 'cpqSiSysSerialNum.0',
 | 
			
		||||
    'os_ver'       => 'cpqHoSWRunningVersion.1',
 | 
			
		||||
    'os_bin'       => 'cpqHoFwVerVersion.1',
 | 
			
		||||
@@ -62,17 +60,13 @@ $VERSION = '3.33';
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer2::FUNCS,
 | 
			
		||||
    %SNMP::Info::LLDP::FUNCS,
 | 
			
		||||
    
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    # Inherit all the built in munging
 | 
			
		||||
    %SNMP::Info::Layer2::MUNGE,
 | 
			
		||||
    %SNMP::Info::LLDP::MUNGE,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Method Overrides
 | 
			
		||||
 | 
			
		||||
sub os {
 | 
			
		||||
@@ -120,11 +114,6 @@ Jeroen van Ingen
 | 
			
		||||
Provides abstraction to the configuration information obtainable from a
 | 
			
		||||
HP Virtual Connect Switch via 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 $hp = new SNMP::Info::Layer2::HPVC(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -188,22 +177,10 @@ See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
to a hash.
 | 
			
		||||
 | 
			
		||||
=head2 Overrides
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 MUNGES
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 SET METHODS
 | 
			
		||||
 | 
			
		||||
These are methods that provide SNMP set functionality for overridden methods
 | 
			
		||||
@@ -28,15 +28,16 @@ package SNMP::Info::Layer2::Kentrox;
 | 
			
		||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::Kentrox::ISA       = qw/SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::Kentrox::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $AUTOLOAD);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
@@ -57,36 +58,38 @@ $VERSION = '3.33';
 | 
			
		||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, );
 | 
			
		||||
 | 
			
		||||
sub os {
 | 
			
		||||
    return 'Kentrox';
 | 
			
		||||
    return 'kentrox';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os_ver {
 | 
			
		||||
    my $dsver = shift;
 | 
			
		||||
    my $descr = $dsver->description();
 | 
			
		||||
    if ( $descr =~ /^\S+\s\S+\s\S+\s(\S+)/){
 | 
			
		||||
    if ( defined ($descr) && $descr =~ /^\S+\s\S+\s\S+\s(\S+)/){
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub serial {
 | 
			
		||||
    my $dsserial = shift;
 | 
			
		||||
    my $serial = $dsserial->ds_sysinfo();
 | 
			
		||||
    if ( $serial =~ /SERIAL\s(\S+)/){
 | 
			
		||||
    if ( defined ($serial) && $serial =~ /SERIAL\s(\S+)/){
 | 
			
		||||
        my $str = substr($1,8,10);
 | 
			
		||||
        return $str;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
sub vendor {
 | 
			
		||||
    return 'Kentrox';
 | 
			
		||||
    return 'kentrox';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $dsmodel = shift;
 | 
			
		||||
    my $descr = $dsmodel->description();
 | 
			
		||||
    if ( $descr =~ /^(\S+\s\S+)/){
 | 
			
		||||
    if ( defined ($descr) && $descr =~ /^(\S+\s\S+)/){
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
@@ -108,7 +111,7 @@ phishphreek@gmail.com
 | 
			
		||||
                          Debug       => 1,
 | 
			
		||||
                          DestHost    => 'myrouter',
 | 
			
		||||
                          Community   => 'public',
 | 
			
		||||
                          Version     => 1
 | 
			
		||||
                          Version     => 2
 | 
			
		||||
                        )
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
@@ -166,12 +169,6 @@ See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
to a hash.
 | 
			
		||||
 | 
			
		||||
=head2 Overrides
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer2::N2270
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Eric Miller
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,38 +30,42 @@
 | 
			
		||||
package SNMP::Info::Layer2::N2270;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
use SNMP::Info::Bridge;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
use SNMP::Info::SONMP;
 | 
			
		||||
use SNMP::Info::Airespace;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::N2270::ISA
 | 
			
		||||
    = qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::SONMP SNMP::Info::Airespace Exporter/;
 | 
			
		||||
    = qw/SNMP::Info::Layer2 SNMP::Info::SONMP SNMP::Info::Airespace Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::N2270::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $AUTOLOAD, $INIT, $DEBUG);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,        %SNMP::Info::Bridge::MIBS,
 | 
			
		||||
    %SNMP::Info::SONMP::MIBS, %SNMP::Info::Airespace::MIBS,
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
    %SNMP::Info::SONMP::MIBS,
 | 
			
		||||
    %SNMP::Info::Airespace::MIBS,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::GLOBALS,        %SNMP::Info::Bridge::GLOBALS,
 | 
			
		||||
    %SNMP::Info::SONMP::GLOBALS, %SNMP::Info::Airespace::GLOBALS,
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
    %SNMP::Info::SONMP::GLOBALS,
 | 
			
		||||
    %SNMP::Info::Airespace::GLOBALS,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::FUNCS,        %SNMP::Info::Bridge::FUNCS,
 | 
			
		||||
    %SNMP::Info::SONMP::FUNCS, %SNMP::Info::Airespace::FUNCS,
 | 
			
		||||
    %SNMP::Info::Layer2::FUNCS,
 | 
			
		||||
    %SNMP::Info::SONMP::FUNCS,
 | 
			
		||||
    %SNMP::Info::Airespace::FUNCS,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    %SNMP::Info::MUNGE,        %SNMP::Info::Bridge::MUNGE,
 | 
			
		||||
    %SNMP::Info::SONMP::MUNGE, %SNMP::Info::Airespace::MUNGE,
 | 
			
		||||
    %SNMP::Info::Layer2::MUNGE,
 | 
			
		||||
    %SNMP::Info::SONMP::MUNGE,
 | 
			
		||||
    %SNMP::Info::Airespace::MUNGE,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub os {
 | 
			
		||||
@@ -126,18 +129,11 @@ Eric Miller
 | 
			
		||||
Provides abstraction to the configuration information obtainable from a
 | 
			
		||||
Nortel 2270 Series Wireless Switch 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 $n2270 = new SNMP::Info::Layer2::N2270(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Bridge
 | 
			
		||||
=item SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::SONMP
 | 
			
		||||
 | 
			
		||||
@@ -151,9 +147,7 @@ my $n2270 = new SNMP::Info::Layer2::N2270(...);
 | 
			
		||||
 | 
			
		||||
=item Inherited Classes' MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Bridge/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::SONMP/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
@@ -200,13 +194,9 @@ start at 0.  Returns 0.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Bridge
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Bridge/"GLOBALS"> for details.
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Global Methods imported from SNMP::Info::SONMP
 | 
			
		||||
 | 
			
		||||
@@ -229,13 +219,9 @@ to a hash.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Bridge
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Bridge/"TABLE METHODS"> for details.
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::SONMP
 | 
			
		||||
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer2::NAP222x
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Eric Miller
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,6 +30,7 @@
 | 
			
		||||
package SNMP::Info::Layer2::NAP222x;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::SONMP;
 | 
			
		||||
use SNMP::Info::IEEE802dot11;
 | 
			
		||||
@@ -40,9 +40,9 @@ use SNMP::Info::Layer2;
 | 
			
		||||
    = qw/SNMP::Info::SONMP SNMP::Info::IEEE802dot11 SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::NAP222x::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS, %SNMP::Info::IEEE802dot11::MIBS,
 | 
			
		||||
@@ -393,11 +393,6 @@ Eric Miller
 | 
			
		||||
Provides abstraction to the configuration information obtainable from a Nortel
 | 
			
		||||
2220 series wireless Access Points 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 $nap222x = new SNMP::Info::Layer2::NAP222x(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -29,39 +29,37 @@
 | 
			
		||||
package SNMP::Info::Layer2::NWSS2300;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
use SNMP::Info::Bridge;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::NWSS2300::ISA
 | 
			
		||||
    = qw/SNMP::Info SNMP::Info::Bridge Exporter/;
 | 
			
		||||
    = qw/SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::NWSS2300::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,
 | 
			
		||||
    %SNMP::Info::Bridge::MIBS,
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
    'NTWS-REGISTRATION-DEVICES-MIB' => 'ntwsSwitch2380',
 | 
			
		||||
    'NTWS-AP-STATUS-MIB'            => 'ntwsApStatNumAps',
 | 
			
		||||
    'NTWS-CLIENT-SESSION-MIB'       => 'ntwsClSessTotalSessions',
 | 
			
		||||
    'NTWS-SYSTEM-MIB'               => 'ntwsSysCpuAverageLoad',
 | 
			
		||||
    'NTWS-BASIC-MIB'                => 'ntwsVersionString',
 | 
			
		||||
    'NTWS-AP-CONFIG-MIB'            => 'ntwsApConfServProfBeaconEnabled',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::GLOBALS,
 | 
			
		||||
    %SNMP::Info::Bridge::GLOBALS,
 | 
			
		||||
    'os_ver' => 'ntwsVersionString',
 | 
			
		||||
    'serial' => 'ntwsSerialNumber',
 | 
			
		||||
    'mac'    => 'dot1dBaseBridgeAddress',
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
    'os_ver'     => 'ntwsVersionString',
 | 
			
		||||
    'nws_serial' => 'ntwsSerialNumber',
 | 
			
		||||
    'mac'        => 'dot1dBaseBridgeAddress',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::FUNCS,
 | 
			
		||||
    %SNMP::Info::Bridge::FUNCS,
 | 
			
		||||
    %SNMP::Info::Layer2::FUNCS,
 | 
			
		||||
 | 
			
		||||
    # NTWS-AP-STATUS-MIB::ntwsApStatApStatusTable
 | 
			
		||||
    'nwss2300_ap_mac'      => 'ntwsApStatApStatusBaseMac',
 | 
			
		||||
@@ -124,8 +122,7 @@ $VERSION = '3.33';
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    %SNMP::Info::MUNGE,
 | 
			
		||||
    %SNMP::Info::Bridge::MUNGE,
 | 
			
		||||
    %SNMP::Info::Layer2::MUNGE,
 | 
			
		||||
    'nwss2300_apif_mac'      => \&SNMP::Info::munge_mac,
 | 
			
		||||
    'nwss2300_apif_bssid'    => \&SNMP::Info::munge_mac,
 | 
			
		||||
);
 | 
			
		||||
@@ -142,6 +139,14 @@ sub vendor {
 | 
			
		||||
    return 'avaya';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub serial {
 | 
			
		||||
    my $nwss2300 = shift;
 | 
			
		||||
    my $ser = $nwss2300->ntwsSerialNumber();
 | 
			
		||||
#    my $ser = $nwss2300->nws_serial();
 | 
			
		||||
 | 
			
		||||
    return $ser;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $nwss2300 = shift;
 | 
			
		||||
    my $id = $nwss2300->id();
 | 
			
		||||
@@ -657,7 +662,7 @@ sub e_serial {
 | 
			
		||||
    my %e_serial;
 | 
			
		||||
 | 
			
		||||
    # Chassis
 | 
			
		||||
    $e_serial{1} = $nwss2300->serial();
 | 
			
		||||
    $e_serial{1} = $nwss2300->serial()  || '';
 | 
			
		||||
 | 
			
		||||
    # APs
 | 
			
		||||
    foreach my $iid ( keys %$ap_serial ) {
 | 
			
		||||
@@ -812,18 +817,11 @@ 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 $nwss2300 = new SNMP::Info::Layer2::NWSS2300(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Bridge
 | 
			
		||||
=item SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
@@ -845,9 +843,7 @@ my $nwss2300 = new SNMP::Info::Layer2::NWSS2300(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes' MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Bridge/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
@@ -894,13 +890,9 @@ proprietary MIBs.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Global Methods imported from SNMP::Info
 | 
			
		||||
=head2 Global Methods imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Bridge
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Bridge/"GLOBALS"> for details.
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
@@ -1140,13 +1132,9 @@ These emulate the F<CISCO-DOT11-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Bridge
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Bridge/"TABLE METHODS"> for details.
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Overrides
 | 
			
		||||
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer2::Netgear
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Bill Fenner
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,33 +30,33 @@
 | 
			
		||||
package SNMP::Info::Layer2::Netgear;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
use SNMP::Info::LLDP;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::Netgear::ISA       = qw/SNMP::Info::LLDP SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::Netgear::ISA       = qw/SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::Netgear::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
# 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::LLDP::MIBS, );
 | 
			
		||||
%MIBS = ( %SNMP::Info::Layer2::MIBS, );
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS, %SNMP::Info::LLDP::GLOBALS,
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
    ng_fsosver   => '.1.3.6.1.4.1.4526.11.11.1.0',
 | 
			
		||||
    ng_gsmserial => '.1.3.6.1.4.1.4526.10.1.1.1.4.0',
 | 
			
		||||
    ng_gsmosver  => '.1.3.6.1.4.1.4526.10.1.1.1.13.0',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = ( %SNMP::Info::Layer2::FUNCS, %SNMP::Info::LLDP::FUNCS, );
 | 
			
		||||
%FUNCS = ( %SNMP::Info::Layer2::FUNCS, );
 | 
			
		||||
 | 
			
		||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::LLDP::MUNGE, );
 | 
			
		||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, );
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    return 'netgear';
 | 
			
		||||
@@ -87,9 +86,9 @@ sub serial {
 | 
			
		||||
        return $e_serial->{$index} if defined $index;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Without Enitity-MIB, we've got to work our way through a bunch of
 | 
			
		||||
    # Without Entity-MIB, we've got to work our way through a bunch of
 | 
			
		||||
    # different locales...
 | 
			
		||||
    return $netgear->ng_gsmserial() if defined $netgear->model and $netgear->model =~ m/GSM\d/i;;
 | 
			
		||||
    return $netgear->ng_gsmserial() if defined $netgear->model and $netgear->model =~ m/[FG]SM\d/i;;
 | 
			
		||||
    return 'none';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -109,7 +108,7 @@ sub model {
 | 
			
		||||
 | 
			
		||||
# ifDescr is the same for all interfaces in a class, but the ifName is
 | 
			
		||||
# unique, so let's use that for port name.  If all else fails,
 | 
			
		||||
# concatentate ifDesc and ifIndex.
 | 
			
		||||
# concatenate ifDesc and ifIndex.
 | 
			
		||||
sub interfaces {
 | 
			
		||||
    my $netgear = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
@@ -139,7 +138,7 @@ sub interfaces {
 | 
			
		||||
    return $interfaces;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# these seem to work for GSM models but not GS
 | 
			
		||||
# these seem to work for GSM/FSM models but not GS
 | 
			
		||||
# https://sourceforge.net/tracker/?func=detail&aid=3085413&group_id=70362&atid=527529
 | 
			
		||||
sub os_ver {
 | 
			
		||||
    my $netgear = shift;
 | 
			
		||||
@@ -148,7 +147,7 @@ sub os_ver {
 | 
			
		||||
        my $os_ver  = $netgear->e_swver();
 | 
			
		||||
        return $os_ver->{$index} if defined $os_ver;
 | 
			
		||||
    }
 | 
			
		||||
    return $netgear->ng_gsmosver() if defined  $netgear->model and $netgear->model =~ m/GSM\d/i;
 | 
			
		||||
    return $netgear->ng_gsmosver() if defined  $netgear->model and $netgear->model =~ m/[FG]SM\d/i;
 | 
			
		||||
    return $netgear->ng_fsosver() if defined  $netgear->model and $netgear->model =~ m/FS\d/i;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -192,8 +191,6 @@ inherited methods.
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2
 | 
			
		||||
=item SNMP::Info::Entity
 | 
			
		||||
=item SNMP::Info::LLDP
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
@@ -206,10 +203,6 @@ inherited methods.
 | 
			
		||||
MIBs listed in L<SNMP::Info::Layer2/"Required MIBs"> and its inherited
 | 
			
		||||
classes.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Entity/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
@@ -248,14 +241,6 @@ serial number).
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Entity
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Entity/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::LLDP
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
These are methods that return tables of information in the form of
 | 
			
		||||
@@ -275,12 +260,4 @@ Uses the i_name() field.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Entity
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
							
								
								
									
										249
									
								
								lib/SNMP/Info/Layer2/Nexans.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										249
									
								
								lib/SNMP/Info/Layer2/Nexans.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,249 @@
 | 
			
		||||
# SNMP::Info::Layer2::Nexans
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2018 Christoph Neuhaus
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
# modification, are permitted provided that the following conditions are met:
 | 
			
		||||
#
 | 
			
		||||
#     * Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
#       this list of conditions and the following disclaimer.
 | 
			
		||||
#     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
#       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
#       documentation and/or other materials provided with the distribution.
 | 
			
		||||
#     * Neither the name of the University of California, Santa Cruz nor the
 | 
			
		||||
#       names of its contributors may be used to endorse or promote products
 | 
			
		||||
#       derived from this software without specific prior written permission.
 | 
			
		||||
#
 | 
			
		||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
			
		||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
package SNMP::Info::Layer2::Nexans;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::Nexans::ISA = qw/SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::Nexans::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %FUNCS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
    'NEXANS-MIB'    => 'nexansANS',
 | 
			
		||||
    'NEXANS-BM-MIB' => 'infoDescr',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
    'mac'   => 'adminAgentPhysAddress.0',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer2::FUNCS,
 | 
			
		||||
    'i_duplex'          => 'portLinkState', #NEXANS-BM-MIB
 | 
			
		||||
    'i_duplex_admin'    => 'portSpeedDuplexSetup', #NEXANS-BM-MIB
 | 
			
		||||
    'nexans_i_name'     => 'ifAlias',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    %SNMP::Info::Layer2::MUNGE,
 | 
			
		||||
    'i_duplex'          => \&munge_i_duplex,
 | 
			
		||||
    'i_duplex_admin'    => \&munge_i_duplex_admin,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub munge_i_duplex {
 | 
			
		||||
    my $duplex   = shift;
 | 
			
		||||
    return unless defined $duplex;
 | 
			
		||||
    $duplex = 'half' if $duplex =~/Hdx/;
 | 
			
		||||
    $duplex = 'full' if $duplex =~/Fdx/;
 | 
			
		||||
    return $duplex;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub munge_i_duplex_admin {
 | 
			
		||||
    my $duplex_admin    = shift;
 | 
			
		||||
    return unless defined $duplex_admin;
 | 
			
		||||
    $duplex_admin = 'full' if $duplex_admin =~/Fdx/;
 | 
			
		||||
    $duplex_admin = 'half' if $duplex_admin =~/Hdx/;
 | 
			
		||||
    $duplex_admin = 'auto' if $duplex_admin =~/autoneg/;
 | 
			
		||||
    return $duplex_admin;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    return 'nexans';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $nexans  = shift;
 | 
			
		||||
    my $id      = $nexans->id() || '';
 | 
			
		||||
    my $model   = &SNMP::translateObj($id);
 | 
			
		||||
    return $id unless defined $model;
 | 
			
		||||
    return $model;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os {
 | 
			
		||||
    return 'nexanos';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os_ver {
 | 
			
		||||
    my $nexans  = shift;
 | 
			
		||||
    my $ver     = $nexans->infoMgmtFirmwareVersion() || '';
 | 
			
		||||
    return $ver;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub serial {
 | 
			
		||||
    my $nexans = shift;
 | 
			
		||||
    return $nexans->infoSeriesNo();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_name {
 | 
			
		||||
    my $nexans  = shift;
 | 
			
		||||
    my $return  = $nexans->nexans_i_name();
 | 
			
		||||
    # replace i_name where possible
 | 
			
		||||
    foreach my $iid ( keys %$return ) {
 | 
			
		||||
        next unless $return->{$iid} eq "";
 | 
			
		||||
        $return->{$iid} = $iid;
 | 
			
		||||
    }
 | 
			
		||||
    return \%$return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer2::Nexans - SNMP Interface to Nexans network devices.
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
Christoph Neuhaus
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
# Let SNMP::Info determine the correct subclass for you.
 | 
			
		||||
 | 
			
		||||
    my $nexans = new SNMP::Info(
 | 
			
		||||
                            AutoSpecify => 1,
 | 
			
		||||
                            Debug       => 1,
 | 
			
		||||
                            DestHost    => 'myswitch',
 | 
			
		||||
                            Community   => 'public',
 | 
			
		||||
                            Version     => 2
 | 
			
		||||
                            )
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
    my $class = $nexans->class();
 | 
			
		||||
    print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Abstraction subclass for Nexans network devices.
 | 
			
		||||
 | 
			
		||||
tested devices:
 | 
			
		||||
 | 
			
		||||
    fiberSwitch100BmPlus version 3.61
 | 
			
		||||
    gigaSwitch641DeskSfpTp version 3.68, 4.14W
 | 
			
		||||
    gigaSwitchV3d2SfpSfp version 3.68, 4.02, 4.02B, 4.10C, 4,14W
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<NEXANS>
 | 
			
		||||
 | 
			
		||||
=item F<NEXANS-BM>
 | 
			
		||||
 | 
			
		||||
=item Inherited Classes' MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $nexans->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'nexans'
 | 
			
		||||
 | 
			
		||||
=item $nexans->model()
 | 
			
		||||
 | 
			
		||||
Returns the chassis model.
 | 
			
		||||
 | 
			
		||||
=item $nexans->os()
 | 
			
		||||
 | 
			
		||||
Returns 'nexanos'
 | 
			
		||||
 | 
			
		||||
=item $nexans->os_ver()
 | 
			
		||||
 | 
			
		||||
Returns the software version.
 | 
			
		||||
 | 
			
		||||
=item $nexans->serial()
 | 
			
		||||
 | 
			
		||||
Returns the chassis serial number.
 | 
			
		||||
 | 
			
		||||
(C<infoSeriesNo>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
to a hash.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $nexans->i_name()
 | 
			
		||||
 | 
			
		||||
Returns reference to map of IIDs to human-set port name.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 Data Munging Callback Subroutines
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item munge_i_duplex()
 | 
			
		||||
 | 
			
		||||
Converts duplex returned by C<portLinkState> to either 'full' or 'half'.
 | 
			
		||||
 | 
			
		||||
=item munge_i_duplex_admin()
 | 
			
		||||
 | 
			
		||||
Converts duplex returned by C<portSpeedDuplexSetup> to either 'full', 'half',
 | 
			
		||||
or 'auto'.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer2::Orinoco
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Eric Miller
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,6 +30,7 @@
 | 
			
		||||
package SNMP::Info::Layer2::Orinoco;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::IEEE802dot11;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
@@ -39,15 +39,13 @@ use SNMP::Info::Layer2;
 | 
			
		||||
    = qw/SNMP::Info::IEEE802dot11 SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::Orinoco::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
    %SNMP::Info::IEEE802dot11::MIBS,
 | 
			
		||||
 | 
			
		||||
    #'ORiNOCO-MIB' => 'orinoco',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS
 | 
			
		||||
@@ -56,12 +54,6 @@ $VERSION = '3.33';
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer2::FUNCS,
 | 
			
		||||
    %SNMP::Info::IEEE802dot11::FUNCS,
 | 
			
		||||
 | 
			
		||||
    # ORiNOCO-MIB:oriWirelessIfPropertiesTable
 | 
			
		||||
    #'ori_ssid'       => 'oriWirelessIfNetworkName',
 | 
			
		||||
    #'ori_channel'    => 'oriWirelessIfChannel',
 | 
			
		||||
    #'ori_closed_sys' => 'oriWirelessIfClosedSystem',
 | 
			
		||||
    # ORiNOCO-MIB:oriSystemInvMgmtComponentTable
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::IEEE802dot11::MUNGE, );
 | 
			
		||||
@@ -165,22 +157,6 @@ sub interfaces {
 | 
			
		||||
    return \%interfaces;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#sub i_ssidbcast {
 | 
			
		||||
#    my $orinoco = shift;
 | 
			
		||||
#    my $partial = shift;
 | 
			
		||||
#
 | 
			
		||||
#    my $bcast = $orinoco->ori_closed_sys($partial) || {};
 | 
			
		||||
#
 | 
			
		||||
#    my %i_ssidbcast;
 | 
			
		||||
#    foreach my $iid (keys %$bcast){
 | 
			
		||||
#        my $bc   = $bcast->{$iid};
 | 
			
		||||
#        next unless defined $bc;
 | 
			
		||||
#
 | 
			
		||||
#        $i_ssidbcast{$iid} = $bc;
 | 
			
		||||
#    }
 | 
			
		||||
#    return \%i_ssidbcast;
 | 
			
		||||
#}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
@@ -213,11 +189,6 @@ Provides abstraction to the configuration information obtainable from
 | 
			
		||||
Orinoco Access Point through SNMP.  Orinoco devices have been manufactured
 | 
			
		||||
by Proxim, Agere, and Lucent.
 | 
			
		||||
 | 
			
		||||
For speed or debugging purposes you can call the subclass directly, but not
 | 
			
		||||
after determining a more specific class using the method above. 
 | 
			
		||||
 | 
			
		||||
 my $orinoco = new SNMP::Info::Layer2::Orinoco(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -258,7 +229,7 @@ Returns the model extracted from C<sysDescr>.
 | 
			
		||||
 | 
			
		||||
=item $orinoco->os()
 | 
			
		||||
 | 
			
		||||
Returns 'Orinoco'
 | 
			
		||||
Returns 'orinoco'
 | 
			
		||||
 | 
			
		||||
=item $orinoco->os_ver()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										178
									
								
								lib/SNMP/Info/Layer2/Sixnet.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										178
									
								
								lib/SNMP/Info/Layer2/Sixnet.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,178 @@
 | 
			
		||||
# SNMP::Info::Layer2::Sixnet
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2018 Eric Miller
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
# modification, are permitted provided that the following conditions are met:
 | 
			
		||||
#
 | 
			
		||||
#     * Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
#       this list of conditions and the following disclaimer.
 | 
			
		||||
#     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
#       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
#       documentation and/or other materials provided with the distribution.
 | 
			
		||||
#     * Neither the name of the University of California, Santa Cruz nor the
 | 
			
		||||
#       names of its contributors may be used to endorse or promote products
 | 
			
		||||
#       derived from this software without specific prior written permission.
 | 
			
		||||
#
 | 
			
		||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
			
		||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
package SNMP::Info::Layer2::Sixnet;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::Sixnet::ISA       = qw/SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::Sixnet::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %FUNCS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (%SNMP::Info::Layer2::MIBS, 'SIXNET-MIB' => 'sxid',);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
  %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
  'os_ver'     => 'firmwareRevision',
 | 
			
		||||
  's_model'    => 'sxid',
 | 
			
		||||
  'ps1_status' => 'p1status',
 | 
			
		||||
  'ps2_status' => 'p2status',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (%SNMP::Info::Layer2::FUNCS,);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (%SNMP::Info::Layer2::MUNGE,);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
  return 'sixnet';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os {
 | 
			
		||||
  return 'sixnet';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
  my $sixnet = shift;
 | 
			
		||||
 | 
			
		||||
  my $s_model = $sixnet->s_model();
 | 
			
		||||
  return $s_model if defined $s_model;
 | 
			
		||||
 | 
			
		||||
  my $id = $sixnet->id();
 | 
			
		||||
  return unless defined $id;
 | 
			
		||||
 | 
			
		||||
  my $model = SNMP::translateObj($id);
 | 
			
		||||
  return $model ? $model : $id;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer2::Sixnet - SNMP Interface to Sixnet industrial switches
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
Eric Miller
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
    my $sixnet = new SNMP::Info(
 | 
			
		||||
              AutoSpecify => 1,
 | 
			
		||||
              Debug       => 1,
 | 
			
		||||
              DestHost    => 'myswitch',
 | 
			
		||||
              Community   => 'public',
 | 
			
		||||
              Version     => 2
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
    my $class = $sixnet->class();
 | 
			
		||||
    print " Using device sub class : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer2::Sixnet is a subclass of SNMP::Info that provides an
 | 
			
		||||
interface to Sixnet industrial switches.
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<SIXNET-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Inherited MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $sixnet->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'sixnet'
 | 
			
		||||
 | 
			
		||||
=item $sixnet->os()
 | 
			
		||||
 | 
			
		||||
Returns 'sixnet'
 | 
			
		||||
 | 
			
		||||
=item $sixnet->os_ver()
 | 
			
		||||
 | 
			
		||||
Returns the software version returned by C<firmwareRevision>
 | 
			
		||||
 | 
			
		||||
=item $sixnet->model()
 | 
			
		||||
 | 
			
		||||
Returns model type. Returns C<sxid> if it exists, otherwise cross references
 | 
			
		||||
$sixnet->id() with the F<SIXNET-MIB>.
 | 
			
		||||
 | 
			
		||||
=item $sixnet->ps1_status()
 | 
			
		||||
 | 
			
		||||
(C<p1status>)
 | 
			
		||||
 | 
			
		||||
=item $sixnet->ps2_status()
 | 
			
		||||
 | 
			
		||||
(C<p2status>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
to a hash.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -29,43 +29,37 @@
 | 
			
		||||
package SNMP::Info::Layer2::Trapeze;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
use SNMP::Info::Bridge;
 | 
			
		||||
use SNMP::Info::LLDP;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::Trapeze::ISA
 | 
			
		||||
    = qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::LLDP Exporter/;
 | 
			
		||||
    = qw/SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::Trapeze::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,
 | 
			
		||||
    %SNMP::Info::Bridge::MIBS,
 | 
			
		||||
    %SNMP::Info::LLDP::MIBS,
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
    'TRAPEZE-NETWORKS-REGISTRATION-DEVICES-MIB' => 'wirelessLANController',
 | 
			
		||||
    'TRAPEZE-NETWORKS-AP-STATUS-MIB'            => 'trpzApStatNumAps',
 | 
			
		||||
    'TRAPEZE-NETWORKS-CLIENT-SESSION-MIB'       => 'trpzClSessTotalSessions',
 | 
			
		||||
    'TRAPEZE-NETWORKS-SYSTEM-MIB'               => 'trpzSysCpuAverageLoad',
 | 
			
		||||
    'TRAPEZE-NETWORKS-BASIC-MIB'                => 'trpzVersionString',
 | 
			
		||||
    'TRAPEZE-NETWORKS-AP-CONFIG-MIB'  => 'trpzApConfServProfBeaconEnabled',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::GLOBALS,
 | 
			
		||||
    %SNMP::Info::Bridge::GLOBALS,
 | 
			
		||||
    %SNMP::Info::LLDP::GLOBALS,
 | 
			
		||||
    'os_ver' => 'trpzVersionString',
 | 
			
		||||
    'serial' => 'trpzSerialNumber',
 | 
			
		||||
    'mac'    => 'dot1dBaseBridgeAddress',
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
    'os_ver'    => 'trpzVersionString',
 | 
			
		||||
    'tr_serial' => 'trpzSerialNumber',
 | 
			
		||||
    'mac'       => 'dot1dBaseBridgeAddress',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::FUNCS,
 | 
			
		||||
    %SNMP::Info::Bridge::FUNCS,
 | 
			
		||||
    %SNMP::Info::LLDP::FUNCS,
 | 
			
		||||
    %SNMP::Info::Layer2::FUNCS,
 | 
			
		||||
    # TRAPEZE-NETWORKS-AP-STATUS-MIB::trpzApStatApStatusTable
 | 
			
		||||
    'trapeze_ap_mac'      => 'trpzApStatApStatusBaseMac',
 | 
			
		||||
    'trapeze_ap_name'     => 'trpzApStatApStatusApName',
 | 
			
		||||
@@ -127,9 +121,7 @@ $VERSION = '3.33';
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    %SNMP::Info::MUNGE,
 | 
			
		||||
    %SNMP::Info::Bridge::MUNGE,
 | 
			
		||||
    %SNMP::Info::LLDP::MUNGE,
 | 
			
		||||
    %SNMP::Info::Layer2::MUNGE,
 | 
			
		||||
    'trapeze_apif_mac'      => \&SNMP::Info::munge_mac,
 | 
			
		||||
    'trapeze_apif_bssid'    => \&SNMP::Info::munge_mac,
 | 
			
		||||
);
 | 
			
		||||
@@ -146,6 +138,14 @@ sub vendor {
 | 
			
		||||
    return 'juniper';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub serial {
 | 
			
		||||
    my $trapeze = shift;
 | 
			
		||||
    my $ser = $trapeze->trpzSerialNumber();
 | 
			
		||||
#    my $ser = $trapeze->tr_serial();
 | 
			
		||||
 | 
			
		||||
    return $ser;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $trapeze = shift;
 | 
			
		||||
    my $id = $trapeze->id();
 | 
			
		||||
@@ -661,7 +661,7 @@ sub e_serial {
 | 
			
		||||
    my %e_serial;
 | 
			
		||||
 | 
			
		||||
    # Chassis
 | 
			
		||||
    $e_serial{1} = $trapeze->serial();
 | 
			
		||||
    $e_serial{1} = $trapeze->serial() || '';
 | 
			
		||||
 | 
			
		||||
    # APs
 | 
			
		||||
    foreach my $iid ( keys %$ap_serial ) {
 | 
			
		||||
@@ -816,18 +816,11 @@ 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 $trapeze = new SNMP::Info::Layer2::Trapeze(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Bridge
 | 
			
		||||
=item SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
@@ -849,9 +842,7 @@ my $trapeze = new SNMP::Info::Layer2::Trapeze(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes' MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Bridge/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
@@ -898,13 +889,9 @@ proprietary MIBs.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Global Methods imported from SNMP::Info
 | 
			
		||||
=head2 Global Methods imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Bridge
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Bridge/"GLOBALS"> for details.
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
@@ -1146,11 +1133,7 @@ These emulate the F<CISCO-DOT11-MIB>
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Bridge
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Bridge/"TABLE METHODS"> for details.
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Overrides
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										418
									
								
								lib/SNMP/Info/Layer2/Ubiquiti.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										418
									
								
								lib/SNMP/Info/Layer2/Ubiquiti.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,418 @@
 | 
			
		||||
# SNMP::Info::Layer2::Ubiquiti - SNMP Interface to Ubiquiti Devices
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2019 by The Netdisco Developer Team.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
# modification, are permitted provided that the following conditions are met:
 | 
			
		||||
#
 | 
			
		||||
#     * Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
#       this list of conditions and the following disclaimer.
 | 
			
		||||
#     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
#       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
#       documentation and/or other materials provided with the distribution.
 | 
			
		||||
#     * Neither the name of the University of California, Santa Cruz nor the
 | 
			
		||||
#       names of its contributors may be used to endorse or promote products
 | 
			
		||||
#       derived from this software without specific prior written permission.
 | 
			
		||||
#
 | 
			
		||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
			
		||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
package SNMP::Info::Layer2::Ubiquiti;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
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//;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%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 $ubnt = shift;
 | 
			
		||||
 | 
			
		||||
    my $versions = $ubnt->dot11_prod_ver();
 | 
			
		||||
 | 
			
		||||
    foreach my $iid ( keys %$versions ) {
 | 
			
		||||
        my $ver = $versions->{$iid};
 | 
			
		||||
        next unless defined $ver;
 | 
			
		||||
        my $os = $ubnt->os;
 | 
			
		||||
        if($os == 'AirOS'){
 | 
			
		||||
            ## pretty up the version reporting for AirOS to include hardware (XW, XM, etc) and three major groups of firmware
 | 
			
		||||
            my @firmware =  split(/v/, $ver);
 | 
			
		||||
            my @firmwareSplit = split(/\./, $firmware[1]);
 | 
			
		||||
            my @prefix = split(/\./, $ver);
 | 
			
		||||
            $ver = $prefix[0] . '-v' . join('.', @firmwareSplit[0,1,2]);
 | 
			
		||||
        }
 | 
			
		||||
        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 = $ubnt->description() || '';
 | 
			
		||||
    if((lc $ver) =~ /^edgeswitch/){
 | 
			
		||||
        ## EdgeSwitch OS version is second field split by comma and bootcode version is last
 | 
			
		||||
        my @myver = split(/, /, $ver);
 | 
			
		||||
        my @firmware = split(/\./, $myver[1]);
 | 
			
		||||
        my @bootcode = split(/\./, $myver[-1]);
 | 
			
		||||
 | 
			
		||||
        ## Return only three major version groupings and include bootcode version
 | 
			
		||||
        return join('.', @firmware[0,1,2]) . '.-b' . join('.', @bootcode[0,1,2]);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ## EdgeRouter OS version is second field split by space
 | 
			
		||||
    my @myver = split(/ /, $ver);
 | 
			
		||||
    my @firmware = split(/\./, $myver[1]);
 | 
			
		||||
 | 
			
		||||
    if($firmware[2] =~ /hotfix$/){
 | 
			
		||||
        # edge case where EdgeOS has hotfix versions in format "EdgeOS v1.9.7+hotfix.4.5024004.171005.0403"
 | 
			
		||||
        $firmware[2] = $firmware[2] . '.' . $firmware[3]
 | 
			
		||||
    }
 | 
			
		||||
    ## Return only three major version groupings
 | 
			
		||||
    return join('.', @firmware[0,1,2]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    return 'ubiquiti';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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 model 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"
 | 
			
		||||
        }if($ethCount eq 12){
 | 
			
		||||
            ## ER-12
 | 
			
		||||
            return "EdgeRouter 12-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;
 | 
			
		||||
    my $erModel = $ubnt->model;
 | 
			
		||||
 | 
			
		||||
    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, except ER-12 which is eth11
 | 
			
		||||
        if($ifDesc =~ /CPU/ or ($ifDesc eq 'eth0' and !($erModel =~ /EdgeRouter 12/)) or ($ifDesc eq 'eth11' and ($erModel =~ /EdgeRouter 12/))){
 | 
			
		||||
            my $mac = $ubnt->ifPhysAddress->{$iid};
 | 
			
		||||
 | 
			
		||||
            # syntax stolen from sub munge_mac in SNMP::Info
 | 
			
		||||
            $mac = lc join( ':', map { sprintf "%02x", $_ } unpack( 'C*', $mac ) );
 | 
			
		||||
            return $mac if $mac =~ /^([0-9A-F][0-9A-F]:){5}[0-9A-F][0-9A-F]$/i;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # MAC malformed or missing
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub interfaces {
 | 
			
		||||
    my $ubnt = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $interfaces = $ubnt->i_index($partial)       || {};
 | 
			
		||||
    my $i_descr    = $ubnt->i_description($partial) || {};
 | 
			
		||||
    my $return = {};
 | 
			
		||||
 | 
			
		||||
    foreach my $iid ( keys %$i_descr ) {
 | 
			
		||||
        # Slot: 0 Port: 4 Gigabit - Level
 | 
			
		||||
        if ($i_descr->{$iid} =~ m/([0-9]+)[^0-9]+([0-9]+)/) {
 | 
			
		||||
            $return->{$iid} = $1 .'/'. $2;
 | 
			
		||||
            next;
 | 
			
		||||
        }
 | 
			
		||||
        # Link Aggregate 4
 | 
			
		||||
        if ($i_descr->{$iid} =~ m/Link Aggregate (\d+)/) {
 | 
			
		||||
            $return->{$iid} = '3/'. $1;
 | 
			
		||||
            next;
 | 
			
		||||
        }
 | 
			
		||||
        # else
 | 
			
		||||
        $return->{$iid} = $i_descr->{$iid};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_ignore {
 | 
			
		||||
    my $l2      = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $interfaces = $l2->interfaces($partial) || {};
 | 
			
		||||
    my $i_descr    = $l2->i_description($partial) || {};
 | 
			
		||||
 | 
			
		||||
    my %i_ignore;
 | 
			
		||||
    foreach my $if ( keys %$interfaces ) {
 | 
			
		||||
 | 
			
		||||
        # CPU Interface
 | 
			
		||||
        if ( $i_descr->{$if} =~ /CPU Interface/i ) {
 | 
			
		||||
            $i_ignore{$if}++;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return \%i_ignore;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer2::Ubiquiti - SNMP Interface to Ubiquiti Access Points
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
Max Kosmach
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
 # Let SNMP::Info determine the correct subclass for you.
 | 
			
		||||
 my $ubnt = new SNMP::Info(
 | 
			
		||||
                          AutoSpecify => 1,
 | 
			
		||||
                          Debug       => 1,
 | 
			
		||||
                          DestHost    => 'myswitch',
 | 
			
		||||
                          Community   => 'public',
 | 
			
		||||
                          Version     => 2
 | 
			
		||||
                        )
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
 my $class = $ubnt->class();
 | 
			
		||||
 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Provides abstraction to the configuration information obtainable from
 | 
			
		||||
Ubiquiti Access Point through SNMP.
 | 
			
		||||
 | 
			
		||||
=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'
 | 
			
		||||
 | 
			
		||||
=item $ubnt->model()
 | 
			
		||||
 | 
			
		||||
Returns the model extracted from C<dot11manufacturerProductName>, with fallback to some complex logic for EdgeMax devices
 | 
			
		||||
 | 
			
		||||
=item $ubnt->serial()
 | 
			
		||||
 | 
			
		||||
Serial Number.
 | 
			
		||||
 | 
			
		||||
=item $ubnt->mac()
 | 
			
		||||
 | 
			
		||||
Bridge MAC address.
 | 
			
		||||
 | 
			
		||||
=item $ubnt->os()
 | 
			
		||||
 | 
			
		||||
Returns C<AirOS>, C<UniFi> or C<EdgeOS> depending on model.
 | 
			
		||||
 | 
			
		||||
=item $ubnt->os_ver()
 | 
			
		||||
 | 
			
		||||
Returns the software version extracted from C<dot11manufacturerProductVersion>, with fallback to description splitting for EdgeMax devices
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Global Methods imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Global Methods imported from SNMP::Info::IEEE802dot11
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::IEEE802dot11/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
to a hash.
 | 
			
		||||
 | 
			
		||||
=head2 Overrides
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $ubnt->interfaces()
 | 
			
		||||
 | 
			
		||||
Uses the i_name() field.
 | 
			
		||||
 | 
			
		||||
=item $ubnt->i_ignore()
 | 
			
		||||
 | 
			
		||||
Ignores interfaces with "CPU Interface" in them.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::IEEE802dot11
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::IEEE802dot11/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer2::ZyXEL_DSLAM
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Max Baker
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,22 +30,23 @@
 | 
			
		||||
package SNMP::Info::Layer2::ZyXEL_DSLAM;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::ZyXEL_DSLAM::ISA       = qw/SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::ZyXEL_DSLAM::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
# Set for No CDP
 | 
			
		||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer2::FUNCS,
 | 
			
		||||
    'ip_adresses'   => 'ipAdEntAddr',
 | 
			
		||||
    'ip_addresses'  => 'ipAdEntAddr',
 | 
			
		||||
    'i_name'        => 'ifDescr',
 | 
			
		||||
    'i_description' => 'adslLineConfProfile',
 | 
			
		||||
);
 | 
			
		||||
@@ -58,7 +58,7 @@ $VERSION = '3.33';
 | 
			
		||||
 | 
			
		||||
sub layers {
 | 
			
		||||
    my $zyxel  = shift;
 | 
			
		||||
    my $layers = $zyxel->layers();
 | 
			
		||||
    my $layers = $zyxel->SUPER::layers();
 | 
			
		||||
    return $layers if defined $layers;
 | 
			
		||||
 | 
			
		||||
    # If these don't claim to have any layers, so we'll give them 1+2
 | 
			
		||||
@@ -77,7 +77,7 @@ sub os_ver {
 | 
			
		||||
    my $zyxel = shift;
 | 
			
		||||
    my $descr = $zyxel->description();
 | 
			
		||||
 | 
			
		||||
    if ( $descr =~ m/version (\S+) / ) {
 | 
			
		||||
    if ( defined ($descr) && $descr =~ m/version (\S+) / ) {
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
@@ -88,11 +88,13 @@ sub model {
 | 
			
		||||
 | 
			
		||||
    my $desc = $zyxel->description();
 | 
			
		||||
 | 
			
		||||
    if ( $desc =~ /8-port ADSL Module\(Annex A\)/ ) {
 | 
			
		||||
    if (defined $desc) {
 | 
			
		||||
      if ($desc =~ /8-port ADSL Module\(Annex A\)/) {
 | 
			
		||||
        return "AAM1008-61";
 | 
			
		||||
    }
 | 
			
		||||
    elsif ( $desc =~ /8-port ADSL Module\(Annex B\)/ ) {
 | 
			
		||||
      }
 | 
			
		||||
      elsif ($desc =~ /8-port ADSL Module\(Annex B\)/) {
 | 
			
		||||
        return "AAM1008-63";
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
@@ -102,7 +104,9 @@ sub ip {
 | 
			
		||||
    my $ip_hash = $zyxel->ip_addresses();
 | 
			
		||||
    my $found_ip;
 | 
			
		||||
 | 
			
		||||
    foreach my $ip ( keys %{$ip_hash} ) {
 | 
			
		||||
    # Since hashes are random add sort so we get the same address each time
 | 
			
		||||
    # if there happens to be more than one. Will return highest numbered address
 | 
			
		||||
    foreach my $ip ( sort keys %{$ip_hash} ) {
 | 
			
		||||
        $found_ip = $ip
 | 
			
		||||
            if ( defined $ip
 | 
			
		||||
            and $ip =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ );
 | 
			
		||||
@@ -128,11 +132,11 @@ Dmitry Sergienko (C<dmitry@trifle.net>)
 | 
			
		||||
                          Debug       => 1,
 | 
			
		||||
                          DestHost    => 'myhub',
 | 
			
		||||
                          Community   => 'public',
 | 
			
		||||
                          Version     => 1
 | 
			
		||||
                          Version     => 2
 | 
			
		||||
                        )
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
 my $class      = $l2->class();
 | 
			
		||||
 my $class      = $zyxel->class();
 | 
			
		||||
 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
@@ -172,11 +176,11 @@ These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=item $zyxel->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'ZyXEL' :)
 | 
			
		||||
Returns 'zyxel'
 | 
			
		||||
 | 
			
		||||
=item $zyxel->os()
 | 
			
		||||
 | 
			
		||||
Returns 'ZyXEL' 
 | 
			
		||||
Returns 'zyxel'
 | 
			
		||||
 | 
			
		||||
=item $zyxel->os_ver()
 | 
			
		||||
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer3 - SNMP Interface to Layer3 devices
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Max Baker -- All changes from Version 0.7 on
 | 
			
		||||
#
 | 
			
		||||
@@ -33,6 +32,7 @@
 | 
			
		||||
package SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
use SNMP::Info::Bridge;
 | 
			
		||||
@@ -42,23 +42,25 @@ use SNMP::Info::PowerEthernet;
 | 
			
		||||
use SNMP::Info::IPv6;
 | 
			
		||||
use SNMP::Info::AdslLine;
 | 
			
		||||
use SNMP::Info::LLDP;
 | 
			
		||||
use SNMP::Info::DocsisHE;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer3::ISA = qw/
 | 
			
		||||
    SNMP::Info::PowerEthernet SNMP::Info::IPv6
 | 
			
		||||
    SNMP::Info::Entity SNMP::Info::EtherLike
 | 
			
		||||
    SNMP::Info::Bridge SNMP::Info::AdslLine
 | 
			
		||||
    SNMP::Info::LLDP
 | 
			
		||||
    SNMP::Info::LLDP SNMP::Info::DocsisHE
 | 
			
		||||
    SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::Layer3::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %GLOBALS, %FUNCS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,
 | 
			
		||||
    %SNMP::Info::AdslLine::MIBS,
 | 
			
		||||
    %SNMP::Info::Bridge::MIBS,
 | 
			
		||||
    %SNMP::Info::DocsisHE::MIBS,
 | 
			
		||||
    %SNMP::Info::EtherLike::MIBS,
 | 
			
		||||
    %SNMP::Info::Entity::MIBS,
 | 
			
		||||
    %SNMP::Info::PowerEthernet::MIBS,
 | 
			
		||||
@@ -66,6 +68,7 @@ $VERSION = '3.33';
 | 
			
		||||
    %SNMP::Info::LLDP::MIBS,
 | 
			
		||||
    'IP-MIB'   => 'ipNetToMediaIfIndex',
 | 
			
		||||
    'OSPF-MIB' => 'ospfRouterId',
 | 
			
		||||
    'ISIS-MIB' => 'isisSysID',
 | 
			
		||||
    'BGP4-MIB' => 'bgpIdentifier',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
@@ -75,6 +78,7 @@ $VERSION = '3.33';
 | 
			
		||||
    %SNMP::Info::GLOBALS,
 | 
			
		||||
    %SNMP::Info::AdslLine::GLOBALS,
 | 
			
		||||
    %SNMP::Info::Bridge::GLOBALS,
 | 
			
		||||
    %SNMP::Info::DocsisHE::GLOBALS,
 | 
			
		||||
    %SNMP::Info::EtherLike::GLOBALS,
 | 
			
		||||
    %SNMP::Info::Entity::GLOBALS,
 | 
			
		||||
    %SNMP::Info::PowerEthernet::GLOBALS,
 | 
			
		||||
@@ -92,6 +96,7 @@ $VERSION = '3.33';
 | 
			
		||||
    %SNMP::Info::FUNCS,
 | 
			
		||||
    %SNMP::Info::AdslLine::FUNCS,
 | 
			
		||||
    %SNMP::Info::Bridge::FUNCS,
 | 
			
		||||
    %SNMP::Info::DocsisHE::FUNCS,
 | 
			
		||||
    %SNMP::Info::EtherLike::FUNCS,
 | 
			
		||||
    %SNMP::Info::Entity::FUNCS,
 | 
			
		||||
    %SNMP::Info::PowerEthernet::FUNCS,
 | 
			
		||||
@@ -123,6 +128,20 @@ $VERSION = '3.33';
 | 
			
		||||
    'ospf_peer_id'    => 'ospfNbrRtrId',
 | 
			
		||||
    'ospf_peer_state' => 'ospfNbrState',
 | 
			
		||||
 | 
			
		||||
    # ISIS-MIB::isisCircTable
 | 
			
		||||
    'isis_circ_if_idx'      => 'isisCircIfIndex' ,
 | 
			
		||||
    'isis_circ_admin'       => 'isisCircAdminState',
 | 
			
		||||
    'isis_circ_type'        => 'isisCircType',
 | 
			
		||||
    'isis_circ_level_type'  => 'isisCircLevelType',
 | 
			
		||||
 | 
			
		||||
    # ISIS-MIB::isisISAdjTable
 | 
			
		||||
    'isis_adj_state'   => 'isisISAdjState',
 | 
			
		||||
    'isis_adj_type'    => 'isisISAdjNeighSysType',
 | 
			
		||||
    'isis_adj_usage'   => 'isisISAdjUsage',
 | 
			
		||||
    'isis_adj_id'      => 'isisISAdjNeighSysID',
 | 
			
		||||
    'isis_adj_ip_type' => 'isisISAdjIPAddrType',
 | 
			
		||||
    'isis_adj'         => 'isisISAdjIPAddrAddress',
 | 
			
		||||
 | 
			
		||||
    # BGP4-MIB::bgpPeerTable
 | 
			
		||||
    'bgp_peers'               => 'bgpPeerLocalAddr',
 | 
			
		||||
    'bgp_peer_id'             => 'bgpPeerIdentifier',
 | 
			
		||||
@@ -152,6 +171,7 @@ $VERSION = '3.33';
 | 
			
		||||
    %SNMP::Info::AdslLine::MUNGE,
 | 
			
		||||
    %SNMP::Info::Bridge::MUNGE,
 | 
			
		||||
    %SNMP::Info::EtherLike::MUNGE,
 | 
			
		||||
    %SNMP::Info::DocsisHE::MUNGE,
 | 
			
		||||
    %SNMP::Info::Entity::MUNGE,
 | 
			
		||||
    %SNMP::Info::PowerEthernet::MUNGE,
 | 
			
		||||
    %SNMP::Info::IPv6::MUNGE,
 | 
			
		||||
@@ -161,6 +181,32 @@ $VERSION = '3.33';
 | 
			
		||||
    'n2p_paddr'    => \&SNMP::Info::munge_mac,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub isis_peers {
 | 
			
		||||
    my $l3 = shift;
 | 
			
		||||
 | 
			
		||||
    my $isis_peers = {};
 | 
			
		||||
 | 
			
		||||
    # Returns hexstrings. Need to convert to IPv4 dotted or IPv6 hex notation
 | 
			
		||||
    my $adjacencies = $l3->isis_adj();
 | 
			
		||||
    foreach my $key (keys %$adjacencies) {
 | 
			
		||||
        my $hexstr = $adjacencies->{$key};
 | 
			
		||||
        my $l = length $hexstr;
 | 
			
		||||
        my $ip;
 | 
			
		||||
        # 4 bytes = IPv4
 | 
			
		||||
        if ($l == 4) {
 | 
			
		||||
            $ip = join(".", unpack("C*", $hexstr));
 | 
			
		||||
            $isis_peers->{$key} = $ip;
 | 
			
		||||
        }
 | 
			
		||||
        # 16 bytes = IPv6
 | 
			
		||||
        elsif ($l == 16) {
 | 
			
		||||
            $ip = unpack("H*", $hexstr);
 | 
			
		||||
            $ip =~ s/....(?=.)\K/:/sg ;
 | 
			
		||||
            $isis_peers->{$key} = $ip;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return $isis_peers;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Method OverRides
 | 
			
		||||
 | 
			
		||||
sub root_ip {
 | 
			
		||||
@@ -194,29 +240,18 @@ sub root_ip {
 | 
			
		||||
sub serial {
 | 
			
		||||
    my $l3 = shift;
 | 
			
		||||
 | 
			
		||||
    my $serial1 = $l3->serial1();
 | 
			
		||||
    my $e_parent = $l3->e_parent() || {};
 | 
			
		||||
 | 
			
		||||
    foreach my $iid ( keys %$e_parent ) {
 | 
			
		||||
        my $parent = $e_parent->{$iid};
 | 
			
		||||
        if ( $parent eq '0' ) {
 | 
			
		||||
            my $serial = $l3->e_serial($iid);
 | 
			
		||||
            if ( $serial ) {
 | 
			
		||||
                return $serial->{$iid};
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                my $descr = $l3->e_descr($iid);
 | 
			
		||||
                if ( $descr and $descr =~ /serial#?:\s*([a-z0-9]+)/i )
 | 
			
		||||
                {
 | 
			
		||||
                    return $1;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    my $entity_serial = $l3->entity_derived_serial();
 | 
			
		||||
    if ( defined $entity_serial and $entity_serial !~ /^\s*$/ ){
 | 
			
		||||
        return $entity_serial;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ );
 | 
			
		||||
    my $serial1 = $l3->serial1();
 | 
			
		||||
    if ( defined $serial1 and $serial1 !~ /^\s*$/ ) {
 | 
			
		||||
        return $serial1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# $l3->model() - the sysObjectID returns an IID to an entry in
 | 
			
		||||
@@ -295,15 +330,25 @@ sub interfaces {
 | 
			
		||||
 | 
			
		||||
    # Check for duplicates in ifDescr, if so uniquely identify by adding
 | 
			
		||||
    # ifIndex to repeated values
 | 
			
		||||
    my %seen;
 | 
			
		||||
    foreach my $iid ( keys %$i_descr ) {
 | 
			
		||||
    my (%seen, %first_seen_as);
 | 
			
		||||
    foreach my $iid ( sort keys %$i_descr ) {
 | 
			
		||||
        my $port = $i_descr->{$iid};
 | 
			
		||||
        next unless defined $port;
 | 
			
		||||
 | 
			
		||||
        $port = SNMP::Info::munge_null($port);
 | 
			
		||||
        $port =~ s/^\s+//; $port =~ s/\s+$//;
 | 
			
		||||
        next unless length $port;
 | 
			
		||||
 | 
			
		||||
        if ( $seen{$port}++ ) {
 | 
			
		||||
            # (#320) also fixup the port this is a duplicate of
 | 
			
		||||
            $interfaces->{ $first_seen_as{$port} }
 | 
			
		||||
              = sprintf( "%s (%d)", $port, $first_seen_as{$port} );
 | 
			
		||||
 | 
			
		||||
            $interfaces->{$iid} = sprintf( "%s (%d)", $port, $iid );
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            $interfaces->{$iid} = $port;
 | 
			
		||||
            $first_seen_as{$port} = $iid;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return $interfaces;
 | 
			
		||||
@@ -312,8 +357,8 @@ sub interfaces {
 | 
			
		||||
sub vendor {
 | 
			
		||||
    my $l3 = shift;
 | 
			
		||||
 | 
			
		||||
    my $descr = $l3->description();
 | 
			
		||||
    my $id    = $l3->id();
 | 
			
		||||
    my $descr = $l3->description() || '';
 | 
			
		||||
    my $id    = $l3->id() || '';
 | 
			
		||||
 | 
			
		||||
    # .1.3.6.1.4.1.9.1 is the CISCO-PRODUCTS-MIB
 | 
			
		||||
    # .1.3.6.1.4.1.9.9.368.4 is an old tree that Cisco CSSs were numbered from
 | 
			
		||||
@@ -418,6 +463,10 @@ after determining a more specific class using the method above.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::LLDP
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::DocsisHE
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::AdslLine
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
@@ -426,6 +475,8 @@ after determining a more specific class using the method above.
 | 
			
		||||
 | 
			
		||||
=item F<IP-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<ISIS-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<OSPF-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<BGP4-MIB>
 | 
			
		||||
@@ -434,7 +485,7 @@ after determining a more specific class using the method above.
 | 
			
		||||
 | 
			
		||||
=head2 Inherited MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
See L<SNMP::Info/"REQUIREMENTS"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Bridge/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
@@ -448,6 +499,10 @@ See L<SNMP::Info::IPv6/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::DocsisHE/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::AdslLine/"Required MIBs"> for its MIB requirements.
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP
 | 
			
		||||
@@ -490,8 +545,7 @@ Removes 'cisco'  from cisco devices for readability.
 | 
			
		||||
 | 
			
		||||
=item $l3->serial()
 | 
			
		||||
 | 
			
		||||
Tries to cull a serial number from F<ENTITY-MIB>, description, and
 | 
			
		||||
F<OLD-CISCO->... MIB.
 | 
			
		||||
Returns a serial number if found from F<ENTITY-MIB> and F<OLD-CISCO->... MIB.
 | 
			
		||||
 | 
			
		||||
=item $l3->vendor()
 | 
			
		||||
 | 
			
		||||
@@ -507,7 +561,7 @@ found:  OSPF Router ID (C<ospfRouterId>) or any OSPF Host IP Address
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info/"GLOBALS"> for details.
 | 
			
		||||
See L<SNMP::Info/"USAGE"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Global Methods imported from SNMP::Info::Bridge
 | 
			
		||||
 | 
			
		||||
@@ -533,6 +587,14 @@ See L<SNMP::Info::IPv6/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::LLDP/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Global Methods imported from SNMP::Info::DocsisHE
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::DocsisHE/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Global Methods imported from SNMP::Info::AdslLine
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::AdslLine/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
@@ -562,7 +624,7 @@ Returns reference to hash of iid to current link duplex setting.
 | 
			
		||||
Maps $l3->el_index() to $l3->el_duplex, then culls out
 | 
			
		||||
full,half, or auto and sets the map to that value.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Etherlike> for the el_index() and el_duplex() methods.
 | 
			
		||||
See L<SNMP::Info::EtherLike> for the el_index() and el_duplex() methods.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
@@ -778,9 +840,85 @@ routers
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 IS-IS Circuit Table
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $l3->isis_circ_if_idx()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of the interface index associated with the IS-IS
 | 
			
		||||
circuit
 | 
			
		||||
(C<isisCircIfIndex>)
 | 
			
		||||
 | 
			
		||||
=item $l3->isis_circ_admin()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of the IS-IS circuit's admin status
 | 
			
		||||
 | 
			
		||||
(C<isisCircAdminState>)
 | 
			
		||||
 | 
			
		||||
=item $l3->isis_circ_type()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of the IS-IS circuit's type
 | 
			
		||||
 | 
			
		||||
(C<isisCircType>)
 | 
			
		||||
 | 
			
		||||
=item $l3->isis_circ_level_type()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of the IS-IS circuit's level
 | 
			
		||||
 | 
			
		||||
(C<isisCircLevelType>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 IS-IS Adjacency Table
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $l3->isis_adj_id()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of the peer id of adjacencies.
 | 
			
		||||
 | 
			
		||||
(C<isisISAdjNeighSysID>)
 | 
			
		||||
 | 
			
		||||
=item $l3->isis_adj_type()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of the type of adjacencies (Level 1
 | 
			
		||||
Intermediate System, Level 2 Intermediate System, Level 1+2
 | 
			
		||||
Intermediate System, unknown)
 | 
			
		||||
 | 
			
		||||
(C<isisISAdjNeighSysType>)
 | 
			
		||||
 | 
			
		||||
=item $l3->isis_adj_usage()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of the type of adjacencies in use
 | 
			
		||||
(undefined, Level 1, Level 2, Level1+2)
 | 
			
		||||
 | 
			
		||||
(C<isisISAdjNeighUsage>)
 | 
			
		||||
 | 
			
		||||
=item $l3->isis_adj_ip_type()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of type of address (IPv4, IPv6, etc) on adjacencies.
 | 
			
		||||
 | 
			
		||||
(C<isisISAdjIPAddrType>)
 | 
			
		||||
 | 
			
		||||
=item $l3->isis_adj()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of addresses (IPv4, IPv6, etc) on adjacencies.
 | 
			
		||||
Note this returns hash-strings, for IPs, use $l3->isis_peers()
 | 
			
		||||
 | 
			
		||||
(C<isisISAdjIPAddrAddress>)
 | 
			
		||||
 | 
			
		||||
=item $l3->isis_peers()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of addresses (IPv4, IPv6) on adjacencies.
 | 
			
		||||
Convert hash strings from isis_adj to proper
 | 
			
		||||
IP (v4 and v6) formatting.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info/"TABLE METHODS"> for details.
 | 
			
		||||
See L<SNMP::Info/"USAGE"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Bridge
 | 
			
		||||
 | 
			
		||||
@@ -806,4 +944,12 @@ See L<SNMP::Info::IPv6/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::DocsisHE
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::DocsisHE/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::AdslLine
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::AdslLine/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer3::Aironet
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond.
 | 
			
		||||
#
 | 
			
		||||
@@ -33,15 +32,16 @@
 | 
			
		||||
package SNMP::Info::Layer3::Aironet;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer3::Aironet::ISA       = qw/SNMP::Info::Layer3 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer3::Aironet::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
@@ -69,8 +69,8 @@ $VERSION = '3.33';
 | 
			
		||||
    'bp_index2' => 'dot1dBasePortIfIndex',
 | 
			
		||||
 | 
			
		||||
    # AWC Interface Table (awcIfTable)
 | 
			
		||||
    'awc_default_mac' => 'awcIfDefaultPhyAddress',
 | 
			
		||||
    'awc_mac'         => 'awcIfPhyAddress',
 | 
			
		||||
    'awc_default_mac' => 'awcIfDefaultPhysAddress',
 | 
			
		||||
    'awc_mac'         => 'awcIfPhysAddress',
 | 
			
		||||
    'awc_ip'          => 'awcIfIpAddress',
 | 
			
		||||
    'awc_netmask'     => 'awcIfIpNetMask',
 | 
			
		||||
    'awc_msdu'        => 'awcIfMSDUMaxLength',
 | 
			
		||||
@@ -279,9 +279,6 @@ after determining a more specific class using the method above.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
These MIBs are now included in the v2.tar.gz archive available from
 | 
			
		||||
ftp.cisco.com.  Make sure you have a current version. 
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP
 | 
			
		||||
@@ -364,13 +361,13 @@ Ignores ports that are of type ``rptr'' and ``lo''.
 | 
			
		||||
 | 
			
		||||
Gives the default MAC address of each interface.
 | 
			
		||||
 | 
			
		||||
C<awcIfDefaultPhyAddress>
 | 
			
		||||
C<awcIfDefaultPhysAddress>
 | 
			
		||||
 | 
			
		||||
=item $aironet->awc_mac()
 | 
			
		||||
 | 
			
		||||
Gives the actual MAC address of each interface.
 | 
			
		||||
 | 
			
		||||
C<awcIfPhyAddress>
 | 
			
		||||
C<awcIfPhysAddress>
 | 
			
		||||
 | 
			
		||||
=item $aironet->awc_ip()
 | 
			
		||||
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer3::AlcatelLucent
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Bill Fenner
 | 
			
		||||
#
 | 
			
		||||
@@ -30,6 +29,7 @@
 | 
			
		||||
package SNMP::Info::Layer3::AlcatelLucent;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
@@ -47,9 +47,9 @@ use SNMP::Info::LLDP;
 | 
			
		||||
    SNMP::Info::MAU SNMP::Info::Layer3 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer3::AlcatelLucent::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
@@ -112,15 +112,15 @@ sub vendor {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os_ver {
 | 
			
		||||
    my $alu = shift;
 | 
			
		||||
   my $alu = shift;
 | 
			
		||||
 | 
			
		||||
    my $descr = $alu->description();
 | 
			
		||||
    if ( $descr =~ m/^(\S+)/ ) {
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
   my $descr = $alu->description();
 | 
			
		||||
   if (defined ($descr)) {
 | 
			
		||||
     return $1 if $descr =~ m/\b(\d[\.\d]+R\d+) (?:GA|Service Release), /;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
    # No clue what this will try but hey
 | 
			
		||||
    return $alu->SUPER::os_ver();
 | 
			
		||||
   # No clue what this will try but hey
 | 
			
		||||
   return $alu->SUPER::os_ver();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# ps1_type, ps1_status, ps2_type, ps2_status:
 | 
			
		||||
@@ -372,7 +372,7 @@ These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=item $alu->vendor()
 | 
			
		||||
 | 
			
		||||
    Returns 'alcatel-lucent'
 | 
			
		||||
Returns 'alcatel-lucent'
 | 
			
		||||
 | 
			
		||||
=item $alu->model()
 | 
			
		||||
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer3::AlteonAD
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Eric Miller
 | 
			
		||||
# All Rights Reserved
 | 
			
		||||
@@ -31,15 +30,16 @@
 | 
			
		||||
package SNMP::Info::Layer3::AlteonAD;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer3::AlteonAD::ISA       = qw/SNMP::Info::Layer3 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer3::AlteonAD::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
 | 
			
		||||
our ($VERSION, %GLOBALS, %FUNCS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
@@ -450,11 +450,6 @@ Eric Miller
 | 
			
		||||
Abstraction subclass for Radware Alteon Series ADC switches and
 | 
			
		||||
Nortel BladeCenter Layer2-3 GbE Switch Modules.
 | 
			
		||||
 | 
			
		||||
For speed or debugging purposes you can call the subclass directly, but not
 | 
			
		||||
after determining a more specific class using the method above. 
 | 
			
		||||
 | 
			
		||||
 my $alteon = new SNMP::Info::Layer3::AlteonAD(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer3::Altiga
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Jeroen van Ingen Schenau
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,16 +30,17 @@
 | 
			
		||||
package SNMP::Info::Layer3::Altiga;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer3::Altiga::ISA = qw/SNMP::Info::Layer3 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer3::Altiga::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE 
 | 
			
		||||
            $int_include_vpn $fake_idx $type_class/;
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE,
 | 
			
		||||
            $int_include_vpn, $fake_idx, $type_class);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
            %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
@@ -281,7 +281,7 @@ Jeroen van Ingen Schenau
 | 
			
		||||
                          Debug       => 1,
 | 
			
		||||
                          DestHost    => 'my_vpn_host',
 | 
			
		||||
                          Community   => 'public',
 | 
			
		||||
                          Version     => 1
 | 
			
		||||
                          Version     => 2
 | 
			
		||||
                        )
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
@@ -304,6 +304,12 @@ Subclass for Cisco (formerly Altiga) VPN concentrators
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<ALTIGA-VERSION-STATS-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<ALTIGA-SESSION-STATS-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<ALTIGA-HARDWARE-STATS-MIB>
 | 
			
		||||
 | 
			
		||||
=item Inherited Classes' MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer3::Arista
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Arista Networks, Inc.
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,49 +30,44 @@
 | 
			
		||||
package SNMP::Info::Layer3::Arista;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
use SNMP::Info::MAU;
 | 
			
		||||
use SNMP::Info::LLDP;
 | 
			
		||||
use SNMP::Info::Aggregate 'agg_ports_ifstack';
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer3::Arista::ISA = qw/
 | 
			
		||||
    SNMP::Info::Aggregate
 | 
			
		||||
    SNMP::Info::LLDP
 | 
			
		||||
    SNMP::Info::MAU
 | 
			
		||||
    SNMP::Info::Layer3 Exporter
 | 
			
		||||
    SNMP::Info::Layer3
 | 
			
		||||
    Exporter
 | 
			
		||||
/;
 | 
			
		||||
@SNMP::Info::Layer3::Arista::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
    %SNMP::Info::MAU::MIBS,
 | 
			
		||||
    %SNMP::Info::LLDP::MIBS,
 | 
			
		||||
    %SNMP::Info::Aggregate::MIBS,
 | 
			
		||||
    'ARISTA-PRODUCTS-MIB' => 'aristaProducts',
 | 
			
		||||
    'ARISTA-PRODUCTS-MIB' => 'aristaDCS7124S',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer3::GLOBALS,
 | 
			
		||||
    %SNMP::Info::MAU::GLOBALS,
 | 
			
		||||
    %SNMP::Info::LLDP::GLOBALS,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer3::FUNCS,
 | 
			
		||||
    %SNMP::Info::MAU::FUNCS,
 | 
			
		||||
    %SNMP::Info::LLDP::FUNCS,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    %SNMP::Info::Layer3::MUNGE,
 | 
			
		||||
    %SNMP::Info::MAU::MUNGE,
 | 
			
		||||
    %SNMP::Info::LLDP::MUNGE,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
# use MAU-MIB for admin. duplex and admin. speed
 | 
			
		||||
@@ -92,11 +86,14 @@ sub os {
 | 
			
		||||
 | 
			
		||||
sub os_ver {
 | 
			
		||||
    my $arista = shift;
 | 
			
		||||
    my $descr   = $arista->description();
 | 
			
		||||
    my $os_ver  = undef;
 | 
			
		||||
    my $descr  = $arista->description();
 | 
			
		||||
 | 
			
		||||
    $os_ver = $1 if ( $descr =~ /\s+EOS\s+version\s+(\S+)\s+/ );
 | 
			
		||||
    return $os_ver;
 | 
			
		||||
    if (defined ($descr)) {
 | 
			
		||||
      my $os_ver = undef;
 | 
			
		||||
      $os_ver = $1 if ($descr =~ /\s+EOS\s+version\s+(\S+)\s+/);
 | 
			
		||||
      return $os_ver;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
@@ -131,6 +128,11 @@ sub lldp_if {
 | 
			
		||||
    return $lldp_if;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub set_i_vlan {
 | 
			
		||||
    my ($arista, $vlan, $iid) = @_;
 | 
			
		||||
    return $arista->set_qb_i_vlan($vlan, $iid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub agg_ports { return agg_ports_ifstack(@_) }
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
@@ -154,7 +156,7 @@ Bill Fenner
 | 
			
		||||
                        DestHost    => 'myswitch',
 | 
			
		||||
                        Community   => 'public',
 | 
			
		||||
                        Version     => 2
 | 
			
		||||
                        ) 
 | 
			
		||||
		 	)
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
 my $class      = $arista->class();
 | 
			
		||||
@@ -174,8 +176,6 @@ Subclass for Arista Networks EOS-based devices
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::MAU
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::LLDP
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
@@ -192,8 +192,6 @@ 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::LLDP/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
@@ -204,7 +202,7 @@ These are methods that return scalar values from SNMP
 | 
			
		||||
 | 
			
		||||
=item $arista->vendor()
 | 
			
		||||
 | 
			
		||||
    Returns 'Arista Networks, Inc.'
 | 
			
		||||
Returns 'arista'
 | 
			
		||||
 | 
			
		||||
=item $arista->model()
 | 
			
		||||
 | 
			
		||||
@@ -230,10 +228,6 @@ See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::MAU/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Global Methods imported from SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
@@ -269,8 +263,17 @@ See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::LLDP
 | 
			
		||||
=head1 SET METHODS
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
 | 
			
		||||
These are methods that provide SNMP set functionality for overridden methods
 | 
			
		||||
or provide a simpler interface to complex set operations.  See
 | 
			
		||||
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
 | 
			
		||||
operations.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item set_i_vlan()
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer3::Aruba
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2013 Eric Miller
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,20 +30,19 @@
 | 
			
		||||
package SNMP::Info::Layer3::Aruba;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
use SNMP::Info::LLDP;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer3::Aruba::ISA       = qw/SNMP::Info::LLDP SNMP::Info::Layer3 Exporter/;
 | 
			
		||||
@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/;
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
    %SNMP::Info::LLDP::MIBS,
 | 
			
		||||
    'WLSR-AP-MIB'        => 'wlsrHideSSID',
 | 
			
		||||
    'WLSX-IFEXT-MIB'     => 'ifExtVlanName',
 | 
			
		||||
    'WLSX-POE-MIB'       => 'wlsxPseSlotPowerAvailable',
 | 
			
		||||
@@ -58,7 +56,6 @@ $VERSION = '3.33';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer3::GLOBALS,
 | 
			
		||||
    %SNMP::Info::LLDP::GLOBALS,
 | 
			
		||||
    'aruba_serial_old' => 'wlsxSwitchLicenseSerialNumber',
 | 
			
		||||
    'aruba_serial_new' => 'wlsxSysExtLicenseSerialNumber',
 | 
			
		||||
    'aruba_model'      => 'wlsxModelName',
 | 
			
		||||
@@ -67,7 +64,6 @@ $VERSION = '3.33';
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer3::FUNCS,
 | 
			
		||||
    %SNMP::Info::LLDP::FUNCS,
 | 
			
		||||
 | 
			
		||||
    # WLSR-AP-MIB::wlsrConfigTable
 | 
			
		||||
    'aruba_ap_ssidbcast' => 'wlsrHideSSID',
 | 
			
		||||
@@ -143,7 +139,6 @@ $VERSION = '3.33';
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    %SNMP::Info::Layer3::MUNGE,
 | 
			
		||||
    %SNMP::Info::LLDP::MUNGE,
 | 
			
		||||
    'aruba_ap_fqln'       => \&munge_aruba_fqln,
 | 
			
		||||
    'aruba_ap_type'       => \&SNMP::Info::munge_e_type,
 | 
			
		||||
    'aruba_card_type'     => \&SNMP::Info::munge_e_type,
 | 
			
		||||
@@ -170,10 +165,9 @@ sub vendor {
 | 
			
		||||
    $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';
 | 
			
		||||
      return $oidmap{$id};
 | 
			
		||||
    } else {
 | 
			
		||||
      return 'aruba';
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -183,7 +177,7 @@ sub os_ver {
 | 
			
		||||
    return unless defined $descr;
 | 
			
		||||
 | 
			
		||||
    if ( $descr =~ m/Version\s+(\d+\.\d+\.\d+\.\d+)/ ) {
 | 
			
		||||
	return $1;
 | 
			
		||||
      return $1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return;
 | 
			
		||||
@@ -1421,11 +1415,6 @@ 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
 | 
			
		||||
							
								
								
									
										340
									
								
								lib/SNMP/Info/Layer3/ArubaCX.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										340
									
								
								lib/SNMP/Info/Layer3/ArubaCX.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,340 @@
 | 
			
		||||
# SNMP::Info::Layer3::ArubaCX
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2021 Jeroen van Ingen
 | 
			
		||||
# 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::ArubaCX;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::IEEE802dot3ad 'agg_ports_lag';
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
use SNMP::Info::IEEE802_Bridge;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer3::ArubaCX::ISA = qw/
 | 
			
		||||
  SNMP::Info::IEEE802dot3ad
 | 
			
		||||
  SNMP::Info::Layer3
 | 
			
		||||
  SNMP::Info::IEEE802_Bridge
 | 
			
		||||
  Exporter
 | 
			
		||||
/;
 | 
			
		||||
@SNMP::Info::Layer3::ArubaCX::EXPORT_OK = qw/
 | 
			
		||||
  agg_ports
 | 
			
		||||
/;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
    %SNMP::Info::IEEE802dot3ad::MIBS,
 | 
			
		||||
    %SNMP::Info::IEEE802_Bridge::MIBS,
 | 
			
		||||
    'ARUBAWIRED-FAN-MIB' => 'arubaWiredFanName',
 | 
			
		||||
    'ARUBAWIRED-VSF-MIB' => 'arubaWiredVsfTrapEnable',
 | 
			
		||||
    'ARUBAWIRED-POWERSUPPLY-MIB' => 'arubaWiredPSUName',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer3::GLOBALS,
 | 
			
		||||
    %SNMP::Info::IEEE802_Bridge::GLOBALS,
 | 
			
		||||
    'ps1_type' => 'arubaWiredPSUProductName.1.1',
 | 
			
		||||
    'ps2_type' => 'arubaWiredPSUProductName.1.2',
 | 
			
		||||
    'ps1_status' => 'arubaWiredPSUState.1.1',
 | 
			
		||||
    'ps2_status' => 'arubaWiredPSUState.1.2',
 | 
			
		||||
    'vsf_topology' => 'arubaWiredVsfTopology',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer3::FUNCS,
 | 
			
		||||
    %SNMP::Info::IEEE802dot3ad::FUNCS,
 | 
			
		||||
    %SNMP::Info::IEEE802_Bridge::FUNCS,
 | 
			
		||||
    'fan_names' => 'arubaWiredFanName',
 | 
			
		||||
    'fan_states' => 'arubaWiredFanState',
 | 
			
		||||
    'psu_names' => 'arubaWiredPSUName',
 | 
			
		||||
    'psu_types' => 'arubaWiredPSUProductName',
 | 
			
		||||
    'psu_states' => 'arubaWiredPSUState',
 | 
			
		||||
    'vsf_prod_names' => 'arubaWiredVsfMemberProductName',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    %SNMP::Info::Layer3::MUNGE,
 | 
			
		||||
    %SNMP::Info::IEEE802dot3ad::MUNGE,
 | 
			
		||||
    %SNMP::Info::IEEE802_Bridge::MUNGE,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub _at_pbb_one {
 | 
			
		||||
    my $in = shift // {};
 | 
			
		||||
    my $ret = {};
 | 
			
		||||
    foreach my $key (keys %$in) {
 | 
			
		||||
        if ($key =~ /^1\.(\d+)$/) {
 | 
			
		||||
            $ret->{$1} = $in->{$key};
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return $ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub fan {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    my $names = $cx->fan_names() || {};
 | 
			
		||||
    my $states = $cx->fan_states() || {};
 | 
			
		||||
    my @ary = ();
 | 
			
		||||
    foreach my $idx (sort keys %$names) {
 | 
			
		||||
        my $name = $names->{$idx} // 'n/a';
 | 
			
		||||
        my $state = $states->{$idx} // 'n/a';
 | 
			
		||||
        push @ary, sprintf("%s: %s", $name, $state);
 | 
			
		||||
    }
 | 
			
		||||
    return join (', ', @ary);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    my $mfg = $cx->entPhysicalMfgName(1) || {};
 | 
			
		||||
    my $vendor = $mfg->{1} || "aruba";
 | 
			
		||||
    return lc($vendor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub stack_info {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    my $vsf_topo = $cx->vsf_topology();
 | 
			
		||||
    if (defined $vsf_topo and $vsf_topo ne 'standalone') {
 | 
			
		||||
        my $member_prod_names = $cx->vsf_prod_names() || {};
 | 
			
		||||
        my $num_members = scalar keys %$member_prod_names;
 | 
			
		||||
        my $fullname = (values %$member_prod_names)[0];
 | 
			
		||||
        my $modelname = '';
 | 
			
		||||
        if ($fullname =~ /^(\S+)/) {
 | 
			
		||||
            $modelname = $1;
 | 
			
		||||
        }
 | 
			
		||||
        return sprintf("%s (stack of %d)", $modelname, $num_members);
 | 
			
		||||
    } else {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    my $model = $cx->entPhysicalModelName(1) || {};
 | 
			
		||||
    my $id = $cx->id();
 | 
			
		||||
    my $translated_id = &SNMP::translateObj($id) || $id;
 | 
			
		||||
    $translated_id =~ s/arubaWiredSwitch//i;
 | 
			
		||||
    return $cx->stack_info() || $model->{1} || $translated_id;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os {
 | 
			
		||||
    return "arubaos-cx";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os_ver {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    my $ver_release = $cx->entPhysicalSoftwareRev(1) || {};
 | 
			
		||||
    return $ver_release->{1};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub agg_ports { return agg_ports_lag(@_) }
 | 
			
		||||
 | 
			
		||||
# Overrides for VLAN & forwarding table methods
 | 
			
		||||
sub v_name {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    return _at_pbb_one($cx->iqb_v_name()) || $cx->SUPER::v_name();
 | 
			
		||||
}
 | 
			
		||||
sub qb_i_vlan {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    return _at_pbb_one($cx->iqb_i_vlan()) || $cx->SUPER::qb_i_vlan();
 | 
			
		||||
}
 | 
			
		||||
sub i_vlan_type {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    return _at_pbb_one($cx->iqb_i_vlan_type()) || $cx->SUPER::qb_i_vlan_type();
 | 
			
		||||
}
 | 
			
		||||
sub qb_v_egress {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    return $cx->iqb_v_egress() || $cx->SUPER::qb_v_egress();
 | 
			
		||||
}
 | 
			
		||||
sub qb_cv_egress {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    return $cx->iqb_cv_egress() || $cx->SUPER::qb_cv_egress();
 | 
			
		||||
}
 | 
			
		||||
sub qb_v_untagged {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    return $cx->iqb_v_untagged() || $cx->SUPER::qb_v_untagged();
 | 
			
		||||
}
 | 
			
		||||
sub qb_cv_untagged {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    return $cx->iqb_cv_untagged() || $cx->SUPER::qb_cv_untagged();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer3::ArubaCX - SNMP Interface to L3 Devices running ArubaOS-CX
 | 
			
		||||
 | 
			
		||||
=head1 AUTHORS
 | 
			
		||||
 | 
			
		||||
Jeroen van Ingen
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
 # Let SNMP::Info determine the correct subclass for you.
 | 
			
		||||
 my $cx = new SNMP::Info(
 | 
			
		||||
                          AutoSpecify => 1,
 | 
			
		||||
                          Debug       => 1,
 | 
			
		||||
                          DestHost    => 'myrouter',
 | 
			
		||||
                          Community   => 'public',
 | 
			
		||||
                          Version     => 2
 | 
			
		||||
                        )
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
 my $class      = $cx->class();
 | 
			
		||||
 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Subclass for devices running ArubaOS-CX
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::IEEE802_Bridge
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::IEEE802dot3ad
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<ARUBAWIRED-FAN-MIB>
 | 
			
		||||
=item F<ARUBAWIRED-VSF-MIB>
 | 
			
		||||
=item F<ARUBAWIRED-POWERSUPPLY-MIB>
 | 
			
		||||
 | 
			
		||||
=item Inherited Classes' MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer3> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::IEEE802_Bridge> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::IEEE802dot3ad> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $cx->stack_info()
 | 
			
		||||
 | 
			
		||||
If the device supports VSF stacking and is not in standalone mode, returns
 | 
			
		||||
a string describing the switch family and the number of stack members.
 | 
			
		||||
Example return value: '6300M (stack of 2)'. Will return undef when VSF is not
 | 
			
		||||
supported or when the device is VSF standalone.
 | 
			
		||||
 | 
			
		||||
=item $cx->model()
 | 
			
		||||
 | 
			
		||||
Returns L<stack_info()> if defined, otherwise will fall back to returning the
 | 
			
		||||
model from C<entPhysicalModelName.1>; if that's also not set, will use
 | 
			
		||||
C<sysObjectID> as a last resort, stripping 'arubaWiredSwitch' from the value.
 | 
			
		||||
 | 
			
		||||
=item $cx->vendor()
 | 
			
		||||
 | 
			
		||||
Returns (lowercased) value for C<entPhysicalMfgName.1>, or 'aruba'.
 | 
			
		||||
 | 
			
		||||
=item $cx->os()
 | 
			
		||||
 | 
			
		||||
Returns 'arubaos-cx'.
 | 
			
		||||
 | 
			
		||||
=item $cx->os_ver()
 | 
			
		||||
 | 
			
		||||
Returns the software version. Either C<entPhysicalSoftwareRev.1> or
 | 
			
		||||
extracted from C<sysDescr>.
 | 
			
		||||
 | 
			
		||||
=item $cx->fan()
 | 
			
		||||
 | 
			
		||||
Returns a string with status information for all fans listed in
 | 
			
		||||
C<ARUBAWIRED-FAN-MIB>.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::IEEE802_Bridge
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::IEEE802_Bridge> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::IEEE802dot3ad
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE ENTRIES
 | 
			
		||||
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
to a hash.
 | 
			
		||||
 | 
			
		||||
=head2 Overrides
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item 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<v_name>
 | 
			
		||||
=item C<qb_i_vlan>
 | 
			
		||||
=item C<i_vlan_type>
 | 
			
		||||
=item C<qb_v_egress>
 | 
			
		||||
=item C<qb_cv_egress>
 | 
			
		||||
=item C<qb_v_untagged>
 | 
			
		||||
=item C<qb_cv_untagged>
 | 
			
		||||
All overridden to return the VLAN data structures that we'd expect for a
 | 
			
		||||
device that implements C<Q-BRIDGE-MIB>, but with data from
 | 
			
		||||
L<SNMP::Info::IEEE8021_Bridge> at PBB 1.
 | 
			
		||||
 | 
			
		||||
=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::IEEE802_Bridge
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::IEEE802_Bridge> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::IEEE802dot3ad
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
# SNMP::Info::Layer3::BayRS
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2008 Eric Miller
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
@@ -31,24 +30,21 @@
 | 
			
		||||
package SNMP::Info::Layer3::BayRS;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
use SNMP::Info::Bridge;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer3::BayRS::ISA = qw/SNMP::Info SNMP::Info::Layer3
 | 
			
		||||
    SNMP::Info::Bridge Exporter/;
 | 
			
		||||
@SNMP::Info::Layer3::BayRS::ISA = qw/SNMP::Info::Layer3
 | 
			
		||||
    Exporter/;
 | 
			
		||||
@SNMP::Info::Layer3::BayRS::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE %MODEL_MAP
 | 
			
		||||
    %MODID_MAP %PROCID_MAP/;
 | 
			
		||||
our ($VERSION, %GLOBALS, %FUNCS, %MIBS, %MUNGE, %MODEL_MAP,
 | 
			
		||||
    %MODID_MAP, %PROCID_MAP);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.33';
 | 
			
		||||
$VERSION = '3.83';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
    %SNMP::Info::Bridge::MIBS,
 | 
			
		||||
    'Wellfleet-HARDWARE-MIB'        => 'wfHwBpIdOpt',
 | 
			
		||||
    'Wellfleet-OSPF-MIB'            => 'wfOspfRouterId',
 | 
			
		||||
    'Wellfleet-DOT1QTAG-CONFIG-MIB' => 'wfDot1qTagCfgVlanName',
 | 
			
		||||
@@ -57,18 +53,14 @@ $VERSION = '3.33';
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::GLOBALS,
 | 
			
		||||
    %SNMP::Info::Layer3::GLOBALS,
 | 
			
		||||
    %SNMP::Info::Bridge::GLOBALS,
 | 
			
		||||
    'bp_id'       => 'wfHwBpIdOpt',
 | 
			
		||||
    'bp_serial'   => 'wfHwBpSerialNumber',
 | 
			
		||||
    'ospf_rtr_id' => 'wfOspfRouterId',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::FUNCS,
 | 
			
		||||
    %SNMP::Info::Layer3::FUNCS,
 | 
			
		||||
    %SNMP::Info::Bridge::FUNCS,
 | 
			
		||||
 | 
			
		||||
    # From Wellfleet-CSMACD-MIB::wfCSMACDTable
 | 
			
		||||
    'wf_csmacd_cct'  => 'wfCSMACDCct',
 | 
			
		||||
@@ -107,9 +99,7 @@ $VERSION = '3.33';
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    %SNMP::Info::MUNGE,
 | 
			
		||||
    %SNMP::Info::Layer3::MUNGE,
 | 
			
		||||
    %SNMP::Info::Bridge::MUNGE,
 | 
			
		||||
    'wf_hw_boot'     => \&munge_hw_rev,
 | 
			
		||||
    'wf_hw_diag'     => \&munge_hw_rev,
 | 
			
		||||
    'wf_hw_mobo_ser' => \&munge_wf_serial,
 | 
			
		||||
@@ -541,7 +531,10 @@ sub model {
 | 
			
		||||
    my $bayrs = shift;
 | 
			
		||||
    my $bp_id = $bayrs->bp_id();
 | 
			
		||||
 | 
			
		||||
    return defined $MODEL_MAP{$bp_id} ? $MODEL_MAP{$bp_id} : $bp_id;
 | 
			
		||||
    if (defined $bp_id) {
 | 
			
		||||
      return defined $MODEL_MAP{$bp_id} ? $MODEL_MAP{$bp_id} : $bp_id;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
@@ -776,7 +769,7 @@ sub e_index {
 | 
			
		||||
    my $bp_id = $bayrs->bp_id();
 | 
			
		||||
 | 
			
		||||
    # Don't like polling all these columns to build the index, can't think of
 | 
			
		||||
    # a better way right now.  Luckly all this data will be cached for the
 | 
			
		||||
    # a better way right now.  Luckily all this data will be cached for the
 | 
			
		||||
    # rest of the e_* methods
 | 
			
		||||
 | 
			
		||||
    # Using mib leafs so we don't have to define everything in FUNCS
 | 
			
		||||
@@ -805,7 +798,7 @@ sub e_index {
 | 
			
		||||
    my @slots = ( $wf_mb, $wf_db, $wf_bb, $wf_mod, $wf_mod1, $wf_mod2 );
 | 
			
		||||
    my @mods = ( $wf_mm, $wf_dm );
 | 
			
		||||
 | 
			
		||||
    # We're going to hack an index: Slot/Module/Postion
 | 
			
		||||
    # We're going to hack an index: Slot/Module/Position
 | 
			
		||||
    my %wf_e_index;
 | 
			
		||||
 | 
			
		||||
    # Chassis on BN types
 | 
			
		||||
@@ -1406,19 +1399,10 @@ Eric Miller
 | 
			
		||||
 | 
			
		||||
Abstraction subclass for routers running Avaya/Nortel BayRS.
 | 
			
		||||
 | 
			
		||||
For speed or debugging purposes you can call the subclass directly, but not
 | 
			
		||||
after determining a more specific class using the method above. 
 | 
			
		||||
 | 
			
		||||
 my $bayrs = new SNMP::Info::Layer3::BayRS(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Bridge
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
@@ -1441,10 +1425,6 @@ after determining a more specific class using the method above.
 | 
			
		||||
 | 
			
		||||
=head2 Inherited MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Bridge/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
@@ -1500,14 +1480,6 @@ undefined.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Bridge
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Bridge/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
 | 
			
		||||
@@ -1625,14 +1597,6 @@ is not contained in any other entity.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Bridge
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Bridge/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user