From 44b19153f106c13ab675bb25139baeefb5cb7491 Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Wed, 28 Jun 2017 22:40:15 +0100 Subject: [PATCH] migrate from EUMM to Module::Build --- .gitignore | 18 +- Build.PL | 35 + ChangeLog => Changes | 0 DeviceMatrix.txt | 9 - COPYRIGHT => LICENSE | 0 MANIFEST.SKIP | 7 +- Makefile.PL | 39 - README | 2179 ----------------- DEVELOP => contrib/DEVELOP | 0 {t => contrib/util}/docmunge | 0 {t => contrib/util}/make_dev_matrix.pl | 0 {t => contrib}/util/make_snmpdata.pl | 0 {t => contrib/util}/push_ver | 4 +- {t => contrib/util}/run_test | 0 {t => contrib/util}/test_class.pl | 0 {t => contrib}/util/test_class_mocked.pl | 0 Info.pm => lib/SNMP/Info.pm | 0 {Info => lib/SNMP/Info}/AMAP.pm | 0 {Info => lib/SNMP/Info}/AdslLine.pm | 0 {Info => lib/SNMP/Info}/Aggregate.pm | 0 {Info => lib/SNMP/Info}/Airespace.pm | 0 {Info => lib/SNMP/Info}/Bridge.pm | 0 {Info => lib/SNMP/Info}/CDP.pm | 0 {Info => lib/SNMP/Info}/CiscoAgg.pm | 0 {Info => lib/SNMP/Info}/CiscoConfig.pm | 0 {Info => lib/SNMP/Info}/CiscoPortSecurity.pm | 0 {Info => lib/SNMP/Info}/CiscoPower.pm | 0 {Info => lib/SNMP/Info}/CiscoQOS.pm | 0 {Info => lib/SNMP/Info}/CiscoRTT.pm | 0 {Info => lib/SNMP/Info}/CiscoStack.pm | 0 {Info => lib/SNMP/Info}/CiscoStats.pm | 0 {Info => lib/SNMP/Info}/CiscoStpExtensions.pm | 0 {Info => lib/SNMP/Info}/CiscoVTP.pm | 0 {Info => lib/SNMP/Info}/EDP.pm | 0 {Info => lib/SNMP/Info}/Entity.pm | 0 {Info => lib/SNMP/Info}/EtherLike.pm | 0 {Info => lib/SNMP/Info}/FDP.pm | 0 {Info => lib/SNMP/Info}/IEEE802dot11.pm | 0 {Info => lib/SNMP/Info}/IEEE802dot3ad.pm | 0 {Info => lib/SNMP/Info}/IPv6.pm | 0 {Info => lib/SNMP/Info}/LLDP.pm | 0 {Info => lib/SNMP/Info}/Layer1.pm | 0 {Info => lib/SNMP/Info}/Layer1/Allied.pm | 0 {Info => lib/SNMP/Info}/Layer1/Asante.pm | 0 {Info => lib/SNMP/Info}/Layer1/Bayhub.pm | 0 {Info => lib/SNMP/Info}/Layer1/Cyclades.pm | 0 {Info => lib/SNMP/Info}/Layer1/S3000.pm | 0 {Info => lib/SNMP/Info}/Layer2.pm | 0 {Info => lib/SNMP/Info}/Layer2/3Com.pm | 0 {Info => lib/SNMP/Info}/Layer2/Airespace.pm | 0 {Info => lib/SNMP/Info}/Layer2/Aironet.pm | 0 {Info => lib/SNMP/Info}/Layer2/Allied.pm | 0 {Info => lib/SNMP/Info}/Layer2/Baystack.pm | 0 {Info => lib/SNMP/Info}/Layer2/C1900.pm | 0 {Info => lib/SNMP/Info}/Layer2/C2900.pm | 0 {Info => lib/SNMP/Info}/Layer2/Catalyst.pm | 0 {Info => lib/SNMP/Info}/Layer2/Centillion.pm | 0 {Info => lib/SNMP/Info}/Layer2/Cisco.pm | 0 {Info => lib/SNMP/Info}/Layer2/CiscoSB.pm | 0 {Info => lib/SNMP/Info}/Layer2/HP.pm | 0 {Info => lib/SNMP/Info}/Layer2/HP4000.pm | 0 {Info => lib/SNMP/Info}/Layer2/HPVC.pm | 0 {Info => lib/SNMP/Info}/Layer2/Kentrox.pm | 0 {Info => lib/SNMP/Info}/Layer2/N2270.pm | 0 {Info => lib/SNMP/Info}/Layer2/NAP222x.pm | 0 {Info => lib/SNMP/Info}/Layer2/NWSS2300.pm | 0 {Info => lib/SNMP/Info}/Layer2/Netgear.pm | 0 {Info => lib/SNMP/Info}/Layer2/Orinoco.pm | 0 {Info => lib/SNMP/Info}/Layer2/Trapeze.pm | 0 {Info => lib/SNMP/Info}/Layer2/Ubiquiti.pm | 0 {Info => lib/SNMP/Info}/Layer2/ZyXEL_DSLAM.pm | 0 {Info => lib/SNMP/Info}/Layer3.pm | 0 {Info => lib/SNMP/Info}/Layer3/Aironet.pm | 0 .../SNMP/Info}/Layer3/AlcatelLucent.pm | 0 {Info => lib/SNMP/Info}/Layer3/AlteonAD.pm | 0 {Info => lib/SNMP/Info}/Layer3/Altiga.pm | 0 {Info => lib/SNMP/Info}/Layer3/Arista.pm | 0 {Info => lib/SNMP/Info}/Layer3/Aruba.pm | 0 {Info => lib/SNMP/Info}/Layer3/BayRS.pm | 0 {Info => lib/SNMP/Info}/Layer3/BlueCoatSG.pm | 0 {Info => lib/SNMP/Info}/Layer3/C3550.pm | 0 {Info => lib/SNMP/Info}/Layer3/C4000.pm | 0 {Info => lib/SNMP/Info}/Layer3/C6500.pm | 0 {Info => lib/SNMP/Info}/Layer3/Cisco.pm | 0 {Info => lib/SNMP/Info}/Layer3/CiscoASA.pm | 0 {Info => lib/SNMP/Info}/Layer3/CiscoFWSM.pm | 0 {Info => lib/SNMP/Info}/Layer3/CiscoSwitch.pm | 0 {Info => lib/SNMP/Info}/Layer3/Contivity.pm | 0 {Info => lib/SNMP/Info}/Layer3/DLink.pm | 0 {Info => lib/SNMP/Info}/Layer3/Dell.pm | 0 {Info => lib/SNMP/Info}/Layer3/Enterasys.pm | 0 {Info => lib/SNMP/Info}/Layer3/Extreme.pm | 0 {Info => lib/SNMP/Info}/Layer3/F5.pm | 0 {Info => lib/SNMP/Info}/Layer3/Force10.pm | 0 {Info => lib/SNMP/Info}/Layer3/Fortinet.pm | 0 {Info => lib/SNMP/Info}/Layer3/Foundry.pm | 0 {Info => lib/SNMP/Info}/Layer3/H3C.pm | 0 {Info => lib/SNMP/Info}/Layer3/HP9300.pm | 0 {Info => lib/SNMP/Info}/Layer3/Huawei.pm | 0 {Info => lib/SNMP/Info}/Layer3/IBMGbTor.pm | 0 {Info => lib/SNMP/Info}/Layer3/Juniper.pm | 0 {Info => lib/SNMP/Info}/Layer3/Lantronix.pm | 0 {Info => lib/SNMP/Info}/Layer3/Microsoft.pm | 0 {Info => lib/SNMP/Info}/Layer3/Mikrotik.pm | 0 {Info => lib/SNMP/Info}/Layer3/N1600.pm | 0 {Info => lib/SNMP/Info}/Layer3/NetSNMP.pm | 0 {Info => lib/SNMP/Info}/Layer3/Netscreen.pm | 0 {Info => lib/SNMP/Info}/Layer3/Nexus.pm | 0 {Info => lib/SNMP/Info}/Layer3/PacketFront.pm | 0 {Info => lib/SNMP/Info}/Layer3/PaloAlto.pm | 0 {Info => lib/SNMP/Info}/Layer3/Passport.pm | 0 {Info => lib/SNMP/Info}/Layer3/Pf.pm | 0 {Info => lib/SNMP/Info}/Layer3/Pica8.pm | 0 {Info => lib/SNMP/Info}/Layer3/SonicWALL.pm | 0 {Info => lib/SNMP/Info}/Layer3/Steelhead.pm | 0 {Info => lib/SNMP/Info}/Layer3/Sun.pm | 0 {Info => lib/SNMP/Info}/Layer3/Tasman.pm | 0 {Info => lib/SNMP/Info}/Layer3/Timetra.pm | 0 {Info => lib/SNMP/Info}/Layer3/VMware.pm | 0 {Info => lib/SNMP/Info}/Layer7.pm | 0 {Info => lib/SNMP/Info}/Layer7/APC.pm | 0 {Info => lib/SNMP/Info}/Layer7/CiscoIPS.pm | 0 {Info => lib/SNMP/Info}/Layer7/Neoteris.pm | 0 {Info => lib/SNMP/Info}/Layer7/Netscaler.pm | 0 {Info => lib/SNMP/Info}/MAU.pm | 0 {Info => lib/SNMP/Info}/MRO.pm | 0 {Info => lib/SNMP/Info}/NortelStack.pm | 0 {Info => lib/SNMP/Info}/PowerEthernet.pm | 0 {Info => lib/SNMP/Info}/RapidCity.pm | 0 {Info => lib/SNMP/Info}/SONMP.pm | 0 t/{00-load.t => 00_load.t} | 0 t/prereq.t => xt/00_local_prereq.t | 0 132 files changed, 52 insertions(+), 2239 deletions(-) create mode 100644 Build.PL rename ChangeLog => Changes (100%) delete mode 100644 DeviceMatrix.txt rename COPYRIGHT => LICENSE (100%) delete mode 100644 Makefile.PL delete mode 100644 README rename DEVELOP => contrib/DEVELOP (100%) rename {t => contrib/util}/docmunge (100%) rename {t => contrib/util}/make_dev_matrix.pl (100%) rename {t => contrib}/util/make_snmpdata.pl (100%) rename {t => contrib/util}/push_ver (89%) rename {t => contrib/util}/run_test (100%) rename {t => contrib/util}/test_class.pl (100%) rename {t => contrib}/util/test_class_mocked.pl (100%) rename Info.pm => lib/SNMP/Info.pm (100%) rename {Info => lib/SNMP/Info}/AMAP.pm (100%) rename {Info => lib/SNMP/Info}/AdslLine.pm (100%) rename {Info => lib/SNMP/Info}/Aggregate.pm (100%) rename {Info => lib/SNMP/Info}/Airespace.pm (100%) rename {Info => lib/SNMP/Info}/Bridge.pm (100%) rename {Info => lib/SNMP/Info}/CDP.pm (100%) rename {Info => lib/SNMP/Info}/CiscoAgg.pm (100%) rename {Info => lib/SNMP/Info}/CiscoConfig.pm (100%) rename {Info => lib/SNMP/Info}/CiscoPortSecurity.pm (100%) rename {Info => lib/SNMP/Info}/CiscoPower.pm (100%) rename {Info => lib/SNMP/Info}/CiscoQOS.pm (100%) rename {Info => lib/SNMP/Info}/CiscoRTT.pm (100%) rename {Info => lib/SNMP/Info}/CiscoStack.pm (100%) rename {Info => lib/SNMP/Info}/CiscoStats.pm (100%) rename {Info => lib/SNMP/Info}/CiscoStpExtensions.pm (100%) rename {Info => lib/SNMP/Info}/CiscoVTP.pm (100%) rename {Info => lib/SNMP/Info}/EDP.pm (100%) rename {Info => lib/SNMP/Info}/Entity.pm (100%) rename {Info => lib/SNMP/Info}/EtherLike.pm (100%) rename {Info => lib/SNMP/Info}/FDP.pm (100%) rename {Info => lib/SNMP/Info}/IEEE802dot11.pm (100%) rename {Info => lib/SNMP/Info}/IEEE802dot3ad.pm (100%) rename {Info => lib/SNMP/Info}/IPv6.pm (100%) rename {Info => lib/SNMP/Info}/LLDP.pm (100%) rename {Info => lib/SNMP/Info}/Layer1.pm (100%) rename {Info => lib/SNMP/Info}/Layer1/Allied.pm (100%) rename {Info => lib/SNMP/Info}/Layer1/Asante.pm (100%) rename {Info => lib/SNMP/Info}/Layer1/Bayhub.pm (100%) rename {Info => lib/SNMP/Info}/Layer1/Cyclades.pm (100%) rename {Info => lib/SNMP/Info}/Layer1/S3000.pm (100%) rename {Info => lib/SNMP/Info}/Layer2.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/3Com.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/Airespace.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/Aironet.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/Allied.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/Baystack.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/C1900.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/C2900.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/Catalyst.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/Centillion.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/Cisco.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/CiscoSB.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/HP.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/HP4000.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/HPVC.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/Kentrox.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/N2270.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/NAP222x.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/NWSS2300.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/Netgear.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/Orinoco.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/Trapeze.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/Ubiquiti.pm (100%) rename {Info => lib/SNMP/Info}/Layer2/ZyXEL_DSLAM.pm (100%) rename {Info => lib/SNMP/Info}/Layer3.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Aironet.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/AlcatelLucent.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/AlteonAD.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Altiga.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Arista.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Aruba.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/BayRS.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/BlueCoatSG.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/C3550.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/C4000.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/C6500.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Cisco.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/CiscoASA.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/CiscoFWSM.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/CiscoSwitch.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Contivity.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/DLink.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Dell.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Enterasys.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Extreme.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/F5.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Force10.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Fortinet.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Foundry.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/H3C.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/HP9300.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Huawei.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/IBMGbTor.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Juniper.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Lantronix.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Microsoft.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Mikrotik.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/N1600.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/NetSNMP.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Netscreen.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Nexus.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/PacketFront.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/PaloAlto.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Passport.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Pf.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Pica8.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/SonicWALL.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Steelhead.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Sun.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Tasman.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/Timetra.pm (100%) rename {Info => lib/SNMP/Info}/Layer3/VMware.pm (100%) rename {Info => lib/SNMP/Info}/Layer7.pm (100%) rename {Info => lib/SNMP/Info}/Layer7/APC.pm (100%) rename {Info => lib/SNMP/Info}/Layer7/CiscoIPS.pm (100%) rename {Info => lib/SNMP/Info}/Layer7/Neoteris.pm (100%) rename {Info => lib/SNMP/Info}/Layer7/Netscaler.pm (100%) rename {Info => lib/SNMP/Info}/MAU.pm (100%) rename {Info => lib/SNMP/Info}/MRO.pm (100%) rename {Info => lib/SNMP/Info}/NortelStack.pm (100%) rename {Info => lib/SNMP/Info}/PowerEthernet.pm (100%) rename {Info => lib/SNMP/Info}/RapidCity.pm (100%) rename {Info => lib/SNMP/Info}/SONMP.pm (100%) rename t/{00-load.t => 00_load.t} (100%) rename t/prereq.t => xt/00_local_prereq.t (100%) mode change 100755 => 100644 diff --git a/.gitignore b/.gitignore index 085619e6..ffadc6ab 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,11 @@ -*.db -SNMP -*.komodo* -blib/ -META.* +*.swp +*.pid +test.pl MYMETA.* -Makefile -Makefile.old -pm_to_blib +*.tar.gz +MANIFEST.* +*.komodo* +Makefile* +Build +_build +blib diff --git a/Build.PL b/Build.PL new file mode 100644 index 00000000..c860a011 --- /dev/null +++ b/Build.PL @@ -0,0 +1,35 @@ +use strict; +use warnings; +use Module::Build; + +Module::Build->new( + module_name => 'SNMP::Info', + license => 'bsd', + # dynamic_config => 1, + configure_requires => { + 'Module::Build' => '0.42', + }, + # build_requires => { + # }, + requires => { + 'SNMP' => '0', + 'Math::BigInt' => '0', + }, + # recommends => { + # }, + test_requires => { + 'Test::More' => '0.88', + }, + # script_files => [ + # ], + # share_dir => 'share', + meta_merge => { + resources => { + homepage => 'http://netdisco.org/', + bugtracker => 'https://github.com/netdisco/snmp-info/issues', + repository => 'https://github.com/netdisco/snmp-info', + MailingList => 'https://lists.sourceforge.net/lists/listinfo/snmp-info-users', + IRC => 'irc://irc.freenode.org/#netdisco', + }, + }, +)->create_build_script; diff --git a/ChangeLog b/Changes similarity index 100% rename from ChangeLog rename to Changes diff --git a/DeviceMatrix.txt b/DeviceMatrix.txt deleted file mode 100644 index 5c76faf0..00000000 --- a/DeviceMatrix.txt +++ /dev/null @@ -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 diff --git a/COPYRIGHT b/LICENSE similarity index 100% rename from COPYRIGHT rename to LICENSE diff --git a/MANIFEST.SKIP b/MANIFEST.SKIP index d73d1eb1..e10a7f95 100644 --- a/MANIFEST.SKIP +++ b/MANIFEST.SKIP @@ -26,5 +26,8 @@ MYMETA.* # Komodo project file \.kpf$ -# github -\.github +# Avoid MYMETA files +^MYMETA\. +.github +.travis +README.md diff --git a/Makefile.PL b/Makefile.PL deleted file mode 100644 index 819d59ad..00000000 --- a/Makefile.PL +++ /dev/null @@ -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 ', - 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"; -} diff --git a/README b/README deleted file mode 100644 index c055d0ec..00000000 --- a/README +++ /dev/null @@ -1,2179 +0,0 @@ -NAME - - SNMP::Info - OO Interface to Network devices and MIBs through SNMP - -VERSION - - SNMP::Info - Version 3.35 - -AUTHOR - - SNMP::Info is maintained by team of Open Source authors headed by Eric - Miller, Bill Fenner, Max Baker, Jeroen van Ingen and Oliver Gorwits. - - Please visit for most - up-to-date list of developers. - - SNMP::Info was originally created at UCSC for the Netdisco project - by Max Baker. - -DEVICES SUPPORTED - - There are now generic classes for most types of device and so the - authors recommend loading SNMP::Info with AutoSpecify, and then - reporting to the mail list any missing functionality (such as neighbor - discovery tables). - -SYNOPSIS - - use SNMP::Info; - - my $info = new SNMP::Info( - # Auto Discover more specific Device Class - AutoSpecify => 1, - Debug => 1, - # The rest is passed to SNMP::Session - DestHost => 'router', - Community => 'public', - Version => 2 - ) or die "Can't connect to device.\n"; - - my $err = $info->error(); - die "SNMP Community or Version probably wrong connecting to device. $err\n" if defined $err; - - $name = $info->name(); - $class = $info->class(); - print "SNMP::Info is using this device class : $class\n"; - - # Find out the Duplex status for the ports - my $interfaces = $info->interfaces(); - my $i_duplex = $info->i_duplex(); - - # Get CDP Neighbor info - my $c_if = $info->c_if(); - my $c_ip = $info->c_ip(); - my $c_port = $info->c_port(); - - # Print out data per port - foreach my $iid (keys %$interfaces){ - my $duplex = $i_duplex->{$iid}; - # Print out physical port name, not snmp iid - my $port = $interfaces->{$iid}; - - print "$port: "; - print "$duplex duplex" if defined $duplex; - - # The CDP Table has table entries different than the interface tables. - # So we use c_if to get the map from cdp table to interface table. - - my %c_map = reverse %$c_if; - my $c_key = $c_map{$iid}; - unless (defined $c_key) { - print "\n\n"; - next; - } - my $neighbor_ip = $c_ip->{$c_key}; - my $neighbor_port = $c_port->{$c_key}; - - print " connected to $neighbor_ip / $neighbor_port\n" if defined $neighbor_ip; - print "\n"; - - } - -SUPPORT - - Please direct all support, help, and bug requests to the snmp-info-users - Mailing List at - . - -DESCRIPTION - - SNMP::Info gives an object oriented interface to information obtained - through SNMP. - - This module is geared towards network devices. Subclasses exist for a - number of network devices and common MIBs. - - The idea behind this module is to give a common interface to data from - network devices, leaving the device-specific hacks behind the scenes in - subclasses. - - In the SYNOPSIS example we fetch the name of all the ports on the device - and the duplex setting for that port with two methods -- interfaces() - and i_duplex(). - - The information may be coming from any number of MIB files and is very - vendor specific. SNMP::Info provides you a common method for all - supported devices. - - Adding support for your own device is easy, and takes little SNMP - knowledge. - - The module is not limited to network devices. Any MIB or device can be - given an objected oriented front-end by making a module that consists of - a couple hashes. See EXTENDING SNMP::INFO. - -REQUIREMENTS - - 1. Net-SNMP - To use this module, you must have Net-SNMP installed on your system. - More specifically you need the Perl modules that come with it. - - DO NOT INSTALL SNMP:: or Net::SNMP from CPAN! - - The SNMP module is matched to an install of net-snmp, and must be - installed from the net-snmp source tree. - - The Perl module "SNMP" is found inside the net-snmp distribution. Go - to the perl/ directory of the distribution to install it, or run - "./configure --with-perl-modules" from the top directory of the - net-snmp distribution. - - Net-SNMP can be found at http://net-snmp.sourceforge.net - - Version 5.3.2 or greater is recommended. - - Versions 5.0.1, 5.0301 and 5.0203 have issues with bulkwalk and are - not supported. - - Redhat Users: Some versions that come with certain versions of - Redhat/Fedora don't have the Perl library installed. Uninstall the - RPM and install by hand. - - 2. MIBS - SNMP::Info operates on textual descriptors found in MIBs. - - If you are using SNMP::Info separate from Netdisco, download the - Netdisco MIB package at - - - Make sure that your snmp.conf is updated to point to your MIB - directory and that the MIBs are world-readable. - -DESIGN GOALS - - 1. Use of textual MIB leaf identifier and enumerated values - - * All values are retrieved via MIB Leaf node names - - For example SNMP::Info has an entry in its %GLOBALS hash for - ``sysName'' instead of 1.3.6.1.2.1.1.5. - - * Data returned is in the enumerated value form. - - For Example instead of looking up 1.3.6.1.2.1.2.2.1.3 and - getting back 23 - - SNMP::Info will ask for "RFC1213-MIB::ifType" and will get back - "ppp". - - 2. SNMP::Info is easily extended to new devices - You can create a new subclass for a device by providing four hashes - : %GLOBALS, %MIBS, %FUNCS, and %MUNGE. - - Or you can override any existing methods from a parent class by - making a short subroutine. - - See the section EXTENDING SNMP::INFO for more details. - - When you make a new subclass for a device, please be sure to send it - back to the developers (via Source Forge or the mailing list) for - inclusion in the next version. - -SUBCLASSES - - These are the subclasses that implement MIBs and support devices: - - Required MIBs not included in the install instructions above are noted - here. - - MIB Subclasses - - These subclasses implement method to access one or more MIBs. These are - not used directly, but rather inherited from device subclasses. - - For more info run "perldoc" on any of the following module names. - - SNMP::Info::AdslLine - SNMP Interface to the ADSL-LINE-MIB for ADSL interfaces. - - Requires the ADSL-LINE-MIB, down loadable from Cisco. - - See documentation in SNMP::Info::AdslLine for details. - - SNMP::Info::Aggregate - SNMP Interface to IF-MIB "ifStackTable" Aggregated Links - - See documentation in SNMP::Info::Aggregate for details. - - SNMP::Info::Airespace - AIRESPACE-WIRELESS-MIB and AIRESPACE-SWITCHING-MIB. Inherited by - devices based on the Airespace wireless platform. - - See documentation in SNMP::Info::Airespace for details. - - SNMP::Info::AMAP - ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB. Alcatel Mapping Adjacency - Protocol (AMAP) Support. - - See documentation in SNMP::Info::AMAP for details. - - SNMP::Info::Bridge - BRIDGE-MIB (RFC1286). QBRIDGE-MIB. Inherited by devices with Layer2 - support. - - See documentation in SNMP::Info::Bridge for details. - - SNMP::Info::CiscoAgg - SNMP Interface to Cisco Aggregated Links - - See documentation in SNMP::Info::CiscoAgg for details. - - SNMP::Info::CDP - CISCO-CDP-MIB. Cisco Discovery Protocol (CDP) Support. Inherited by - Cisco, Enterasys, and HP devices. - - See documentation in SNMP::Info::CDP for details. - - SNMP::Info::CiscoConfig - CISCO-CONFIG-COPY-MIB, CISCO-FLASH-MIB, and OLD-CISCO-SYS-MIB. These - OIDs facilitate the writing of configuration files. - - See documentation in SNMP::Info::CiscoConfig for details. - - SNMP::Info::CiscoPortSecurity - CISCO-PORT-SECURITY-MIB and CISCO-PAE-MIB. - - See documentation in SNMP::Info::CiscoPortSecurity for details. - - SNMP::Info::CiscoPower - CISCO-POWER-ETHERNET-EXT-MIB. - - See documentation in SNMP::Info::CiscoPower for details. - - SNMP::Info::CiscoQOS - CISCO-CLASS-BASED-QOS-MIB. A collection of OIDs providing - information about a Cisco device's QOS config. - - See documentation in SNMP::Info::CiscoQOS for details. - - SNMP::Info::CiscoRTT - CISCO-RTTMON-MIB. A collection of OIDs providing information about a - Cisco device's RTT values. - - See documentation in SNMP::Info::CiscoRTT for details. - - SNMP::Info::CiscoStack - CISCO-STACK-MIB. - - See documentation in SNMP::Info::CiscoStack for details. - - SNMP::Info::CiscoStpExtensions - CISCO-STP-EXTENSIONS-MIB - - See documentation in SNMP::Info::CiscoStpExtensions for details. - - SNMP::Info::CiscoStats - OLD-CISCO-CPU-MIB, CISCO-PROCESS-MIB, and CISCO-MEMORY-POOL-MIB. - Provides common interfaces for memory, cpu, and os statistics for - Cisco devices. - - See documentation in SNMP::Info::CiscoStats for details. - - SNMP::Info::CiscoVTP - CISCO-VTP-MIB, CISCO-VLAN-MEMBERSHIP-MIB, - CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB - - See documentation in SNMP::Info::CiscoVTP for details. - - SNMP::Info::EDP - Extreme Discovery Protocol. EXTREME-EDP-MIB - - See documentation in SNMP::Info::EDP for details. - - SNMP::Info::Entity - ENTITY-MIB. Used for device info in Cisco and other vendors. - - See documentation in SNMP::Info::Entity for details. - - SNMP::Info::EtherLike - EtherLike-MIB (RFC1398) - Some Layer3 devices implement this MIB, as - well as some Aironet Layer 2 devices (non Cisco). - - See documentation in SNMP::Info::EtherLike for details. - - SNMP::Info::FDP - Foundry (Brocade) Discovery Protocol. FOUNDRY-SN-SWITCH-GROUP-MIB - - See documentation in SNMP::Info::FDP for details. - - SNMP::Info::IPv6 - SNMP Interface for obtaining configured IPv6 addresses and mapping - IPv6 addresses to MAC addresses and interfaces, using information - from IP-MIB, IPV6-MIB and/or CISCO-IETF-IP-MIB. - - See documentation in SNMP::Info::IPv6 for details. - - SNMP::Info::IEEE802dot11 - IEEE802dot11-MIB. A collection of OIDs providing information about - standards based 802.11 wireless devices. - - See documentation in SNMP::Info::IEEE802dot11 for details. - - SNMP::Info::IEEE802dot3ad - SNMP Interface to IEEE Aggregated Links. IEEE8023-LAG-MIB - - See documentation in SNMP::Info::IEEE802dot3ad for details. - - SNMP::Info::LLDP - LLDP-MIB, LLDP-EXT-DOT1-MIB, and LLDP-EXT-DOT3-MIB. Link Layer - Discovery Protocol (LLDP) Support. - - See documentation in SNMP::Info::LLDP for details. - - SNMP::Info::MAU - MAU-MIB (RFC2668). Some Layer2 devices use this for extended - Ethernet (Media Access Unit) interface information. - - See documentation in SNMP::Info::MAU for details. - - SNMP::Info::MRO - Method resolution introspection for SNMP::Info - - See documentation in SNMP::Info::MRO for details. - - SNMP::Info::NortelStack - S5-AGENT-MIB, S5-CHASSIS-MIB. - - See documentation in SNMP::Info::NortelStack for details. - - SNMP::Info::PowerEthernet - POWER-ETHERNET-MIB - - See documentation in SNMP::Info::PowerEthernet for details. - - SNMP::Info::RapidCity - RAPID-CITY. Inherited by Avaya switches for duplex and VLAN - information. - - See documentation in SNMP::Info::RapidCity for details. - - SNMP::Info::SONMP - SynOptics Network Management Protocol (SONMP) SYNOPTICS-ROOT-MIB, - S5-ETH-MULTISEG-TOPOLOGY-MIB. Inherited by - Avaya/Nortel/Bay/Synoptics switches and hubs. - - See documentation in SNMP::Info::SONMP for details. - - Device Subclasses - - These subclasses inherit from one or more classes to provide a common - interface to data obtainable from network devices. - - All the required MIB files are included in the netdisco-mib package. - (See Above). - - SNMP::Info::Layer1 - Generic Layer1 Device subclass. - - See documentation in SNMP::Info::Layer1 for details. - - SNMP::Info::Layer1::Allied - Subclass for Allied Telesis Repeaters / Hubs. - - Requires ATI-MIB - - See documentation in SNMP::Info::Layer1::Allied for details. - - SNMP::Info::Layer1::Asante - Subclass for Asante 1012 Hubs. - - Requires ASANTE-HUB1012-MIB - - See documentation in SNMP::Info::Layer1::Asante for details. - - SNMP::Info::Layer1::Bayhub - Subclass for Nortel/Bay hubs. This includes System 5000, 100 - series, 200 series, and probably more. - - See documentation in SNMP::Info::Layer1::Bayhub for details. - - SNMP::Info::Layer1::Cyclades - Subclass for Cyclades terminal servers. - - See documentation in SNMP::Info::Layer1::Cyclades for details. - - SNMP::Info::Layer1::S3000 - Subclass for Bay/Synoptics hubs. This includes System 3000, - 281X, and probably more. - - See documentation in SNMP::Info::Layer1::S3000 for details. - - SNMP::Info::Layer2 - Generic Layer2 Device subclass. - - See documentation in SNMP::Info::Layer2 for details. - - SNMP::Info::Layer2::3Com - SNMP::Info::Layer2::3Com - SNMP Interface to L2 3Com Switches - - See documentation in SNMP::Info::Layer2::3Com for details. - - SNMP::Info::Layer2::Airespace - Subclass for Cisco (Airespace) wireless controllers. - - See documentation in SNMP::Info::Layer2::Airespace for details. - - SNMP::Info::Layer2::Aironet - Class for Cisco Aironet wireless devices that run IOS. See also - Layer3::Aironet for Aironet devices that don't run IOS. - - See documentation in SNMP::Info::Layer2::Aironet for details. - - SNMP::Info::Layer2::Allied - Allied Telesis switches. - - See documentation in SNMP::Info::Layer2::Allied for details. - - SNMP::Info::Layer2::Baystack - Subclass for Avaya/Nortel/Bay Ethernet Switch/Baystack switches. - This includes 303, 304, 350, 380, 410, 420, 425, 450, 460, 470 - series, 2500 series, 4000 series, 5000 series, Business Ethernet - Switch (BES), Business Policy Switch (BPS), VSP 7000 series, and - probably others. - - See documentation in SNMP::Info::Layer2::Baystack for details. - - SNMP::Info::Layer2::Kentrox - Class for Kentrox DataSMART DSU/CSU. See - SNMP::Info::Layer2::Kentrox for details. - - SNMP::Info::Layer2::C1900 - Subclass for Cisco Catalyst 1900 and 1900c Devices running - CatOS. - - See documentation in SNMP::Info::Layer2::C1900 for details. - - SNMP::Info::Layer2::C2900 - Subclass for Cisco Catalyst 2900, 2950, 3500XL, and 3548 devices - running IOS. - - See documentation in SNMP::Info::Layer2::C2900 for details. - - SNMP::Info::Layer2::Catalyst - Subclass for Cisco Catalyst switches running CatOS. These - switches usually report a model number that starts with "wsc". - Note that this class does not support everything that has the - name Catalyst. - - See documentation in SNMP::Info::Layer2::Catalyst for details. - - SNMP::Info::Layer2::Centillion - Subclass for Nortel/Bay Centillion and 5000BH ATM switches. - - See documentation in SNMP::Info::Layer2::Centillion for details. - - SNMP::Info::Layer2::Cisco - Generic Cisco subclass for layer 2 devices that are not yet - supported in more specific subclassesand the base layer 2 Cisco - class for other device specific layer 2 Cisco classes. - - See documentation in SNMP::Info::Layer2::Cisco for details. - - SNMP::Info::Layer2::CiscoSB - Subclass for Cisco's "Small Business" product line, acquired - from Linksys. This currently comprises the Sx300/500 line of - switches. - - See documentation in SNMP::Info::Layer2::CiscoSB for details. - - SNMP::Info::Layer2::HP - Subclass for more recent HP Procurve Switches - - Requires HP-ICF-OID and ENTITY-MIB downloaded from HP. - - See documentation in SNMP::Info::Layer2::HP for details. - - SNMP::Info::Layer2::HP4000 - Subclass for older HP Procurve Switches - - Requires HP-ICF-OID and ENTITY-MIB downloaded from HP. - - See documentation in SNMP::Info::Layer2::HP4000 for details. - - SNMP::Info::Layer2::HPVC - Subclass for HP Virtual Connect Switches - - See documentation in SNMP::Info::Layer2::HPVC for details. - - SNMP::Info::Layer2::N2270 - Subclass for Nortel 2270 wireless switches. - - See documentation in SNMP::Info::Layer2::N2270 for details. - - SNMP::Info::Layer2::NAP222x - Subclass for Nortel 222x series wireless access points. - - See documentation in SNMP::Info::Layer2::NAP222x for details. - - SNMP::Info::Layer2::Netgear - Subclass for Netgear switches - - See documentation in SNMP::Info::Layer2::Netgear for details. - - SNMP::Info::Layer2::NWSS2300 - SNMP Interface to Avaya (Trapeze) Wireless Controllers - - See documentation in SNMP::Info::Layer2::NWSS2300 for details. - - SNMP::Info::Layer2::Orinoco - Subclass for Orinoco/Proxim wireless access points. - - See documentation in SNMP::Info::Layer2::Orinoco for details. - - SNMP::Info::Layer2::Trapeze - SNMP Interface to Juniper (Trapeze) Wireless Controllers - - See documentation in SNMP::Info::Layer2::Trapeze for details. - - SNMP::Info::Layer2::Ubiquiti - SNMP Interface to Ubiquiti Access Points - - See documentation in SNMP::Info::Layer2::Ubiquiti for details. - - SNMP::Info::Layer2::ZyXEL_DSLAM - Zyxel DSLAMs. Need I say more? - - See documentation in SNMP::Info::Layer2::ZyXEL_DSLAM for - details. - - SNMP::Info::Layer3 - Generic Layer3 and Layer2+3 Device subclass. - - See documentation in SNMP::Info::Layer3 for details. - - SNMP::Info::Layer3::Aironet - Subclass for Cisco Aironet wireless access points (AP) not - running IOS. These are usually older devices. - - MIBs for these devices now included in v2.tar.gz available from - ftp.cisco.com. - - Note Layer2::Aironet - - See documentation in SNMP::Info::Layer3::Aironet for details. - - SNMP::Info::Layer3::AlcatelLucent - Alcatel-Lucent OmniSwitch Class. - - See documentation in SNMP::Info::Layer3::AlcatelLucent for - details. - - SNMP::Info::Layer3::AlteonAD - Subclass for Radware Alteon Series ADC switches and Nortel - BladeCenter Layer2-3 GbE Switch Modules. - - See documentation in SNMP::Info::Layer3::AlteonAD for details. - - SNMP::Info::Layer3::Altiga - See documentation in SNMP::Info::Layer3::Altiga for details. - - SNMP::Info::Layer3::Arista - See documentation in SNMP::Info::Layer3::Arista for details. - - SNMP::Info::Layer3::Aruba - Subclass for Aruba wireless switches. - - See documentation in SNMP::Info::Layer3::Aruba for details. - - SNMP::Info::Layer3::BayRS - Subclass for Avaya/Nortel/Bay Multiprotocol/BayRS routers. This - includes BCN, BLN, ASN, ARN, AN, 2430, and 5430 routers. - - See documentation in SNMP::Info::Layer3::BayRS for details. - - SNMP::Info::Layer3::BlueCoatSG - Subclass for Blue Coat SG series proxy devices. - - See documentation in SNMP::Info::Layer3::BlueCoatSG for details. - - SNMP::Info::Layer3::C3550 - Subclass for Cisco Catalyst 3550,3540,3560 2/3 switches running - IOS. - - See documentation in SNMP::Info::Layer3::C3550 for details. - - SNMP::Info::Layer3::C4000 - This class covers Catalyst 4000s and 4500s. - - See documentation in SNMP::Info::Layer3::C4000 for details. - - SNMP::Info::Layer3::C6500 - This class covers Catalyst 6500s in native mode, hybrid mode. - Catalyst 3750's, 2970's and probably others. - - See documentation in SNMP::Info::Layer3::C6500 for details. - - SNMP::Info::Layer3::Cisco - This is a simple wrapper around layer 3 for IOS devices and the - base layer 3 Cisco class for other device specific layer 3 Cisco - classes. - - See documentation in SNMP::Info::Layer3::Cisco for details. - - SNMP::Info::Layer3::CiscoASA - Subclass for Cisco Adaptive Security Appliances. - - See documentation in SNMP::Info::Layer3::CiscoASA for details. - - SNMP::Info::Layer3::CiscoFWSM - Subclass for Cisco Firewall Services Modules. - - See documentation in SNMP::Info::Layer3::CiscoFWSM for details. - - SNMP::Info::Layer3::CiscoSwitch - Base class for L3 Cisco switches. See documentation in - SNMP::Info::Layer3::CiscoSwitch for details. - - SNMP::Info::Layer3::Contivity - Subclass for Avaya/Nortel Contivity/VPN Routers. - - See documentation in SNMP::Info::Layer3::Contivity for details. - - SNMP::Info::Layer3::Dell - Subclass for Dell PowerConnect switches. D-Link, the IBM - BladeCenter Gigabit Ethernet Switch Module and some Linksys - switches also use this module based upon MIB support. - - See documentation in SNMP::Info::Layer3::Dell for details. - - SNMP::Info::Layer3::Enterasys - Subclass for Enterasys devices. - - See documentation in SNMP::Info::Layer3::Enterasys for details. - - SNMP::Info::Layer3::Extreme - Subclass for Extreme Networks switches. - - See documentation in SNMP::Info::Layer3::Extreme for details. - - SNMP::Info::Layer3::F5 - Subclass for F5 devices. - - See documentation in SNMP::Info::Layer3::F5 for details. - - SNMP::Info::Layer3::Force10 - Subclass for Force10 devices. - - See documentation in SNMP::Info::Layer3::Force10 for details. - - SNMP::Info::Layer3::Fortinet - Subclass for Fortinet devices. - - See documentation in SNMP::Info::Layer3::Fortinet for details. - - SNMP::Info::Layer3::Foundry - Subclass for Brocade (Foundry) Network devices. - - See documentation in SNMP::Info::Layer3::Foundry for details. - - SNMP::Info::Layer3::H3C - SNMP Interface to Layer 3 Devices, H3C & HP A-series. - - See documentation in SNMP::Info::Layer3::H3C for details. - - SNMP::Info::Layer3::HP9300 - Subclass for HP network devices which Foundry Networks was the - Original Equipment Manufacturer (OEM) such as the HP ProCurve - 9300 and 6300 series. - - See documentation in SNMP::Info::Layer3::HP9300 for details. - - SNMP::Info::Layer3::Huawei - SNMP Interface to Huawei Layer 3 switches and routers. - - See documentation in SNMP::Info::Layer3::Huawei for details. - - SNMP::Info::Layer3::IBMGbTor - SNMP Interface to IBM Rackswitch (formerly Blade Network - Technologies) network devices. - - See documentation in SNMP::Info::Layer3::IBMGbTor for details. - - SNMP::Info::Layer3::Juniper - Subclass for Juniper devices - - See documentation in SNMP::Info::Layer3::Juniper for details. - - SNMP::Info::Layer3::Lantronix - Subclass for Lantronix devices - - See documentation in SNMP::Info::Layer3::Lantronix for details. - - SNMP::Info::Layer3::Microsoft - Subclass for Generic Microsoft Routers running Microsoft Windows - OS. - - See documentation in SNMP::Info::Layer3::Microsoft for details. - - SNMP::Info::Layer3::Mikrotik - Subclass for Mikrotik devices running RouterOS. - - See documentation in SNMP::Info::Layer3::Mikrotik for details. - - SNMP::Info::Layer3::N1600 - Subclass for Avaya/Nortel Ethernet Routing Switch 1600 series. - - See documentation in SNMP::Info::Layer3::N1600 for details. - - SNMP::Info::Layer3::NetSNMP - Subclass for host systems running Net-SNMP. - - See documentation in SNMP::Info::Layer3::NetSNMP for details. - - SNMP::Info::Layer3::Netscreen - Subclass for Juniper NetScreen. - - See documentation in SNMP::Info::Layer3::Netscreen for details. - - SNMP::Info::Layer3::Nexus - Subclass for Cisco Nexus devices running NX-OS - - See documentation in SNMP::Info::Layer3::Nexus for details. - - SNMP::Info::Layer3::PacketFront - Subclass for PacketFront DRG series CPE. - - See documentation in SNMP::Info::Layer3::PacketFront for - details. - - SNMP::Info::Layer3::PaloAlto - Subclass for Palo Alto firewalls. - - See documentation in SNMP::Info::Layer3::PaloAlto for details. - - SNMP::Info::Layer3::Passport - Subclass for Avaya/Nortel Ethernet Routing Switch/Passport 8000 - series, Accelar, and VSP 9000 series switches. - - See documentation in SNMP::Info::Layer3::Passport for details. - - SNMP::Info::Layer3::Pf - Subclass for FreeBSD-Based Firewalls using Pf /Pf Sense - - See documentation in SNMP::Info::Layer3::Pf for details. - - SNMP::Info::Layer3::Pica8 - Subclass for Pica8 devices. - - See documentation in SNMP::Info::Layer3::Pica8 for details. - - SNMP::Info::Layer3::SonicWALL - Subclass for generic SonicWALL devices. See documentation in - SNMP::Info::Layer3::SonicWALL for details. - - SNMP::Info::Layer3::Steelhead - Subclass for Riverbed Steelhead WAN optimization appliances. See - documentation in SNMP::Info::Layer3::Steelhead for details. - - SNMP::Info::Layer3::Sun - Subclass for Generic Sun Routers running SunOS. - - See documentation in SNMP::Info::Layer3::Sun for details. - - SNMP::Info::Layer3::Tasman - Subclass for Avaya Secure Routers. - - See documentation in SNMP::Info::Layer3::Tasman for details. - - SNMP::Info::Layer3::Timetra - Alcatel-Lucent SR Class. - - See documentation in SNMP::Info::Layer3::Timetra for details. - - SNMP::Info::Layer3::VMware - Subclass for VMware ESXi hosts. - - See documentation in SNMP::Info::Layer3::VMware for details. - - SNMP::Info::Layer7 - Generic Layer7 Devices. - - See documentation in SNMP::Info::Layer7 for details. - - SNMP::Info::Layer7::APC - SNMP Interface to APC UPS devices - - See documentation in SNMP::Info::Layer7::APC for details. - - SNMP::Info::Layer7::Netscaler - SNMP Interface to Citrix Netscaler appliances - - See documentation in SNMP::Info::Layer7::Netscaler for details. - - SNMP::Info::Layer7::Neoteris - SNMP Interface to Juniper SSL VPN appliances - - See documentation in SNMP::Info::Layer7::Neoteris for details. - -Thanks - - Thanks for testing and coding help (in no particular order) to : - Alexander Barthel, Andy Ford, Alexander Hartmaier, Andrew Herrick, Alex - Kramarov, Bernhard Augenstein, Bradley Baetz, Brian Chow, Brian Wilson, - Carlos Vicente, Dana Watanabe, David Pinkoski, David Sieborger, Douglas - McKeown, Greg King, Ivan Auger, Jean-Philippe Luiggi, Jeroen van Ingen, - Justin Hunter, Kent Hamilton, Matthew Tuttle, Michael Robbert, Mike - Hunter, Nicolai Petri, Ralf Gross, Robert Kerr and people listed on the - Netdisco README! - -USAGE - - Constructor - - new() - Creates a new object and connects via SNMP::Session. - - my $info = new SNMP::Info( 'Debug' => 1, - 'AutoSpecify' => 1, - 'BigInt' => 1, - 'BulkWalk' => 1, - 'BulkRepeaters' => 20, - 'IgnoreNetSNMPConf' => 1, - 'LoopDetect' => 1, - 'DestHost' => 'myrouter', - 'Community' => 'public', - 'Version' => 2, - 'MibDirs' => ['dir1','dir2','dir3'], - ) or die; - - SNMP::Info Specific Arguments : - - AutoSpecify - Returns an object of a more specific device class - - (default 0, which means "off") - - BigInt - Return Math::BigInt objects for 64 bit counters. Sets on a - global scope, not object. - - (default 0, which means "off") - - BulkWalk - Set to 0 to turn off BULKWALK commands for SNMPv2 connections. - - Note that BULKWALK is turned off for Net-SNMP versions 5.1.x - because of a bug. - - (default 1, which means "on") - - BulkRepeaters - Set number of MaxRepeaters for BULKWALK operation. See "perldoc - SNMP" -> bulkwalk() for more info. - - (default 20) - - LoopDetect - Detects looping during getnext table column walks by comparing - IIDs for each instance. A loop is detected if the same IID is - seen more than once and the walk is aborted. Note: This will not - detect loops during a bulkwalk operation, Net-SNMP's internal - bulkwalk function must detect the loop. - - Set to 0 to turn off loop detection. - - (default 1, which means "on") - - IgnoreNetSNMPConf - Net-SNMP version 5.0 and higher read configuration files, - snmp.conf or snmp.local.conf, from /etc/snmp, /usr/share/snmp, - /usr/lib(64)/snmp, or $HOME/.snmp and uses those settings to - automatically parse MIB files, etc. - - Set to 1 "on" to ignore Net-SNMP configuration files by - overriding the "SNMPCONFPATH" environmental variable during - object initialization. Note: MibDirs must be defined or Net-SNMP - will not be able to load MIBs and initialize the object. - - (default 0, which means "off") - - Debug - Prints Lots of debugging messages. Pass 2 to print even more - debugging messages. - - (default 0, which means "off") - - DebugSNMP - Set $SNMP::debugging level for Net-SNMP. - - See SNMP for more details. - - MibDirs - Array ref to list of directories in which to look for MIBs. Note - this will be in addition to the ones setup in snmp.conf at the - system level. - - (default use net-snmp settings only) - - RetryNoSuch - When using SNMP Version 1, try reading values even if they come - back as "no such variable in this MIB". Set to false if so - desired. This feature lets you read SNMPv2 data from an SNMP - version 1 connection, and should probably be left on. - - (default 1, which means "on") - - Session - SNMP::Session object to use instead of connecting on own. - - (default creates session automatically) - - Offline - Causes SNMP::Info to avoid network activity and return data only - from its cache. If you ask for something not in the cache, an - error is thrown. See also the "cache()" and "offline()" methods. - - (default 0, which means "online") - - Cache - Pass in a HashRef to prime the cache of retrieved data. Useful - for creating an instance in "Offline" mode from a previously - dumped cache. See also the "cache()" method to retrieve a cache - after running actial queries. - - OTHER - All other arguments are passed to SNMP::Session. - - See SNMP::Session for a list of other possible arguments. - - A Note about the wrong Community string or wrong SNMP Version: - - If a connection is using the wrong community string or the wrong - SNMP version, the creation of the object will not fail. The device - still answers the call on the SNMP port, but will not return - information. Check the error() method after you create the device - object to see if there was a problem in connecting. - - A note about SNMP Versions : - - Some older devices don't support SNMP version 2, and will not return - anything when a connection under Version 2 is attempted. - - Some newer devices will support Version 1, but will not return all - the data they might have if you had connected under Version 1 - - When trying to get info from a new device, you may have to try - version 2 and then fallback to version 1. - - update() - Replace the existing session with a new one with updated values, - without re-identifying the device. The only supported changes are to - Community or Context. - - Clears the object cache. - - This is useful, e.g., when a device supports multiple contexts (via - changes to the Community string, or via the SNMPv3 Context - parameter), but a context that you want to access does not support - the objects (e.g., "sysObjectID", "sysDescr") that we use to - identify the device. - - Data is Cached - - Methods and subroutines requesting data from a device will only load the - data once, and then return cached versions of that data. - - Run $info->load_METHOD() where method is something like 'i_name' to - reload data from a method. - - Run $info->clear_cache() to clear the cache to allow reload of both - globals and table methods. - - The cache can be retrieved or set using the $info->cache() method. This - works together with the "Offline" option. - - Object Scalar Methods - - These are for package related data, not directly supplied from SNMP. - - $info->clear_cache() - Clears the cached data. This includes GLOBALS data and TABLE METHOD - data. - - $info->debug(1) - Returns current debug status, and optionally toggles debugging info - for this object. - - $info->offline([1|0]) - Returns if offline mode is currently turned on for this object. - - Optionally sets the Offline parameter. - - $info->cache([new_cache]) - Returns a HashRef of all cached data in this object. There will be a - "store" key for table data and then one key for each leaf. - - Optionally sets the cache parameters if passed a HashRef. - - $info->bulkwalk([1|0]) - Returns if bulkwalk is currently turned on for this object. - - Optionally sets the bulkwalk parameter. - - $info->loopdetect([1|0]) - Returns if loopdetect is currently turned on for this object. - - Optionally sets the loopdetect parameter. - - $info->device_type() - Returns the Subclass name for this device. "SNMP::Info" is returned - if no more specific class is available. - - First the device is checked for Layer 3 support and a specific - subclass, then Layer 2 support and subclasses are checked. - - This means that Layer 2 / 3 switches and routers will fall under the - SNMP::Info::Layer3 subclasses. - - If the device still can be connected to via SNMP::Info, then - SNMP::Info is returned. - - $info->error(no_clear) - Returns Error message if there is an error, or undef if there is - not. - - Reading the error will clear the error unless you set the no_clear - flag. - - $info->has_layer(3) - Returns non-zero if the device has the supplied layer in the OSI - Model - - Returns if the device doesn't support the layers() call. - - $info->snmp_comm() - Returns SNMP Community string used in connection. - - $info->snmp_ver() - Returns SNMP Version used for this connection - - $info->specify() - Returns an object of a more-specific subclass. - - my $info = new SNMP::Info(...); - # Returns more specific object type - $info = $info->specific(); - - Usually this method is called internally from new(AutoSpecify => 1) - - See device_type() entry for how a subclass is chosen. - - $info->cisco_comm_indexing() - Returns 0. Is an overridable method used for vlan indexing for snmp - calls on certain Cisco devices. - - See - - - Globals (Scalar Methods) - - These are methods to return scalar data from RFC1213. - - Some subset of these is probably available for any network device that - speaks SNMP. - - $info->uptime() - Uptime in hundredths of seconds since device became available. - - ("sysUpTime") - - $info->contact() - ("sysContact") - - $info->name() - ("sysName") - - $info->location() - ("sysLocation") - - $info->layers() - This returns a binary encoded string where each digit represents a - layer of the OSI model served by the device. - - eg: 01000010 means layers 2 (physical) and 7 (Application) - are served. - - Note: This string is 8 digits long. - - See $info->has_layer() - - ("sysServices") - - $info->ports() - Number of interfaces available on this device. - - Not too useful as the number of SNMP interfaces usually does not - correspond with the number of physical ports - - ("ifNumber") - - $info->ipforwarding() - The indication of whether the entity is acting as an IP gateway - - Returns either forwarding or not-forwarding - - ("ipForwarding") - - Table Methods - - Each of these methods returns a hash_reference to a hash keyed on the - interface index in SNMP. - - Example : $info->interfaces() might return - - { '1.12' => 'FastEthernet/0', - '2.15' => 'FastEthernet/1', - '9.99' => 'FastEthernet/2' - } - - The key is what you would see if you were to do an snmpwalk, and in some - cases changes between reboots of the network device. - - Partial Table Fetches - - If you want to get only a part of an SNMP table or a single instance - from the table and you know the IID for the part of the table that you - want, you can specify it in the call: - - $local_routes = $info->ipr_route('192.168.0'); - - This will only fetch entries in the table that start with 192.168.0, - which in this case are routes on the local network. - - Remember that you must supply the partial IID (a numeric OID). - - Partial table results are not cached. - - Interface Information - - $info->interfaces() - This methods is overridden in each subclass to provide a mapping - between the Interface Table Index (iid) and the physical port name. - - $info->if_ignore() - Returns a reference to a hash where key values that exist are - interfaces to ignore. - - Ignored interfaces are ones that are usually not physical ports or - Virtual Lans (VLANs) such as the Loopback interface, or the CPU - interface. - - $info->bulkwalk_no() - Returns 0. Is an overridable method used for turn off bulkwalk for - the device class. - - $info->i_index() - Default SNMP IID to Interface index. - - ("ifIndex") - - $info->i_description() - Description of the interface. Usually a little longer single word - name that is both human and machine friendly. Not always. - - ("ifDescr") - - $info->i_type() - Interface type, such as Vlan, Ethernet, Serial - - ("ifType") - - $info->i_mtu() - INTEGER. Interface MTU value. - - ("ifMtu") - - $info->i_speed() - Speed of the link, human format. See munge_speed() later in document - for details. - - ("ifSpeed", "ifHighSpeed" if necessary) - - $info->i_speed_raw() - Speed of the link in bits per second without munging. If - i_speed_high is available it will be used and multiplied by - 1_000_000. - - ("ifSpeed", "ifHighSpeed" if necessary) - - $info->i_speed_high() - Speed of a high-speed link, human format. See munge_highspeed() - later in document for details. You should not need to call this - directly, as i_speed() will call it if it needs to. - - ("ifHighSpeed") - - $info->i_mac() - MAC address of the interface. Note this is just the MAC of the port, - not anything connected to it. - - ("ifPhysAddress") - - $info->i_up() - Link Status of the interface. Typical values are 'up' and 'down'. - - ("ifOperStatus") - - $info->i_up_admin() - Administrative status of the port. Typical values are 'enabled' and - 'disabled'. - - ("ifAdminStatus") - - $info->i_lastchange() - The value of "sysUpTime" when this port last changed states - (up,down). - - ("ifLastChange") - - $info->i_name() - Interface Name field. Supported by a smaller subset of devices, this - fields is often human set. - - ("ifName") - - $info->i_alias() - Interface Name field. For certain devices this is a more human - friendly form of i_description(). For others it is a human set field - like i_name(). - - ("ifAlias") - - Interface Statistics - - $info->i_octet_in(), $info->i_octets_out(), $info->i_octet_in64(), - $info->i_octets_out64() - Bandwidth. - - Number of octets sent/received on the interface including framing - characters. - - 64 bit version may not exist on all devices. - - NOTE: To manipulate 64 bit counters you need to use Math::BigInt, - since the values are too large for a normal Perl scalar. Set the - global $SNMP::Info::BIGINT to 1 , or pass the BigInt value to new() - if you want SNMP::Info to do it for you. - - ("ifInOctets") ("ifOutOctets") ("ifHCInOctets") ("ifHCOutOctets") - - $info->i_errors_in(), $info->i_errors_out() - Number of packets that contained an error preventing delivery. See - "IF-MIB" for more info. - - ("ifInErrors") ("ifOutErrors") - - $info->i_pkts_ucast_in(), $info->i_pkts_ucast_out(), - $info->i_pkts_ucast_in64(), $info->i_pkts_ucast_out64() - Number of packets not sent to a multicast or broadcast address. - - 64 bit version may not exist on all devices. - - ("ifInUcastPkts") ("ifOutUcastPkts") ("ifHCInUcastPkts") - ("ifHCOutUcastPkts") - - $info->i_pkts_nucast_in(), $info->i_pkts_nucast_out(), - Number of packets sent to a multicast or broadcast address. - - These methods are deprecated by i_pkts_multi_in() and - i_pkts_bcast_in() according to "IF-MIB". Actual device usage may - vary. - - ("ifInNUcastPkts") ("ifOutNUcastPkts") - - $info->i_pkts_multi_in() $info->i_pkts_multi_out(), - $info->i_pkts_multi_in64(), $info->i_pkts_multi_out64() - Number of packets sent to a multicast address. - - 64 bit version may not exist on all devices. - - ("ifInMulticastPkts") ("ifOutMulticastPkts") ("ifHCInMulticastPkts") - ("ifHCOutMulticastPkts") - - $info->i_pkts_bcast_in() $info->i_pkts_bcast_out(), - $info->i_pkts_bcast_in64() $info->i_pkts_bcast_out64() - Number of packets sent to a broadcast address on an interface. - - 64 bit version may not exist on all devices. - - ("ifInBroadcastPkts") ("ifOutBroadcastPkts") ("ifHCInBroadcastPkts") - ("ifHCOutBroadcastPkts") - - $info->i_discards_in() $info->i_discards_out() - "The number of inbound packets which were chosen to be discarded - even though no errors had been detected to prevent their being - deliverable to a higher-layer protocol. One possible reason for - discarding such a packet could be to free up buffer space." - ("IF-MIB") - - ("ifInDiscards") ("ifOutDiscards") - - $info->i_bad_proto_in() - "For packet-oriented interfaces, the number of packets received via - the interface which were discarded because of an unknown or - unsupported protocol. For character-oriented or fixed-length - interfaces that support protocol multiplexing the number of - transmission units received via the interface which were discarded - because of an unknown or unsupported protocol. For any interface - that does not support protocol multiplexing, this counter will - always be 0." - - ("ifInUnknownProtos") - - $info->i_qlen_out() - "The length of the output packet queue (in packets)." - - ("ifOutQLen") - - $info->i_specific() - See "IF-MIB" for full description - - ("ifSpecific") - - IP Address Table - - Each entry in this table is an IP address in use on this device. Usually - this is implemented in Layer3 Devices. - - $info->ip_index() - Maps the IP Table to the IID - - ("ipAdEntIfIndex") - - $info->ip_table() - Maps the Table to the IP address - - ("ipAdEntAddr") - - $info->ip_netmask() - Gives netmask setting for IP table entry. - - ("ipAdEntNetMask") - - $info->ip_broadcast() - Gives broadcast address for IP table entry. - - ("ipAdEntBcastAddr") - - IP Routing Table - - $info->ipr_route() - The route in question. A value of 0.0.0.0 is the default gateway - route. - - ("ipRouteDest") - - $info->ipr_if() - The interface (IID) that the route is on. Use interfaces() to map. - - ("ipRouteIfIndex") - - $info->ipr_1() - Primary routing metric for this route. - - ("ipRouteMetric1") - - $info->ipr_2() - If metrics are not used, they should be set to -1 - - ("ipRouteMetric2") - - $info->ipr_3() - ("ipRouteMetric3") - - $info->ipr_4() - ("ipRouteMetric4") - - $info->ipr_5() - ("ipRouteMetric5") - - $info->ipr_dest() - From RFC1213: - - "The IP address of the next hop of this route. - (In the case of a route bound to an interface - which is realized via a broadcast media, the value - of this field is the agent's IP address on that - interface.)" - - ("ipRouteNextHop") - - $info->ipr_type() - From RFC1213: - - other(1), -- none of the following - invalid(2), -- an invalidated route - -- route to directly - direct(3), -- connected (sub-)network - -- route to a non-local - indirect(4) -- host/network/sub-network - - - "The type of route. Note that the values - direct(3) and indirect(4) refer to the notion of - direct and indirect routing in the IP - architecture. - - Setting this object to the value invalid(2) has - the effect of invalidating the corresponding entry - in the ipRouteTable object. That is, it - effectively disassociates the destination - identified with said entry from the route - identified with said entry. It is an - implementation-specific matter as to whether the - agent removes an invalidated entry from the table. - Accordingly, management stations must be prepared - to receive tabular information from agents that - corresponds to entries not currently in use. - Proper interpretation of such entries requires - examination of the relevant ipRouteType object." - - ("ipRouteType") - - $info->ipr_proto() - From RFC1213: - - other(1), -- none of the following - -- non-protocol information, - -- e.g., manually configured - local(2), -- entries - -- set via a network - netmgmt(3), -- management protocol - -- obtained via ICMP, - icmp(4), -- e.g., Redirect - -- the remaining values are - -- all gateway routing - -- protocols - egp(5), - ggp(6), - hello(7), - rip(8), - is-is(9), - es-is(10), - ciscoIgrp(11), - bbnSpfIgp(12), - ospf(13), - bgp(14) - - ("ipRouteProto") - - $info->ipr_age() - Seconds since route was last updated or validated. - - ("ipRouteAge") - - $info->ipr_mask() - Subnet Mask of route. 0.0.0.0 for default gateway. - - ("ipRouteMask") - - $info->ipr_info() - Reference to MIB definition specific to routing protocol. - - ("ipRouteInfo") - - Topology Information - - Based upon the manufacturer and software version devices may support - some combination of Layer 2 topology protocol information. SNMP::Info - supports querying Link Layer Discovery Protocol (LLDP), Cisco Discovery - Protocol (CDP), SynOptics/Bay/Nortel/Avaya Network Management Protocol - (SONMP), Foundry/Brocade Discovery Protocol (FDP), Extreme Discovery - Protocol (EDP), and Alcatel Mapping Adjacency Protocol (AMAP). - - For protocol specific information and implementation: - - LLDP: See SNMP::Info::LLDP for details. - CDP: See SNMP::Info::CDP for details. - SONMP: See SNMP::Info::SONMP for details. - FDP: See SNMP::Info::FDP for details. - EDP: See SNMP::Info::EDP for details. - AMAP: See SNMP::Info::AMAP for details. - - Topology Capabilities - - $info->has_topo() - Reports Layer 2 topology protocols which are supported and running - on a device. - - Returns either a reference to an array of protocols, possible values - being: "lldp", "cdp", "sonmp", "fdp", "edp", "amap" or "undef" if no - protocols are supported or running. - - Common Topology Table Information - - The common topology table methods below will query the device for - information from the specified topology protocols and return a single - hash combining all information. As a result, there may be identical - topology information returned from the two protocols causing duplicate - entries. It is the calling program's responsibility to identify any - duplicate entries and remove duplicates if necessary. If it is necessary - to understand which protocol provided the information, utilize the - protocol specific methods directly rather than the generic methods. - - The methods support partial table fetches by providing a partial as the - first argument. - - If a reference to an array is provided as the second argument, those - protocols will be queried for information. The supported array values - are: "lldp", "cdp", "sonmp", "fdp", "edp", "amap". - - If nothing is passed in as the second argument, the methods will call - has_topo() to determine supported and running topology protocols on the - device. - - $info->c_ip(partial, topology_protocol_arrayref) - Returns reference to hash. Key: iid, Value: remote IPv4 address - - If multiple entries exist with the same local port, c_if(), with the - same IPv4 address, c_ip(), it may be a duplicate entry. - - If multiple entries exist with the same local port, c_if(), with - different IPv4 addresses, c_ip(), there is either a device in - between two or more devices utilizing a different topology protocol - or multiple devices which are not directly connected. - - Use the protocol specific methods to dig deeper. - - $info->c_if(partial, topology_protocol_arrayref) - Returns reference to hash. Key: iid, Value: local device port - (interfaces) - - $info->c_port(partial, topology_protocol_arrayref) - Returns reference to hash. Key: iid, Value: remote port (interfaces) - - $info->c_id(partial, topology_protocol_arrayref) - Returns reference to hash. Key: iid, Value: string value used to - identify the chassis component associated with the remote system. - - Note: SONMP does not return this information. - - $info->c_platform(partial, topology_protocol_arrayref) - Returns reference to hash. Key: iid, Value: Remote Device Type - - Note: EDP does not provide this information. LLDP uses - ("lldpRemSysDesc") or "lldp_rem_sysname" as the closest match. - - $info->c_cap(partial, topology_protocol_arrayref) - Returns reference to hash of arrays. Key: iid, Value: Array of - capabilities supported by the device. See the specific protocol - class for string values which could be elements within the array. - - Note: Only CDP and LLDP support this method. - -SETTING DATA VIA SNMP - - This section explains how to use SNMP::Info to do SNMP Set operations. - - $info->set_METHOD($value) - Sets the global METHOD to value. Assumes that iid is .0 - - Returns if failed, or the return value from SNMP::Session::set() - (snmp_errno) - - $info->set_location("Here!"); - - $info->set_METHOD($value,$iid) - Table Methods. Set iid of method to value. - - Returns if failed, or the return value from SNMP::Session::set() - (snmp_errno) - - # Disable a port administratively - my %if_map = reverse %{$info->interfaces()} - $info->set_i_up_admin('down', $if_map{'FastEthernet0/0'}) - or die "Couldn't disable the port. ",$info->error(1); - - NOTE: You must be connected to your device with a "ReadWrite" community - string in order for set operations to work. - - NOTE: This will only set data listed in %FUNCS and %GLOBALS. For data - acquired from overridden methods (subroutines) specific set_METHOD() - subroutines will need to be added if they haven't been already. - -Quiet Mode - - SNMP::Info will not chirp anything to STDOUT unless there is a serious - error (in which case it will probably die). - - To get lots of debug info, set the Debug flag when calling new() or call - $info->debug(1); - - When calling a method check the return value. If the return value is - undef then check $info->error() - - Beware, calling $info->error() clears the error. - - my $name = $info->name() or die "Couldn't get sysName!" . $name->error(); - -EXTENDING SNMP::INFO - - To support a new class (vendor or platform) of device, add a Perl - package with the data structures and methods listed below. - - If this seems a little scary, then the SNMP::Info developers are usually - happy to accept the SNMP data from your device and make an attempt at - the class themselves. Usually a "beta" release will go to CPAN for you - to verify the implementation. - - Gathering MIB data for SNMP::Info Developers - - The preference is to open a feature request in the SourceForge project. - This allows all developers to have visibility into the request. Please - include pointers to the applicable platform MIBs. For development we - will need an "snmpwalk" of the device. There is a tool now included in - the SNMP::Info distribution to help with this task, although you'll most - likely need to download the distribution from CPAN as it's included in - the ""t/util"" directory. - - The utility is named "make_snmpdata.pl". Run it with a command line - like: - - ./make_snmpdata.pl -c community -i -d device_ip \ - -m /home/netdisco-mibs/rfc:/home/netdisco-mibs/net-snmp:/home/netdisco-mibs/dir3 \ - SNMPv2-MIB IF-MIB EtherLike-MIB BRIDGE-MIB Q-BRIDGE-MIB ENTITY-MIB \ - POWER-ETHERNET-MIB IPV6-MIB LLDP-MIB DEVICE-SPECIFIC-MIB-NAME(s) > output.txt - - This will print to the file every MIB entry with data in a format that - the developers can use to emulate read operations without needing access - to the device. Preference would be to mask any sensitive data in the - output, zip the file, and upload as an attachment to the Sourceforge - tracker. However, if you do not feel comfortable uploading the output to - the tracker you could e-mail it to the developer that has claimed the - ticket. - - Data Structures required in new Subclass - - A class inheriting this class must implement these data structures : - - $INIT - Used to flag if the MIBs have been loaded yet. - - %GLOBALS - Contains a hash in the form ( method_name => SNMP MIB leaf name ) - These are scalar values such as name, uptime, etc. - - To resolve MIB leaf name conflicts between private MIBs, you may - prefix the leaf name with the MIB replacing each - (dash) and : - (colon) with an _ (underscore). For example, - ALTEON_TIGON_SWITCH_MIB__agSoftwareVersion would be used as the hash - value instead of the net-snmp notation - ALTEON-TIGON-SWITCH-MIB::agSoftwareVersion. - - When choosing the name for the methods, be aware that other new Sub - Modules might inherit this one to get it's features. Try to choose a - prefix for methods that will give it's own name space inside the - SNMP::Info methods. - - %FUNCS - Contains a hash in the form ( method_name => SNMP MIB leaf name) - These are table entries, such as the "ifIndex" - - To resolve MIB leaf name conflicts between private MIBs, you may - prefix the leaf name with the MIB replacing each - (dash) and : - (colon) with an _ (underscore). For example, - ALTEON_TS_PHYSICAL_MIB__agPortCurCfgPortName would be used as the - hash value instead of the net-snmp notation - ALTEON-TS-PHYSICAL-MIB::agPortCurCfgPortName. - - %MIBS - A list of each mib needed. - - ('MIB-NAME' => 'itemToTestForPresence') - - The value for each entry should be a MIB object to check for to make - sure that the MIB is present and has loaded correctly. - - $info->init() will throw an exception if a MIB does not load. - - %MUNGE - A map between method calls (from %FUNCS or %GLOBALS) and subroutine - methods. The subroutine called will be passed the data as it gets it - from SNMP and it should return that same data in a more human - friendly format. - - Sample %MUNGE: - - (my_ip => \&munge_ip, - my_mac => \&munge_mac, - my_layers => \&munge_dec2bin - ) - - Sample Subclass - - Let's make a sample Layer 2 Device subclass. This class will inherit the - Cisco Vlan module as an example. - - ----------------------- snip -------------------------------- - - # SNMP::Info::Layer2::Sample - - package SNMP::Info::Layer2::Sample; - - $VERSION = 0.1; - - use strict; - - use Exporter; - use SNMP::Info::Layer2; - use SNMP::Info::CiscoVTP; - - @SNMP::Info::Layer2::Sample::ISA = qw/SNMP::Info::Layer2 - SNMP::Info::CiscoVTP Exporter/; - @SNMP::Info::Layer2::Sample::EXPORT_OK = qw//; - - use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/; - - %MIBS = (%SNMP::Info::Layer2::MIBS, - %SNMP::Info::CiscoVTP::MIBS, - 'SUPER-DOOPER-MIB' => 'supermibobject' - ); - - %GLOBALS = (%SNMP::Info::Layer2::GLOBALS, - %SNMP::Info::CiscoVTP::GLOBALS, - 'name' => 'supermib_supername', - 'favorite_color' => 'supermib_fav_color_object', - 'favorite_movie' => 'supermib_fav_movie_val' - ); - - %FUNCS = (%SNMP::Info::Layer2::FUNCS, - %SNMP::Info::CiscoVTP::FUNCS, - # Super Dooper MIB - Super Hero Table - 'super_hero_index' => 'SuperHeroIfIndex', - 'super_hero_name' => 'SuperHeroIfName', - 'super_hero_powers' => 'SuperHeroIfPowers' - ); - - - %MUNGE = (%SNMP::Info::Layer2::MUNGE, - %SNMP::Info::CiscoVTP::MUNGE, - 'super_hero_powers' => \&munge_powers - ); - - # OverRide uptime() method from %SNMP::Info::GLOBALS - sub uptime { - my $sample = shift; - - my $name = $sample->name(); - - # this is silly but you get the idea - return '600' if defined $name ; - } - - # Create our own munge function - sub munge_powers { - my $power = shift; - - # Take the returned obscure value and return something useful. - return 'Fire' if $power =~ /reallyhot/i; - return 'Ice' if $power =~ /reallycold/i; - - # Else - return $power; - } - - # Copious Documentation here!!! - =head1 NAME - =head1 AUTHOR - =head1 SYNOPSIS - =head1 DESCRIPTION - =head2 Inherited Classes - =head2 Required MIBs - =head1 GLOBALS - =head2 Overrides - =head1 TABLE METHODS - =head2 Overrides - =cut - - 1; # don't forget this line - ----------------------- snip -------------------------------- - - Be sure and send the debugged version to - snmp-info-users@lists.sourceforge.net to be included in the next version - of SNMP::Info. - -SNMP::INFO INTERNALS - - Object Namespace - - Internal data is stored with bareword keys. For example $info->{debug} - - SNMP Data is stored or marked cached with keys starting with an - underscore. For example $info->{_name} is the cache for $info->name(). - - Cached Table data is stored in $info->store() and marked cached per - above. - - Package Globals - - These set the default value for an object upon creation. - - $DEBUG - Default 0. Sends copious debug info to stdout. This global sets the - object's debug status in new() unless 'Debug' argument passed in - new(). Change objects' debug status with $info->debug(). - - $BIGINT - Default 0. Set to true to have 64 bit counters return Math::BigInt - objects instead of scalar string values. See note under Interface - Statistics about 64 bit values. - - $NOSUCH - Default 1. Set to false to disable RetryNoSuch option for - SNMP::Session. Or see method in new() to do it on an object scope. - - $REPEATERS - Default 20. MaxRepeaters for BULKWALK operations. See "perldoc SNMP" - for more info. Can change by passing BulkRepeaters option in new() - - Data Munging Callback Subroutines - - munge_speed() - Makes human friendly speed ratings using %SPEED_MAP - - %SPEED_MAP = ( - '56000' => '56 kbps', - '64000' => '64 kbps', - '115000' => '115 kpbs', - '1500000' => '1.5 Mbps', - '1536000' => 'T1', - '1544000' => 'T1', - '2000000' => '2.0 Mbps', - '2048000' => '2.048 Mbps', - '3072000' => 'Dual T1', - '3088000' => 'Dual T1', - '4000000' => '4.0 Mbps', - '10000000' => '10 Mbps', - '11000000' => '11 Mbps', - '20000000' => '20 Mbps', - '16000000' => '16 Mbps', - '16777216' => '16 Mbps', - '44210000' => 'T3', - '44736000' => 'T3', - '45000000' => '45 Mbps', - '45045000' => 'DS3', - '46359642' => 'DS3', - '51850000' => 'OC-1', - '54000000' => '54 Mbps', - '64000000' => '64 Mbps', - '100000000' => '100 Mbps', - '200000000' => '200 Mbps', - '149760000' => 'ATM on OC-3', - '155000000' => 'OC-3', - '155519000' => 'OC-3', - '155520000' => 'OC-3', - '400000000' => '400 Mbps', - '599040000' => 'ATM on OC-12', - '622000000' => 'OC-12', - '622080000' => 'OC-12', - '1000000000' => '1.0 Gbps', - '2000000000' => '2.0 Gbps', - '2488000000' => 'OC-48', - ) - - Note: high speed interfaces (usually 1 Gbps or faster) have their - link speed in "ifHighSpeed". i_speed() automatically determines - whether to use "ifSpeed" or "ifHighSpeed"; if the latter is used, - the value is munged by munge_highspeed(). SNMP::Info can return - speeds up to terabit levels this way. - - munge_highspeed() - Makes human friendly speed ratings for "ifHighSpeed" - - munge_ip() - Takes a binary IP and makes it dotted ASCII - - munge_mac() - Takes an octet stream (HEX-STRING) and returns a colon separated - ASCII hex string. - - munge_prio_mac() - Takes an 2-byte octet stream (HEX-STRING) and returns a colon - separated ASCII hex string. - - munge_prio_port() - Takes an 8-byte octet stream (HEX-STRING) and returns a colon - separated ASCII hex string. - - munge_octet2hex() - Takes a binary octet stream and returns an ASCII hex string - - munge_dec2bin() - Takes a binary char and returns its ASCII binary representation - - munge_bits - Takes a SNMP2 'BITS' field and returns the ASCII bit string - - munge_counter64 - If $BIGINT is set to true, then a Math::BigInt object is returned. - See Math::BigInt for details. - - munge_i_up - Net-SNMP tends to load "RFC1213-MIB" first, and so ignores the - updated enumeration for "ifOperStatus" in "IF-MIB". This munge - handles the "newer" definitions for the enumeration in IF-MIB. - - TODO: Get the precedence of MIBs and overriding of MIB data in - Net-SNMP figured out. Heirarchy/precendence of MIBS in SNMP::Info. - - munge_port_list - Takes an octet string representing a set of ports and returns a - reference to an array of binary values each array element - representing a port. - - If the element has a value of '1', then that port is included in the - set of ports; the port is not included if it has a value of '0'. - - munge_null() - Removes control characters from a string - - munge_e_type() - Takes an OID and return the object name if the right MIB is loaded. - - Internally Used Functions - - $info->init() - Used internally. Loads all entries in %MIBS. - - $info->args() - Returns a reference to the argument hash supplied to SNMP::Session - - $info->class() - Returns the class name of the object. - - $info->error_throw(error message) - Stores the error message for use by $info->error() - - If $info->debug() is true, then the error message is carped too. - - $info->funcs() - Returns a reference to the %FUNCS hash. - - $info->globals() - Returns a reference to the %GLOBALS hash. - - $info->mibs() - Returns a reference to the %MIBS hash. - - $info->munge() - Returns a reference of the %MUNGE hash. - - $info->nosuch() - Returns NoSuch value set or not in new() - - $info->session() - Gets or Sets the SNMP::Session object. - - $info->store(new_store) - Returns or sets hash store for Table functions. - - Store is a hash reference in this format : - - $info->store = { attribute => { iid => value , iid2 => value2, ... } - }; - - $info->_global() - Used internally by AUTOLOAD to create dynamic methods from %GLOBALS - or a single instance MIB Leaf node name from a loaded MIB. - - Example: $info->name() on the first call dispatches to AUTOLOAD() - which calls $info->_global('name') creating the method name(). - - These methods return data as a scalar. - - $info->_set(attr,val,iid,type) - Used internally by set_multi() to run an SNMP set command. When run - clears attr cache. - - Attr can be passed as either a scalar or a reference to an array or - array of arrays when used with set_multi(). - - Example: $info->set_name('dog',3) uses autoload to resolve to - $info->_set('name','dog',3); - - $info->_make_setter(val,iid) - Used internally by AUTOLOAD to create dynamic methods from either - %GLOBALS, %FUNCS, or a valid mib leaf from a loaded MIB which runs - an SNMP set command. When run clears the attribute cache. - - Example: $info->set_name('dog',3) dispatches to autoload to resolve - to $info->_set('name','dog',3) and _make_setter creates the - set_name() method. - - $info->set_multi(arrayref) - Used to run an SNMP set command on several new values in the one - request. Returns the result of $info->_set(method). - - Pass either a reference to a 4 element array [, , , - ] or a reference to an array of 4 element arrays to specify - multiple values. - - - One of the following forms: - 1) leaf identifier (e.g., C<'sysContact'>) - 2) An entry in either %FUNCS, %GLOBALS (e.g., 'contact') - - The dotted-decimal, instance identifier. For scalar MIB objects - use '0' - - The SNMP data value being set (e.g., 'netdisco') - - Optional as the MIB should be loaded. - - If one of the set assignments is invalid, then the request will be - rejected without applying any of the new values - regardless of the - order they appear in the list. - - Example: my $vlan_set = [ - ['qb_v_untagged',"$old_vlan_id","$old_untagged_portlist"], - ['qb_v_egress',"$new_vlan_id","$new_egress_portlist"], - ['qb_v_egress',"$old_vlan_id","$old_egress_portlist"], - ['qb_v_untagged',"$new_vlan_id","$new_untagged_portlist"], - ['qb_i_vlan',"$port","$new_vlan_id"], ]; - - $info->set_multi($vlan_set); - - $info->load_all() - Debugging routine. This does not include any overridden method or - method implemented by subroutine. - - Runs $info->load_METHOD() for each entry in $info->funcs(); - - Returns $info->store() -- See store() entry. - - Note return value has changed since version 0.3 - - $info->all() - Runs $info->load_all() once then returns $info->store(); - - Use $info->load_all() to reload the data. - - Note return value has changed since version 0.3 - - $info->_load_attr() - Used internally by AUTOLOAD to create dynamic methods from %FUNCS or - a MIB Leaf node name contained within a table of a loaded MIB. - - Supports partial table fetches and single instance table fetches. - See "Partial Table Fetches" in SNMP::Info. - - These methods return data as a reference to a hash. - - $info->_show_attr() - Used internally by AUTOLOAD to return data called by methods listed - in %FUNCS. - - $info->snmp_connect_ip(ip) - Returns true or false based upon snmp connectivity to an IP. - - modify_port_list(portlist,offset,replacement) - Replaces the specified bit in a port_list array and returns the - packed bitmask - - $info->_cache(attr, data) - Cache retrieved data so that if it's asked for again, we use the - cache instead of going back to Net-SNMP. Data is cached inside the - blessed hashref $self. - - Accepts the leaf and value (scalar, or hashref for a table). Does - not return anything useful. - - $info->_munge(attr, data) - Raw data returned from Net-SNMP might not be formatted correctly or - might have platform-specific bugs or mistakes. The MUNGE feature of - SNMP::Info allows for fixups to take place. - - Accepts the leaf and value (scalar, or hashref for a table) and - returns the raw or the munged data, as appropriate. That is, you do - not need to know whether MUNGE is installed, and it's safe to call - this method regardless. - - _validate_autoload_method(method) - Used internally by AUTOLOAD to validate that a dynamic method should - be created. Returns the OID of the MIB leaf node the method will get - or set. - - 1. Returns unless method is listed in %FUNCS, %GLOBALS, or is MIB - Leaf node name in a loaded MIB for given class. - 2. Translates the MIB Leaf node name to an OID. - 3. Checks to see if the method access type is allowed for the - resolved OID. Write access for set_ methods, read access for others. - - $info->can() - Overrides UNIVERSAL::can() so that objects will correctly report - their capabilities to include dynamic methods generated at run time - via AUTOLOAD. - - Calls parent can() first to see if method exists, if not validates - that a method should be created then dispatches to the appropriate - internal method for creation. The newly created method is inserted - into the symbol table returning to AUTOLOAD only for the initial - method call. - - Returns undef if the method does not exist and can not be created. - - AUTOLOAD - - Each entry in either %FUNCS, %GLOBALS, or MIB Leaf node names present in - loaded MIBs are used by AUTOLOAD() to create dynamic methods. Generated - methods are inserted into the symbol table so that subsequent calls can - avoid AUTOLOAD() and dispatch directly. - - 1. Returns unless method is listed in %FUNCS, %GLOBALS, or is a MIB Leaf - node name in a loaded MIB for given class. - 2. If the method exists in %GLOBALS or is a single instance MIB Leaf - node name from a loaded MIB, _global() generates the method. - 3. If a set_ prefix is present _make_setter() generates the method. - 4. If the method exists in %FUNCS or is a MIB Leaf node name contained - within a table from a loaded MIB, _load_attr() generates the method. - 5. A load_ prefix forces reloading of data and does not use cached data. - 6. A _raw suffix returns data ignoring any munge routines. - - Override any dynamic method listed in %GLOBALS, %FUNCS, or MIB Leaf node - name a by creating a subroutine with the same name. - - For example to override $info->name() create `` sub name {...}'' in your - subclass. - -COPYRIGHT AND LICENSE - - Changes from SNMP::Info Version 0.7 and on are: Copyright (c) 2003-2010 - Max Baker and SNMP::Info Developers All rights reserved. - - Original Code is: 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. - diff --git a/DEVELOP b/contrib/DEVELOP similarity index 100% rename from DEVELOP rename to contrib/DEVELOP diff --git a/t/docmunge b/contrib/util/docmunge similarity index 100% rename from t/docmunge rename to contrib/util/docmunge diff --git a/t/make_dev_matrix.pl b/contrib/util/make_dev_matrix.pl similarity index 100% rename from t/make_dev_matrix.pl rename to contrib/util/make_dev_matrix.pl diff --git a/t/util/make_snmpdata.pl b/contrib/util/make_snmpdata.pl similarity index 100% rename from t/util/make_snmpdata.pl rename to contrib/util/make_snmpdata.pl diff --git a/t/push_ver b/contrib/util/push_ver similarity index 89% rename from t/push_ver rename to contrib/util/push_ver index e4d0caef..944a45b6 100755 --- a/t/push_ver +++ b/contrib/util/push_ver @@ -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"; diff --git a/t/run_test b/contrib/util/run_test similarity index 100% rename from t/run_test rename to contrib/util/run_test diff --git a/t/test_class.pl b/contrib/util/test_class.pl similarity index 100% rename from t/test_class.pl rename to contrib/util/test_class.pl diff --git a/t/util/test_class_mocked.pl b/contrib/util/test_class_mocked.pl similarity index 100% rename from t/util/test_class_mocked.pl rename to contrib/util/test_class_mocked.pl diff --git a/Info.pm b/lib/SNMP/Info.pm similarity index 100% rename from Info.pm rename to lib/SNMP/Info.pm diff --git a/Info/AMAP.pm b/lib/SNMP/Info/AMAP.pm similarity index 100% rename from Info/AMAP.pm rename to lib/SNMP/Info/AMAP.pm diff --git a/Info/AdslLine.pm b/lib/SNMP/Info/AdslLine.pm similarity index 100% rename from Info/AdslLine.pm rename to lib/SNMP/Info/AdslLine.pm diff --git a/Info/Aggregate.pm b/lib/SNMP/Info/Aggregate.pm similarity index 100% rename from Info/Aggregate.pm rename to lib/SNMP/Info/Aggregate.pm diff --git a/Info/Airespace.pm b/lib/SNMP/Info/Airespace.pm similarity index 100% rename from Info/Airespace.pm rename to lib/SNMP/Info/Airespace.pm diff --git a/Info/Bridge.pm b/lib/SNMP/Info/Bridge.pm similarity index 100% rename from Info/Bridge.pm rename to lib/SNMP/Info/Bridge.pm diff --git a/Info/CDP.pm b/lib/SNMP/Info/CDP.pm similarity index 100% rename from Info/CDP.pm rename to lib/SNMP/Info/CDP.pm diff --git a/Info/CiscoAgg.pm b/lib/SNMP/Info/CiscoAgg.pm similarity index 100% rename from Info/CiscoAgg.pm rename to lib/SNMP/Info/CiscoAgg.pm diff --git a/Info/CiscoConfig.pm b/lib/SNMP/Info/CiscoConfig.pm similarity index 100% rename from Info/CiscoConfig.pm rename to lib/SNMP/Info/CiscoConfig.pm diff --git a/Info/CiscoPortSecurity.pm b/lib/SNMP/Info/CiscoPortSecurity.pm similarity index 100% rename from Info/CiscoPortSecurity.pm rename to lib/SNMP/Info/CiscoPortSecurity.pm diff --git a/Info/CiscoPower.pm b/lib/SNMP/Info/CiscoPower.pm similarity index 100% rename from Info/CiscoPower.pm rename to lib/SNMP/Info/CiscoPower.pm diff --git a/Info/CiscoQOS.pm b/lib/SNMP/Info/CiscoQOS.pm similarity index 100% rename from Info/CiscoQOS.pm rename to lib/SNMP/Info/CiscoQOS.pm diff --git a/Info/CiscoRTT.pm b/lib/SNMP/Info/CiscoRTT.pm similarity index 100% rename from Info/CiscoRTT.pm rename to lib/SNMP/Info/CiscoRTT.pm diff --git a/Info/CiscoStack.pm b/lib/SNMP/Info/CiscoStack.pm similarity index 100% rename from Info/CiscoStack.pm rename to lib/SNMP/Info/CiscoStack.pm diff --git a/Info/CiscoStats.pm b/lib/SNMP/Info/CiscoStats.pm similarity index 100% rename from Info/CiscoStats.pm rename to lib/SNMP/Info/CiscoStats.pm diff --git a/Info/CiscoStpExtensions.pm b/lib/SNMP/Info/CiscoStpExtensions.pm similarity index 100% rename from Info/CiscoStpExtensions.pm rename to lib/SNMP/Info/CiscoStpExtensions.pm diff --git a/Info/CiscoVTP.pm b/lib/SNMP/Info/CiscoVTP.pm similarity index 100% rename from Info/CiscoVTP.pm rename to lib/SNMP/Info/CiscoVTP.pm diff --git a/Info/EDP.pm b/lib/SNMP/Info/EDP.pm similarity index 100% rename from Info/EDP.pm rename to lib/SNMP/Info/EDP.pm diff --git a/Info/Entity.pm b/lib/SNMP/Info/Entity.pm similarity index 100% rename from Info/Entity.pm rename to lib/SNMP/Info/Entity.pm diff --git a/Info/EtherLike.pm b/lib/SNMP/Info/EtherLike.pm similarity index 100% rename from Info/EtherLike.pm rename to lib/SNMP/Info/EtherLike.pm diff --git a/Info/FDP.pm b/lib/SNMP/Info/FDP.pm similarity index 100% rename from Info/FDP.pm rename to lib/SNMP/Info/FDP.pm diff --git a/Info/IEEE802dot11.pm b/lib/SNMP/Info/IEEE802dot11.pm similarity index 100% rename from Info/IEEE802dot11.pm rename to lib/SNMP/Info/IEEE802dot11.pm diff --git a/Info/IEEE802dot3ad.pm b/lib/SNMP/Info/IEEE802dot3ad.pm similarity index 100% rename from Info/IEEE802dot3ad.pm rename to lib/SNMP/Info/IEEE802dot3ad.pm diff --git a/Info/IPv6.pm b/lib/SNMP/Info/IPv6.pm similarity index 100% rename from Info/IPv6.pm rename to lib/SNMP/Info/IPv6.pm diff --git a/Info/LLDP.pm b/lib/SNMP/Info/LLDP.pm similarity index 100% rename from Info/LLDP.pm rename to lib/SNMP/Info/LLDP.pm diff --git a/Info/Layer1.pm b/lib/SNMP/Info/Layer1.pm similarity index 100% rename from Info/Layer1.pm rename to lib/SNMP/Info/Layer1.pm diff --git a/Info/Layer1/Allied.pm b/lib/SNMP/Info/Layer1/Allied.pm similarity index 100% rename from Info/Layer1/Allied.pm rename to lib/SNMP/Info/Layer1/Allied.pm diff --git a/Info/Layer1/Asante.pm b/lib/SNMP/Info/Layer1/Asante.pm similarity index 100% rename from Info/Layer1/Asante.pm rename to lib/SNMP/Info/Layer1/Asante.pm diff --git a/Info/Layer1/Bayhub.pm b/lib/SNMP/Info/Layer1/Bayhub.pm similarity index 100% rename from Info/Layer1/Bayhub.pm rename to lib/SNMP/Info/Layer1/Bayhub.pm diff --git a/Info/Layer1/Cyclades.pm b/lib/SNMP/Info/Layer1/Cyclades.pm similarity index 100% rename from Info/Layer1/Cyclades.pm rename to lib/SNMP/Info/Layer1/Cyclades.pm diff --git a/Info/Layer1/S3000.pm b/lib/SNMP/Info/Layer1/S3000.pm similarity index 100% rename from Info/Layer1/S3000.pm rename to lib/SNMP/Info/Layer1/S3000.pm diff --git a/Info/Layer2.pm b/lib/SNMP/Info/Layer2.pm similarity index 100% rename from Info/Layer2.pm rename to lib/SNMP/Info/Layer2.pm diff --git a/Info/Layer2/3Com.pm b/lib/SNMP/Info/Layer2/3Com.pm similarity index 100% rename from Info/Layer2/3Com.pm rename to lib/SNMP/Info/Layer2/3Com.pm diff --git a/Info/Layer2/Airespace.pm b/lib/SNMP/Info/Layer2/Airespace.pm similarity index 100% rename from Info/Layer2/Airespace.pm rename to lib/SNMP/Info/Layer2/Airespace.pm diff --git a/Info/Layer2/Aironet.pm b/lib/SNMP/Info/Layer2/Aironet.pm similarity index 100% rename from Info/Layer2/Aironet.pm rename to lib/SNMP/Info/Layer2/Aironet.pm diff --git a/Info/Layer2/Allied.pm b/lib/SNMP/Info/Layer2/Allied.pm similarity index 100% rename from Info/Layer2/Allied.pm rename to lib/SNMP/Info/Layer2/Allied.pm diff --git a/Info/Layer2/Baystack.pm b/lib/SNMP/Info/Layer2/Baystack.pm similarity index 100% rename from Info/Layer2/Baystack.pm rename to lib/SNMP/Info/Layer2/Baystack.pm diff --git a/Info/Layer2/C1900.pm b/lib/SNMP/Info/Layer2/C1900.pm similarity index 100% rename from Info/Layer2/C1900.pm rename to lib/SNMP/Info/Layer2/C1900.pm diff --git a/Info/Layer2/C2900.pm b/lib/SNMP/Info/Layer2/C2900.pm similarity index 100% rename from Info/Layer2/C2900.pm rename to lib/SNMP/Info/Layer2/C2900.pm diff --git a/Info/Layer2/Catalyst.pm b/lib/SNMP/Info/Layer2/Catalyst.pm similarity index 100% rename from Info/Layer2/Catalyst.pm rename to lib/SNMP/Info/Layer2/Catalyst.pm diff --git a/Info/Layer2/Centillion.pm b/lib/SNMP/Info/Layer2/Centillion.pm similarity index 100% rename from Info/Layer2/Centillion.pm rename to lib/SNMP/Info/Layer2/Centillion.pm diff --git a/Info/Layer2/Cisco.pm b/lib/SNMP/Info/Layer2/Cisco.pm similarity index 100% rename from Info/Layer2/Cisco.pm rename to lib/SNMP/Info/Layer2/Cisco.pm diff --git a/Info/Layer2/CiscoSB.pm b/lib/SNMP/Info/Layer2/CiscoSB.pm similarity index 100% rename from Info/Layer2/CiscoSB.pm rename to lib/SNMP/Info/Layer2/CiscoSB.pm diff --git a/Info/Layer2/HP.pm b/lib/SNMP/Info/Layer2/HP.pm similarity index 100% rename from Info/Layer2/HP.pm rename to lib/SNMP/Info/Layer2/HP.pm diff --git a/Info/Layer2/HP4000.pm b/lib/SNMP/Info/Layer2/HP4000.pm similarity index 100% rename from Info/Layer2/HP4000.pm rename to lib/SNMP/Info/Layer2/HP4000.pm diff --git a/Info/Layer2/HPVC.pm b/lib/SNMP/Info/Layer2/HPVC.pm similarity index 100% rename from Info/Layer2/HPVC.pm rename to lib/SNMP/Info/Layer2/HPVC.pm diff --git a/Info/Layer2/Kentrox.pm b/lib/SNMP/Info/Layer2/Kentrox.pm similarity index 100% rename from Info/Layer2/Kentrox.pm rename to lib/SNMP/Info/Layer2/Kentrox.pm diff --git a/Info/Layer2/N2270.pm b/lib/SNMP/Info/Layer2/N2270.pm similarity index 100% rename from Info/Layer2/N2270.pm rename to lib/SNMP/Info/Layer2/N2270.pm diff --git a/Info/Layer2/NAP222x.pm b/lib/SNMP/Info/Layer2/NAP222x.pm similarity index 100% rename from Info/Layer2/NAP222x.pm rename to lib/SNMP/Info/Layer2/NAP222x.pm diff --git a/Info/Layer2/NWSS2300.pm b/lib/SNMP/Info/Layer2/NWSS2300.pm similarity index 100% rename from Info/Layer2/NWSS2300.pm rename to lib/SNMP/Info/Layer2/NWSS2300.pm diff --git a/Info/Layer2/Netgear.pm b/lib/SNMP/Info/Layer2/Netgear.pm similarity index 100% rename from Info/Layer2/Netgear.pm rename to lib/SNMP/Info/Layer2/Netgear.pm diff --git a/Info/Layer2/Orinoco.pm b/lib/SNMP/Info/Layer2/Orinoco.pm similarity index 100% rename from Info/Layer2/Orinoco.pm rename to lib/SNMP/Info/Layer2/Orinoco.pm diff --git a/Info/Layer2/Trapeze.pm b/lib/SNMP/Info/Layer2/Trapeze.pm similarity index 100% rename from Info/Layer2/Trapeze.pm rename to lib/SNMP/Info/Layer2/Trapeze.pm diff --git a/Info/Layer2/Ubiquiti.pm b/lib/SNMP/Info/Layer2/Ubiquiti.pm similarity index 100% rename from Info/Layer2/Ubiquiti.pm rename to lib/SNMP/Info/Layer2/Ubiquiti.pm diff --git a/Info/Layer2/ZyXEL_DSLAM.pm b/lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm similarity index 100% rename from Info/Layer2/ZyXEL_DSLAM.pm rename to lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm diff --git a/Info/Layer3.pm b/lib/SNMP/Info/Layer3.pm similarity index 100% rename from Info/Layer3.pm rename to lib/SNMP/Info/Layer3.pm diff --git a/Info/Layer3/Aironet.pm b/lib/SNMP/Info/Layer3/Aironet.pm similarity index 100% rename from Info/Layer3/Aironet.pm rename to lib/SNMP/Info/Layer3/Aironet.pm diff --git a/Info/Layer3/AlcatelLucent.pm b/lib/SNMP/Info/Layer3/AlcatelLucent.pm similarity index 100% rename from Info/Layer3/AlcatelLucent.pm rename to lib/SNMP/Info/Layer3/AlcatelLucent.pm diff --git a/Info/Layer3/AlteonAD.pm b/lib/SNMP/Info/Layer3/AlteonAD.pm similarity index 100% rename from Info/Layer3/AlteonAD.pm rename to lib/SNMP/Info/Layer3/AlteonAD.pm diff --git a/Info/Layer3/Altiga.pm b/lib/SNMP/Info/Layer3/Altiga.pm similarity index 100% rename from Info/Layer3/Altiga.pm rename to lib/SNMP/Info/Layer3/Altiga.pm diff --git a/Info/Layer3/Arista.pm b/lib/SNMP/Info/Layer3/Arista.pm similarity index 100% rename from Info/Layer3/Arista.pm rename to lib/SNMP/Info/Layer3/Arista.pm diff --git a/Info/Layer3/Aruba.pm b/lib/SNMP/Info/Layer3/Aruba.pm similarity index 100% rename from Info/Layer3/Aruba.pm rename to lib/SNMP/Info/Layer3/Aruba.pm diff --git a/Info/Layer3/BayRS.pm b/lib/SNMP/Info/Layer3/BayRS.pm similarity index 100% rename from Info/Layer3/BayRS.pm rename to lib/SNMP/Info/Layer3/BayRS.pm diff --git a/Info/Layer3/BlueCoatSG.pm b/lib/SNMP/Info/Layer3/BlueCoatSG.pm similarity index 100% rename from Info/Layer3/BlueCoatSG.pm rename to lib/SNMP/Info/Layer3/BlueCoatSG.pm diff --git a/Info/Layer3/C3550.pm b/lib/SNMP/Info/Layer3/C3550.pm similarity index 100% rename from Info/Layer3/C3550.pm rename to lib/SNMP/Info/Layer3/C3550.pm diff --git a/Info/Layer3/C4000.pm b/lib/SNMP/Info/Layer3/C4000.pm similarity index 100% rename from Info/Layer3/C4000.pm rename to lib/SNMP/Info/Layer3/C4000.pm diff --git a/Info/Layer3/C6500.pm b/lib/SNMP/Info/Layer3/C6500.pm similarity index 100% rename from Info/Layer3/C6500.pm rename to lib/SNMP/Info/Layer3/C6500.pm diff --git a/Info/Layer3/Cisco.pm b/lib/SNMP/Info/Layer3/Cisco.pm similarity index 100% rename from Info/Layer3/Cisco.pm rename to lib/SNMP/Info/Layer3/Cisco.pm diff --git a/Info/Layer3/CiscoASA.pm b/lib/SNMP/Info/Layer3/CiscoASA.pm similarity index 100% rename from Info/Layer3/CiscoASA.pm rename to lib/SNMP/Info/Layer3/CiscoASA.pm diff --git a/Info/Layer3/CiscoFWSM.pm b/lib/SNMP/Info/Layer3/CiscoFWSM.pm similarity index 100% rename from Info/Layer3/CiscoFWSM.pm rename to lib/SNMP/Info/Layer3/CiscoFWSM.pm diff --git a/Info/Layer3/CiscoSwitch.pm b/lib/SNMP/Info/Layer3/CiscoSwitch.pm similarity index 100% rename from Info/Layer3/CiscoSwitch.pm rename to lib/SNMP/Info/Layer3/CiscoSwitch.pm diff --git a/Info/Layer3/Contivity.pm b/lib/SNMP/Info/Layer3/Contivity.pm similarity index 100% rename from Info/Layer3/Contivity.pm rename to lib/SNMP/Info/Layer3/Contivity.pm diff --git a/Info/Layer3/DLink.pm b/lib/SNMP/Info/Layer3/DLink.pm similarity index 100% rename from Info/Layer3/DLink.pm rename to lib/SNMP/Info/Layer3/DLink.pm diff --git a/Info/Layer3/Dell.pm b/lib/SNMP/Info/Layer3/Dell.pm similarity index 100% rename from Info/Layer3/Dell.pm rename to lib/SNMP/Info/Layer3/Dell.pm diff --git a/Info/Layer3/Enterasys.pm b/lib/SNMP/Info/Layer3/Enterasys.pm similarity index 100% rename from Info/Layer3/Enterasys.pm rename to lib/SNMP/Info/Layer3/Enterasys.pm diff --git a/Info/Layer3/Extreme.pm b/lib/SNMP/Info/Layer3/Extreme.pm similarity index 100% rename from Info/Layer3/Extreme.pm rename to lib/SNMP/Info/Layer3/Extreme.pm diff --git a/Info/Layer3/F5.pm b/lib/SNMP/Info/Layer3/F5.pm similarity index 100% rename from Info/Layer3/F5.pm rename to lib/SNMP/Info/Layer3/F5.pm diff --git a/Info/Layer3/Force10.pm b/lib/SNMP/Info/Layer3/Force10.pm similarity index 100% rename from Info/Layer3/Force10.pm rename to lib/SNMP/Info/Layer3/Force10.pm diff --git a/Info/Layer3/Fortinet.pm b/lib/SNMP/Info/Layer3/Fortinet.pm similarity index 100% rename from Info/Layer3/Fortinet.pm rename to lib/SNMP/Info/Layer3/Fortinet.pm diff --git a/Info/Layer3/Foundry.pm b/lib/SNMP/Info/Layer3/Foundry.pm similarity index 100% rename from Info/Layer3/Foundry.pm rename to lib/SNMP/Info/Layer3/Foundry.pm diff --git a/Info/Layer3/H3C.pm b/lib/SNMP/Info/Layer3/H3C.pm similarity index 100% rename from Info/Layer3/H3C.pm rename to lib/SNMP/Info/Layer3/H3C.pm diff --git a/Info/Layer3/HP9300.pm b/lib/SNMP/Info/Layer3/HP9300.pm similarity index 100% rename from Info/Layer3/HP9300.pm rename to lib/SNMP/Info/Layer3/HP9300.pm diff --git a/Info/Layer3/Huawei.pm b/lib/SNMP/Info/Layer3/Huawei.pm similarity index 100% rename from Info/Layer3/Huawei.pm rename to lib/SNMP/Info/Layer3/Huawei.pm diff --git a/Info/Layer3/IBMGbTor.pm b/lib/SNMP/Info/Layer3/IBMGbTor.pm similarity index 100% rename from Info/Layer3/IBMGbTor.pm rename to lib/SNMP/Info/Layer3/IBMGbTor.pm diff --git a/Info/Layer3/Juniper.pm b/lib/SNMP/Info/Layer3/Juniper.pm similarity index 100% rename from Info/Layer3/Juniper.pm rename to lib/SNMP/Info/Layer3/Juniper.pm diff --git a/Info/Layer3/Lantronix.pm b/lib/SNMP/Info/Layer3/Lantronix.pm similarity index 100% rename from Info/Layer3/Lantronix.pm rename to lib/SNMP/Info/Layer3/Lantronix.pm diff --git a/Info/Layer3/Microsoft.pm b/lib/SNMP/Info/Layer3/Microsoft.pm similarity index 100% rename from Info/Layer3/Microsoft.pm rename to lib/SNMP/Info/Layer3/Microsoft.pm diff --git a/Info/Layer3/Mikrotik.pm b/lib/SNMP/Info/Layer3/Mikrotik.pm similarity index 100% rename from Info/Layer3/Mikrotik.pm rename to lib/SNMP/Info/Layer3/Mikrotik.pm diff --git a/Info/Layer3/N1600.pm b/lib/SNMP/Info/Layer3/N1600.pm similarity index 100% rename from Info/Layer3/N1600.pm rename to lib/SNMP/Info/Layer3/N1600.pm diff --git a/Info/Layer3/NetSNMP.pm b/lib/SNMP/Info/Layer3/NetSNMP.pm similarity index 100% rename from Info/Layer3/NetSNMP.pm rename to lib/SNMP/Info/Layer3/NetSNMP.pm diff --git a/Info/Layer3/Netscreen.pm b/lib/SNMP/Info/Layer3/Netscreen.pm similarity index 100% rename from Info/Layer3/Netscreen.pm rename to lib/SNMP/Info/Layer3/Netscreen.pm diff --git a/Info/Layer3/Nexus.pm b/lib/SNMP/Info/Layer3/Nexus.pm similarity index 100% rename from Info/Layer3/Nexus.pm rename to lib/SNMP/Info/Layer3/Nexus.pm diff --git a/Info/Layer3/PacketFront.pm b/lib/SNMP/Info/Layer3/PacketFront.pm similarity index 100% rename from Info/Layer3/PacketFront.pm rename to lib/SNMP/Info/Layer3/PacketFront.pm diff --git a/Info/Layer3/PaloAlto.pm b/lib/SNMP/Info/Layer3/PaloAlto.pm similarity index 100% rename from Info/Layer3/PaloAlto.pm rename to lib/SNMP/Info/Layer3/PaloAlto.pm diff --git a/Info/Layer3/Passport.pm b/lib/SNMP/Info/Layer3/Passport.pm similarity index 100% rename from Info/Layer3/Passport.pm rename to lib/SNMP/Info/Layer3/Passport.pm diff --git a/Info/Layer3/Pf.pm b/lib/SNMP/Info/Layer3/Pf.pm similarity index 100% rename from Info/Layer3/Pf.pm rename to lib/SNMP/Info/Layer3/Pf.pm diff --git a/Info/Layer3/Pica8.pm b/lib/SNMP/Info/Layer3/Pica8.pm similarity index 100% rename from Info/Layer3/Pica8.pm rename to lib/SNMP/Info/Layer3/Pica8.pm diff --git a/Info/Layer3/SonicWALL.pm b/lib/SNMP/Info/Layer3/SonicWALL.pm similarity index 100% rename from Info/Layer3/SonicWALL.pm rename to lib/SNMP/Info/Layer3/SonicWALL.pm diff --git a/Info/Layer3/Steelhead.pm b/lib/SNMP/Info/Layer3/Steelhead.pm similarity index 100% rename from Info/Layer3/Steelhead.pm rename to lib/SNMP/Info/Layer3/Steelhead.pm diff --git a/Info/Layer3/Sun.pm b/lib/SNMP/Info/Layer3/Sun.pm similarity index 100% rename from Info/Layer3/Sun.pm rename to lib/SNMP/Info/Layer3/Sun.pm diff --git a/Info/Layer3/Tasman.pm b/lib/SNMP/Info/Layer3/Tasman.pm similarity index 100% rename from Info/Layer3/Tasman.pm rename to lib/SNMP/Info/Layer3/Tasman.pm diff --git a/Info/Layer3/Timetra.pm b/lib/SNMP/Info/Layer3/Timetra.pm similarity index 100% rename from Info/Layer3/Timetra.pm rename to lib/SNMP/Info/Layer3/Timetra.pm diff --git a/Info/Layer3/VMware.pm b/lib/SNMP/Info/Layer3/VMware.pm similarity index 100% rename from Info/Layer3/VMware.pm rename to lib/SNMP/Info/Layer3/VMware.pm diff --git a/Info/Layer7.pm b/lib/SNMP/Info/Layer7.pm similarity index 100% rename from Info/Layer7.pm rename to lib/SNMP/Info/Layer7.pm diff --git a/Info/Layer7/APC.pm b/lib/SNMP/Info/Layer7/APC.pm similarity index 100% rename from Info/Layer7/APC.pm rename to lib/SNMP/Info/Layer7/APC.pm diff --git a/Info/Layer7/CiscoIPS.pm b/lib/SNMP/Info/Layer7/CiscoIPS.pm similarity index 100% rename from Info/Layer7/CiscoIPS.pm rename to lib/SNMP/Info/Layer7/CiscoIPS.pm diff --git a/Info/Layer7/Neoteris.pm b/lib/SNMP/Info/Layer7/Neoteris.pm similarity index 100% rename from Info/Layer7/Neoteris.pm rename to lib/SNMP/Info/Layer7/Neoteris.pm diff --git a/Info/Layer7/Netscaler.pm b/lib/SNMP/Info/Layer7/Netscaler.pm similarity index 100% rename from Info/Layer7/Netscaler.pm rename to lib/SNMP/Info/Layer7/Netscaler.pm diff --git a/Info/MAU.pm b/lib/SNMP/Info/MAU.pm similarity index 100% rename from Info/MAU.pm rename to lib/SNMP/Info/MAU.pm diff --git a/Info/MRO.pm b/lib/SNMP/Info/MRO.pm similarity index 100% rename from Info/MRO.pm rename to lib/SNMP/Info/MRO.pm diff --git a/Info/NortelStack.pm b/lib/SNMP/Info/NortelStack.pm similarity index 100% rename from Info/NortelStack.pm rename to lib/SNMP/Info/NortelStack.pm diff --git a/Info/PowerEthernet.pm b/lib/SNMP/Info/PowerEthernet.pm similarity index 100% rename from Info/PowerEthernet.pm rename to lib/SNMP/Info/PowerEthernet.pm diff --git a/Info/RapidCity.pm b/lib/SNMP/Info/RapidCity.pm similarity index 100% rename from Info/RapidCity.pm rename to lib/SNMP/Info/RapidCity.pm diff --git a/Info/SONMP.pm b/lib/SNMP/Info/SONMP.pm similarity index 100% rename from Info/SONMP.pm rename to lib/SNMP/Info/SONMP.pm diff --git a/t/00-load.t b/t/00_load.t similarity index 100% rename from t/00-load.t rename to t/00_load.t diff --git a/t/prereq.t b/xt/00_local_prereq.t old mode 100755 new mode 100644 similarity index 100% rename from t/prereq.t rename to xt/00_local_prereq.t