Initial Import. Ver 0.1
This commit is contained in:
		
							
								
								
									
										706
									
								
								README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										706
									
								
								README
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,706 @@
 | 
			
		||||
NAME
 | 
			
		||||
 | 
			
		||||
    SNMP::Info - Perl5 Interface to Network devices through SNMP.
 | 
			
		||||
 | 
			
		||||
VERSION
 | 
			
		||||
 | 
			
		||||
    SNMP::Info - Version 0.1
 | 
			
		||||
 | 
			
		||||
AUTHOR
 | 
			
		||||
 | 
			
		||||
    Max Baker ("max@warped.org")
 | 
			
		||||
 | 
			
		||||
    SNMP::Info was created for the Netdisco application at UCSC
 | 
			
		||||
 | 
			
		||||
COPYRIGHT AND LICENCE
 | 
			
		||||
 | 
			
		||||
    Copyright (c) 2002, 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.
 | 
			
		||||
 | 
			
		||||
SYNOPSIS
 | 
			
		||||
 | 
			
		||||
     # Connect with generic Info object
 | 
			
		||||
 
 | 
			
		||||
     my $info = new SNMP::Info( DestHost  => 'router' , 
 | 
			
		||||
                                 Community => 'public' );
 | 
			
		||||
 
 | 
			
		||||
     $name = $info->name();
 | 
			
		||||
 
 | 
			
		||||
     # Try and find a more specific subclass of SNMP::Info
 | 
			
		||||
     my $object_class = $info->device_type();
 | 
			
		||||
 
 | 
			
		||||
     my $more_specific_device = new $object_class(
 | 
			
		||||
                                      'Desthost' => 'mydevice',
 | 
			
		||||
                                      'Community' => 'public');
 | 
			
		||||
 
 | 
			
		||||
     # Find out the Duplex status for the ports
 | 
			
		||||
     my $interfaces = $more_specific_device->interfaces();
 | 
			
		||||
     my $i_duplex   = $more_specific_device->i_duplex();
 | 
			
		||||
 
 | 
			
		||||
     foreach my $iid (keys %$interfaces){
 | 
			
		||||
 
 | 
			
		||||
        my $duplex = $i_duplex->{$iid};
 | 
			
		||||
 
 | 
			
		||||
        # Print out physical port name, not snmp iid
 | 
			
		||||
        my $port  = $interfaces->{$iid};
 | 
			
		||||
 
 | 
			
		||||
        print "$port : $duplex\n";
 | 
			
		||||
 
 | 
			
		||||
     }
 | 
			
		||||
 | 
			
		||||
REQUIREMENTS
 | 
			
		||||
 | 
			
		||||
    1. Net-SNMP
 | 
			
		||||
        To use this module, you must have Net-SNMP installed on your system.
 | 
			
		||||
 | 
			
		||||
        Net-SNMP can be found at http://net-snmp.sourceforge.net . Version
 | 
			
		||||
        5.0.2 or greater is recommended.
 | 
			
		||||
 | 
			
		||||
        The Perl module "SNMP" is found inside the distribution. Go to the
 | 
			
		||||
        perl/ directory and install it from there, or run "./configure
 | 
			
		||||
        --with-perl-modules" .
 | 
			
		||||
 | 
			
		||||
    2. MIBS
 | 
			
		||||
        Each sub-module that you use will also require specific MIBs,
 | 
			
		||||
        usually obtainable on the net. See the list above for a quick
 | 
			
		||||
        glance, and the documentation in each sub module for more
 | 
			
		||||
        information.
 | 
			
		||||
 | 
			
		||||
        Make sure that your snmp.conf is updated to point to your MIB
 | 
			
		||||
        directory and that the MIBs are world-readable.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info requires RFC1213-MIB (and whatever supporting MIBs that
 | 
			
		||||
        are referenced).
 | 
			
		||||
 | 
			
		||||
        A good starting point are the Version 2 MIBs from Cisco, found at
 | 
			
		||||
 | 
			
		||||
         ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
 | 
			
		||||
 | 
			
		||||
        Run "cd /usr/local/share/snmp/mibs && tar xvfz ~/v2.tar.gz " to
 | 
			
		||||
        install them.
 | 
			
		||||
 | 
			
		||||
        Then run "snmpconf" and setup that directory as default. Move
 | 
			
		||||
        snmp.conf into /usr/local/share/snmp when you are done.
 | 
			
		||||
 | 
			
		||||
DESCRIPTION
 | 
			
		||||
 | 
			
		||||
    SNMP::Info gives an object oriented interface to information obtained
 | 
			
		||||
    through SNMP.
 | 
			
		||||
 | 
			
		||||
    This module is geared towards network devices. Speciality sub-classes
 | 
			
		||||
    exist for a number of vendors and products (see below).
 | 
			
		||||
 | 
			
		||||
  Design Goals
 | 
			
		||||
 | 
			
		||||
    1. Use of MIB variables and values instead of purely numeric OID
 | 
			
		||||
        All values are retrieved via MIB Leaf node names.
 | 
			
		||||
 | 
			
		||||
        This means that SNMP::Info only asks SNMP::Session to look for
 | 
			
		||||
        ``sysName'' instead of 1.3.6.1.2.1.1.5.
 | 
			
		||||
 | 
			
		||||
        It also means that you need to download MIB files for each sub
 | 
			
		||||
        module that you use.
 | 
			
		||||
 | 
			
		||||
        The other side effect to using MIBs is data results come back as
 | 
			
		||||
        meaningful text, instead of integers.
 | 
			
		||||
 | 
			
		||||
        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 sub class for a device by filling in Four
 | 
			
		||||
        hashes %GLOBALS, %MIBS, %FUNCS, and %MUNGE with the names of the
 | 
			
		||||
        SNMP attributes that are specific to your device. See the bottom of
 | 
			
		||||
        this document for a sample Sub Class.
 | 
			
		||||
 | 
			
		||||
        When you make a new sub class for a device, please be sure to send
 | 
			
		||||
        it back to the developers at snmp@warped.org for inclusion in the
 | 
			
		||||
        next version.
 | 
			
		||||
 | 
			
		||||
Sub Classes
 | 
			
		||||
 | 
			
		||||
    SNMP::Info::Bridge
 | 
			
		||||
    SNMP::Info::CDP
 | 
			
		||||
    SNMP::Info::EtherLike
 | 
			
		||||
    SNMP::Info::MAU
 | 
			
		||||
    SNMP::Info::Layer1
 | 
			
		||||
    SNMP::Info::Layer2
 | 
			
		||||
    SNMP::Info::Layer3
 | 
			
		||||
    SNMP::Info::Layer1::Allied
 | 
			
		||||
    SNMP::Info::Layer1::Asante
 | 
			
		||||
    SNMP::Info::Layer2::Bay
 | 
			
		||||
    SNMP::Info::Layer2::C1900
 | 
			
		||||
    SNMP::Info::Layer2::C2900
 | 
			
		||||
    SNMP::Info::Layer2::Catalyst
 | 
			
		||||
    SNMP::Info::Layer2::HP
 | 
			
		||||
    SNMP::Info::Layer3::Aironet
 | 
			
		||||
    SNMP::Info::Layer3::Foundry
 | 
			
		||||
  Details
 | 
			
		||||
 | 
			
		||||
    * SNMP::Info::Bridge - BRIDGE-MIB - RFC1286 Support
 | 
			
		||||
        Requires BRIDGE-MIB
 | 
			
		||||
 | 
			
		||||
    * SNMP::Info::CDP - Cisco Discovery Protocol (CDP) Support.
 | 
			
		||||
        Provides Layer 2 Topology Information on Cisco and some HP Devices.
 | 
			
		||||
 | 
			
		||||
        Requires CISCO-CDP-MIB
 | 
			
		||||
 | 
			
		||||
    * SNMP::Info::EtherLike
 | 
			
		||||
        Requires ETHERLIKE-MIB - RFC1398
 | 
			
		||||
 | 
			
		||||
    * SNMP::Info::Layer1 - Generic Layer 1 Device Support
 | 
			
		||||
        Requires Standard V1 and V2 MIBs
 | 
			
		||||
 | 
			
		||||
    * SNMP::Info::Layer2 - Generic Layer 2 Device Support
 | 
			
		||||
        Inherits:
 | 
			
		||||
 | 
			
		||||
         SNMP::Info::CDP
 | 
			
		||||
         SNMP::Info::Bridge
 | 
			
		||||
 | 
			
		||||
        Required MIBs:
 | 
			
		||||
 | 
			
		||||
         CISCO-PRODUCTS-MIB - Gives model information for Cisco
 | 
			
		||||
         HP-ICF-OID         - Gives model information for HPs
 | 
			
		||||
 | 
			
		||||
    * SNMP::Info::Layer3 - Generic Layer 3 and Layer 2/3 Device Support
 | 
			
		||||
        Inherits:
 | 
			
		||||
 | 
			
		||||
         SNMP::Info::Bridge - For Layer 2/3 devices
 | 
			
		||||
         SNMP::Info::CDP
 | 
			
		||||
         SNMP::Info::EtherLike
 | 
			
		||||
 | 
			
		||||
        Required MIBs:
 | 
			
		||||
 | 
			
		||||
         CISCO-PRODUCTS-MIB - Gives model information for Cisco
 | 
			
		||||
         HP-ICF-OID         - Gives model information for HPs
 | 
			
		||||
         ENTITY-MIB         - Gives some chassis information
 | 
			
		||||
         OSPF-MIB           - Gives router information
 | 
			
		||||
 | 
			
		||||
    * SNMP::Info::MAU - RFC2668 - Media Access Unit (MAU) MAU-MIB
 | 
			
		||||
    * SNMP::Info::Layer1::Allied - Allied TeleSys Hub Support
 | 
			
		||||
        Requires ATI-MIB - Allied Devices MIB downloadable from
 | 
			
		||||
        http://www.allied-telesyn.com/allied/support/
 | 
			
		||||
 | 
			
		||||
    * SNMP::Info::Layer1::Asante - Asante 1012 Hubs
 | 
			
		||||
        Requires ASANTE-HUB1012-MIB - Download from http://www.mibdepot.com
 | 
			
		||||
 | 
			
		||||
    * SNMP::Info::Layer2::Bay - Bay Networks BayStack Switch Support
 | 
			
		||||
        Required MIBs:
 | 
			
		||||
 | 
			
		||||
         SYNOPTICS-ROOT-MIB  - Gives model information for Bay
 | 
			
		||||
         S5-ETH-MULTISEG-TOPOLOGY-MIB - Gives Layer 2 topology information for Bay
 | 
			
		||||
 | 
			
		||||
        Other supporting MIBs needed, see SNMP::Info::Bay for more info
 | 
			
		||||
 | 
			
		||||
    * SNMP::Info::Layer2::C1900 - Cisco 1900 and 1900c Device Support
 | 
			
		||||
        Requires STAND-ALONE-ETHERNET-SWITCH-MIB (ESSWITCH-MIB)
 | 
			
		||||
 | 
			
		||||
    * SNMP::Info::Layer2::C2900 - Cisco 2900 Series Device Support.
 | 
			
		||||
        Requires CISCO-C2900-MIB
 | 
			
		||||
 | 
			
		||||
    * SNMP::Info::Layer2::Catalyst - Cisco Catalyst WSC Series Switch
 | 
			
		||||
    Support
 | 
			
		||||
        Requires MIBs:
 | 
			
		||||
 | 
			
		||||
         CISCO-STACK-MIB
 | 
			
		||||
         CISCO-VTP-MIB
 | 
			
		||||
 | 
			
		||||
    * SNMP::Info::Layer2::HP - HP Procurve Switch Support
 | 
			
		||||
        Inherits:
 | 
			
		||||
 | 
			
		||||
         SNMP::Info::MAU
 | 
			
		||||
 | 
			
		||||
        Required MIBs:
 | 
			
		||||
 | 
			
		||||
         ENTITY-MIB
 | 
			
		||||
         RFC1271-MIB
 | 
			
		||||
         HP-ICF-OID
 | 
			
		||||
 | 
			
		||||
    * SNMP::Info::Layer3::Aironet - Cisco Aironet Wireless Access Points
 | 
			
		||||
    (AP) Support
 | 
			
		||||
        Required MIBs:
 | 
			
		||||
 | 
			
		||||
         AWCVX-MIB        - Aironet Specific MIB values
 | 
			
		||||
         IEEE802dot11-MIB - IEEE 802.11 Specific MIB (currently draft)
 | 
			
		||||
 | 
			
		||||
    * SNMP::Info::Layer3::Foundry - Older Foundry Networks Devices Support
 | 
			
		||||
        Inherits SNMP::Info::Bridge
 | 
			
		||||
 | 
			
		||||
        Requires FOUNDRY-SN-ROOT-MIB - Foundry specific values. See
 | 
			
		||||
        SNMP::Info::Layer3::Foundry for more information.
 | 
			
		||||
 | 
			
		||||
METHODS
 | 
			
		||||
 | 
			
		||||
        These are generic methods from RFC1213.  Some subset of these is 
 | 
			
		||||
    probably available for any network device that speaks SNMP.
 | 
			
		||||
 | 
			
		||||
  Constructor
 | 
			
		||||
 | 
			
		||||
    new()
 | 
			
		||||
        Creates a new object and connects via SNMP::Session.
 | 
			
		||||
 | 
			
		||||
        Arguments given are passed to SNMP::Session and can be used to
 | 
			
		||||
        overide defaults.
 | 
			
		||||
 | 
			
		||||
  Data is Cached
 | 
			
		||||
 | 
			
		||||
    A call to any of these methods will load the data once, and then return
 | 
			
		||||
    cached versions of that data.
 | 
			
		||||
 | 
			
		||||
    Use load_METHOD() to reload from the device
 | 
			
		||||
 | 
			
		||||
            $data = $cdp->c_ip();
 | 
			
		||||
            ...
 | 
			
		||||
            $cdp->load_c_ip();
 | 
			
		||||
            $newdata = $cdp->c_ip();
 | 
			
		||||
 | 
			
		||||
  Scalar Methods
 | 
			
		||||
 | 
			
		||||
    $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 for.
 | 
			
		||||
 | 
			
		||||
        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.
 | 
			
		||||
 | 
			
		||||
        Algorithm for SubClass Detection:
 | 
			
		||||
 | 
			
		||||
                Layer3 Support                     -> SNMP::Info::Layer3
 | 
			
		||||
                    Foundry                        -> SNMP::Info::Foundry
 | 
			
		||||
                    Aironet                        -> SNMP::Info::Aironet
 | 
			
		||||
                Elsif Layer2 (no Layer3)           -> SNMP::Info::Layer2 
 | 
			
		||||
                    Catalyst 1900                  -> SNMP::Info::Layer2::C1900
 | 
			
		||||
                    Catalyst 2900XL (IOS)          -> SNMP::Info::Layer2::C2900
 | 
			
		||||
                    Catalyst WS-C (2926,5xxx,6xxx) -> SNMP::Info::Layer2::Catalyst
 | 
			
		||||
                    HP Procurve                    -> SNMP::Info::Layer2::HP
 | 
			
		||||
                    Bay Networks                   -> SNMP::Info::Layer2::Bay
 | 
			
		||||
                Elsif Layer1 Support               -> SNMP::Info::Layer1
 | 
			
		||||
                    Allied                         -> SNMP::Info::Layer1::Allied
 | 
			
		||||
                    Asante                         -> SNMP::Info::Layer1::Asante
 | 
			
		||||
                Else                               -> SNMP::Info
 | 
			
		||||
 | 
			
		||||
    $info->has_layer(3)
 | 
			
		||||
        Returns non-zero if the device has the supplied layer in the OSI
 | 
			
		||||
        Model
 | 
			
		||||
 | 
			
		||||
        Returns "undef" if the device doesn't support the layers() call.
 | 
			
		||||
 | 
			
		||||
    $info->uptime()
 | 
			
		||||
        Uptime in hundreths 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.
 | 
			
		||||
 | 
			
		||||
        (sysServices)
 | 
			
		||||
 | 
			
		||||
    $info->ports()
 | 
			
		||||
        Number of interfaces available on this device.
 | 
			
		||||
 | 
			
		||||
        (ifNumber)
 | 
			
		||||
 | 
			
		||||
  Table Methods
 | 
			
		||||
 | 
			
		||||
    Each of these methods returns a hash_reference to a hash keyed on the
 | 
			
		||||
    interface index in SNMP.
 | 
			
		||||
 | 
			
		||||
     Example : $cdp->c_ip() returns 
 | 
			
		||||
                { '304' => '123.123.231.12' }
 | 
			
		||||
 | 
			
		||||
   Interfaces
 | 
			
		||||
 | 
			
		||||
    $info->interfaces()
 | 
			
		||||
        This methods is overriden 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.
 | 
			
		||||
 | 
			
		||||
        SNMP::Info and it's subclasses tries to provide data on Physical
 | 
			
		||||
        ports.
 | 
			
		||||
 | 
			
		||||
    $info->i_index()
 | 
			
		||||
        Defaults to $info->interfaces()
 | 
			
		||||
 | 
			
		||||
        (ifIndex)
 | 
			
		||||
 | 
			
		||||
    $info->i_description()
 | 
			
		||||
        Returns reference to hash keyed by iid. Values are the Textual
 | 
			
		||||
        Description of the interface (port). Usually the physical /
 | 
			
		||||
        human-friendly name.
 | 
			
		||||
 | 
			
		||||
        (ifDescr)
 | 
			
		||||
 | 
			
		||||
    $info->i_type()
 | 
			
		||||
        Returns reference to hash keyed by iid. Values are the port type,
 | 
			
		||||
        such as Vlan, 10baseT, Ethernet, Serial...
 | 
			
		||||
 | 
			
		||||
        (ifType)
 | 
			
		||||
 | 
			
		||||
    $info->i_mtu()
 | 
			
		||||
        Returns reference to hash keyed by iid. Values are the MTU value for
 | 
			
		||||
        the port.
 | 
			
		||||
 | 
			
		||||
        (ifMtu)
 | 
			
		||||
 | 
			
		||||
    $info->i_speed()
 | 
			
		||||
        Returns reference to hash keyed by iid. Values are the speed of the
 | 
			
		||||
        link.
 | 
			
		||||
 | 
			
		||||
        (ifSpeed)
 | 
			
		||||
 | 
			
		||||
    $info->i_mac()
 | 
			
		||||
        Returns reference to hash keyed by iid. Values are the MAC address
 | 
			
		||||
        of the interface. Note this is just the MAC of the port, not
 | 
			
		||||
        anything connected to it.
 | 
			
		||||
 | 
			
		||||
        (ifPhysAddress)
 | 
			
		||||
 | 
			
		||||
    $info->i_up()
 | 
			
		||||
        Returns reference to hash keyed by iid. Values are the Link Status
 | 
			
		||||
        of the interface. Typical values are 'up' and 'down'.
 | 
			
		||||
 | 
			
		||||
        (ifOperStatus)
 | 
			
		||||
 | 
			
		||||
    $info->i_up_admin()
 | 
			
		||||
        Returns reference to hash keyed by iid. Values are the
 | 
			
		||||
        administrative status of the port. Typical values are 'enabled' and
 | 
			
		||||
        'disabled'.
 | 
			
		||||
 | 
			
		||||
        (ifAdminStatus)
 | 
			
		||||
 | 
			
		||||
    $info->i_name()
 | 
			
		||||
        Returns reference to hash keyed by iid. Values are the Interface
 | 
			
		||||
        Name field. Supported by a smaller subset of devices, this fields is
 | 
			
		||||
        often human set.
 | 
			
		||||
 | 
			
		||||
        (ifName)
 | 
			
		||||
 | 
			
		||||
    $info->i_alias()
 | 
			
		||||
        Returns reference to hash keyed by iid. Values are a differnent
 | 
			
		||||
        version of the Interface Description or Interface Name. 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)
 | 
			
		||||
 | 
			
		||||
   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)
 | 
			
		||||
 | 
			
		||||
  Default %MUNGE
 | 
			
		||||
 | 
			
		||||
     ip     -> &munge_ip 
 | 
			
		||||
 | 
			
		||||
     mac    -> &munge_mac 
 | 
			
		||||
 | 
			
		||||
     i_mac  -> &munge_mac 
 | 
			
		||||
 | 
			
		||||
     layers -> &munge_dec2bin
 | 
			
		||||
 | 
			
		||||
CREATING SUBCLASSES
 | 
			
		||||
 | 
			
		||||
  Data Structures Used in SNMP::Info and SubClasses
 | 
			
		||||
 | 
			
		||||
    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 iid name ) These
 | 
			
		||||
        are scalar values such as name,uptime, etc.
 | 
			
		||||
 | 
			
		||||
        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 iid) These are
 | 
			
		||||
        table entries, such as the IfIndex
 | 
			
		||||
 | 
			
		||||
    %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 sub routine
 | 
			
		||||
        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 Sub Class
 | 
			
		||||
 | 
			
		||||
    Let's make a sample Layer 2 Device subclass :
 | 
			
		||||
 | 
			
		||||
     # SNMP::Info::Layer2::Sample
 | 
			
		||||
 | 
			
		||||
     package SNMP::Info::Layer2::Sample;
 | 
			
		||||
 | 
			
		||||
     $VERSION = 0.1;
 | 
			
		||||
 | 
			
		||||
     use strict;
 | 
			
		||||
 | 
			
		||||
     use Exporter;
 | 
			
		||||
     use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
     @SNMP::Info::Layer2::Sample::ISA = qw/SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
     @SNMP::Info::Layer2::Sample::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
     use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
 | 
			
		||||
 | 
			
		||||
     %MIBS    = (%SNMP::Info::Layer2::MIBS,
 | 
			
		||||
                 'SUPER-DOOPER-MIB'  => 'supermibobject'
 | 
			
		||||
                );
 | 
			
		||||
 | 
			
		||||
     %GLOBALS = (%SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
                 'name'              => 'supermib_supername',
 | 
			
		||||
                 'favorite_color'    => 'supermib_fav_color_object',
 | 
			
		||||
                 'favorite_movie'    => 'supermib_fav_movie_val'
 | 
			
		||||
                 );
 | 
			
		||||
 | 
			
		||||
     %FUNCS   = (%SNMP::Info::Layer2::FUNCS,
 | 
			
		||||
                 # Super Dooper MIB - Super Hero Table
 | 
			
		||||
                 'super_hero_index'  => 'SuperHeroIfIndex',
 | 
			
		||||
                 'super_hero_name'   => 'SuperHeroIfName',
 | 
			
		||||
                 'super_hero_powers' => 'SuperHeroIfPowers'
 | 
			
		||||
                );
 | 
			
		||||
 | 
			
		||||
     %MUNGE   = (%SNMP::Info::Layer2::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;
 | 
			
		||||
     }
 | 
			
		||||
 | 
			
		||||
     # Add Copious Documentation here!!!
 | 
			
		||||
 | 
			
		||||
    Be sure and send the debugged version to snmp@warped.org to be included
 | 
			
		||||
    in the next version of SNMP::Info.
 | 
			
		||||
 | 
			
		||||
  Data Munging Callback Subs
 | 
			
		||||
 | 
			
		||||
    munge_speed()
 | 
			
		||||
        Makes human friendly speed ratings using %SPEED_MAP
 | 
			
		||||
 | 
			
		||||
         %SPEED_MAP = (
 | 
			
		||||
                        '64000'      => '64 kbps',
 | 
			
		||||
                        '1500000'    => '1.5 Mbps',
 | 
			
		||||
                        '1544000'    => 'T1',
 | 
			
		||||
                        '2000000'    => '2.0 Mbps',
 | 
			
		||||
                        '2048000'    => '2.048 Mbps',
 | 
			
		||||
                        '4000000'    => '4.0 Mbps',
 | 
			
		||||
                        '10000000'   => '10 Mbps',
 | 
			
		||||
                        '11000000'   => '11 Mbps',
 | 
			
		||||
                        '20000000'   => '20 Mbps',
 | 
			
		||||
                        '16000000'   => '16 Mbps',
 | 
			
		||||
                        '45000000'   => 'DS3',
 | 
			
		||||
                        '45045000'   => 'DS3',
 | 
			
		||||
                        '64000000'   => '64 Mbps',
 | 
			
		||||
                        '100000000'  => '100 Mbps',
 | 
			
		||||
                        '149760000'  => 'OC-1'
 | 
			
		||||
                        '155000000'  => 'OC-1'
 | 
			
		||||
                        '400000000'  => '400 Mbps',
 | 
			
		||||
                        '622000000'  => 'OC-12',
 | 
			
		||||
                        '599040000'  => 'OC-12', 
 | 
			
		||||
                        '1000000000' => '1.0 Gbps',
 | 
			
		||||
                     );
 | 
			
		||||
 | 
			
		||||
    munge_ip()
 | 
			
		||||
        Takes a binary IP and makes it dotted ASCII
 | 
			
		||||
 | 
			
		||||
    munge_mac()
 | 
			
		||||
        Takes an octet stream 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
 | 
			
		||||
 | 
			
		||||
  Internaly Used Functions
 | 
			
		||||
 | 
			
		||||
    $info->init()
 | 
			
		||||
        Used internally. Loads all entries in %MIBS.
 | 
			
		||||
 | 
			
		||||
    $info->debug(1)
 | 
			
		||||
        Turns on debugging info for this class and SNMP
 | 
			
		||||
 | 
			
		||||
    $info->class()
 | 
			
		||||
        Returns the class name of the object.
 | 
			
		||||
 | 
			
		||||
    $info->funcs()
 | 
			
		||||
        Returns a reference to the %FUNCS hash.
 | 
			
		||||
 | 
			
		||||
    $info->mibs()
 | 
			
		||||
        Returns a reference to the %MIBS hash.
 | 
			
		||||
 | 
			
		||||
    $info->globals()
 | 
			
		||||
        Returns a reference to the %GLOBALS hash.
 | 
			
		||||
 | 
			
		||||
    $info->munge()
 | 
			
		||||
        Returns a reference ot the %MUNGE hash.
 | 
			
		||||
 | 
			
		||||
    $info->session()
 | 
			
		||||
        Gets or Sets the SNMP::Session object.
 | 
			
		||||
 | 
			
		||||
   Functions for SNMP Scalars (%GLOBALS)
 | 
			
		||||
 | 
			
		||||
    $info->_global()
 | 
			
		||||
        Used internally by AUTOLOAD to load dynmaic methods from %GLOBALS.
 | 
			
		||||
 | 
			
		||||
        Example: $info->name() calls autoload which calls
 | 
			
		||||
        $info->_global('name').
 | 
			
		||||
 | 
			
		||||
   Functions for SNMP Tables (%FUNCS)
 | 
			
		||||
 | 
			
		||||
    $info->load_all()
 | 
			
		||||
        Runs $info->load_METHOD() for each entry in %FUNCS.
 | 
			
		||||
 | 
			
		||||
        Returns { iid => values_hash } where value_hash is in the format: {
 | 
			
		||||
        attribute => value }
 | 
			
		||||
 | 
			
		||||
    $info->all()
 | 
			
		||||
        Runs $info->load_all() once then returns the cached data.
 | 
			
		||||
 | 
			
		||||
        Use $info->load_all() to reload the data.
 | 
			
		||||
 | 
			
		||||
    $info->_load_attr()
 | 
			
		||||
        Used internally by AUTOLOAD to fetch data called from methods listed
 | 
			
		||||
        in %FUNCS.
 | 
			
		||||
 | 
			
		||||
        Called from $info->load_METHOD();
 | 
			
		||||
 | 
			
		||||
    $info->_show_attr()
 | 
			
		||||
        Used internaly by AUTOLOAD to return data called by methods listed
 | 
			
		||||
        in %FUNCS.
 | 
			
		||||
 | 
			
		||||
        Called like $info->METHOD().
 | 
			
		||||
 | 
			
		||||
        The first time ran, it will call $info->load_METHOD(). Every time
 | 
			
		||||
        after it will return cached data.
 | 
			
		||||
 | 
			
		||||
  AUTOLOAD
 | 
			
		||||
 | 
			
		||||
    Each entry in either %FUNCS or %GLOBALS is used by AUTOLOAD() to create
 | 
			
		||||
    dynamic methods.
 | 
			
		||||
 | 
			
		||||
    First Autoload sees if the method name is listed in either of the two
 | 
			
		||||
    hashes.
 | 
			
		||||
 | 
			
		||||
    If the method exists in globals, it runs $info->_global(method).
 | 
			
		||||
 | 
			
		||||
    Next it will check %FUNCS, run $info->_load_attr(method) if needed and
 | 
			
		||||
    return $info->_show_attr(method).
 | 
			
		||||
 | 
			
		||||
    Override any dynamic method listed in one of these hashes by creating a
 | 
			
		||||
    sub with the same name.
 | 
			
		||||
 | 
			
		||||
    Example : Override $info->name() by creating `` sub name {}'' in your
 | 
			
		||||
    Module.
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user