Provided by: libsnmp-info-perl_3.65-1_all bug

NAME

       SNMP::Info::CDP - SNMP Interface to Cisco Discovery Protocol (CDP) using SNMP

AUTHOR

       Max Baker

SYNOPSIS

        my $cdp = new SNMP::Info (
                                    AutoSpecify => 1,
                                    Debug       => 1,
                                    DestHost    => 'router',
                                    Community   => 'public',
                                    Version     => 2
                                  );

        my $class = $cdp->class();
        print " Using device sub class : $class\n";

        $hascdp   = $cdp->hasCDP() ? 'yes' : 'no';

        # Print out a map of device ports with CDP neighbors:
        my $interfaces = $cdp->interfaces();
        my $cdp_if       = $cdp->cdp_if();
        my $cdp_ip       = $cdp->cdp_ip();
        my $cdp_port     = $cdp->cdp_port();

        foreach my $cdp_key (keys %$cdp_ip){
           my $iid           = $cdp_if->{$cdp_key};
           my $port          = $interfaces->{$iid};
           my $neighbor      = $cdp_ip->{$cdp_key};
           my $neighbor_port = $cdp_port->{$cdp_key};
           print "Port : $port connected to $neighbor / $neighbor_port\n";
        }

DESCRIPTION

       SNMP::Info::CDP is a subclass of SNMP::Info that provides an object oriented interface to
       CDP information through SNMP.

       CDP is a Layer 2 protocol that supplies topology information of devices that also speak
       CDP, mostly switches and routers.  CDP is implemented in Cisco and some HP devices.

       Create or use a device subclass that inherits this class.  Do not use directly.

       Each device implements a subset of the global and cache entries.  Check the return value
       to see if that data is held by the device.

   Inherited Classes
       None.

   Required MIBs
       CISCO-CDP-MIB

       MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz

GLOBAL METHODS

       These are methods that return scalar values from SNMP

       $cdp->hasCDP()
           Is CDP is active in this device?

           Accounts for SNMP version 1 devices which may have CDP but not cdp_run()

       $cdp->cdp_run()
           Is CDP enabled on this device?  Note that a lot of Cisco devices that implement CDP
           don't implement this value. @#%$!

           ("cdpGlobalRun")

       $cdp->cdp_interval()
           Interval in seconds at which CDP messages are generated.

           ("cdpGlobalMessageInterval")

       $cdp->cdp_holdtime()
           Time in seconds that CDP messages are kept.

           ("cdpGlobalHoldTime")

       $cdp->cdp_gid()
           Returns CDP device ID.

           This is the device id broadcast via CDP to other devices, and is what is retrieved
           from remote devices with $cdp->id().

           ("cdpGlobalDeviceId")

TABLE METHODS

       These are methods that return tables of information in the form of a reference to a hash.

   CDP CACHE ENTRIES
       $cdp->cdp_capabilities()
           Returns Device Functional Capabilities.  Results are munged into an ascii binary
           string, MSB.  Each digit represents a bit from the table below from the CDP
           Capabilities Mapping to Smartport Type table within the Cisco Small Business 200
           Series Smart Switch Administration Guide,
           <http://www.cisco.com/c/en/us/support/switches/small-business-200-series-smart-switches/products-maintenance-guides-list.html>:

           (Bit) - Description

           (0x400) - Two-Port MAC Relay.
           (0x200) - CAST Phone Port / CVTA / Supports-STP-Dispute depending upon platform.
           (0x100) - Remotely-Managed Device.
           (0x80)  - VoIP Phone.
           (0x40)  - Provides level 1 functionality.
           (0x20)  - The bridge or switch does not forward IGMP Report packets on non router
           ports.
           (0x10)  - Sends and receives packets for at least one network layer protocol. If the
           device is routing the protocol, this bit should not be set.
           (0x08)  - Performs level 2 switching. The difference between this bit and bit 0x02 is
           that a switch does not run the Spanning-Tree Protocol. This device is assumed to be
           deployed in a physical loop-free topology.
           (0x04)  - Performs level 2 source-route bridging. A source-route bridge would set both
           this bit and bit 0x02.
           (0x02)  - Performs level 2 transparent bridging.
           (0x01)  - Performs level 3 routing for at least one network layer protocol.

           Thanks to Martin Lorensen for a pointer to the original information and CPAN user Alex
           for updates.

           ("cdpCacheCapabilities")

       $cdp->cdp_domain()
           Returns remote VTP Management Domain as defined in
           "CISCO-VTP-MIB::managementDomainName"

           ("cdpCacheVTPMgmtDomain")

       $cdp->cdp_duplex()
           Returns the port duplex status from remote devices.

           ("cdpCacheDuplex")

       $cdp->cdp_id()
           Returns remote device id string

           ("cdpCacheDeviceId")

       $cdp->cdp_if()
           Returns the mapping to the SNMP Interface Table.

           Note that a lot devices don't implement $cdp->cdp_index(),  So if it isn't around, we
           fake it.

           In order to map the cdp table entry back to the interfaces() entry, we truncate the
           last number off of it :

             # it exists, yay.
             my $cdp_index     = $device->cdp_index();
             return $cdp_index if defined $cdp_index;

             # if not, let's fake it
             my $cdp_ip       = $device->cdp_ip();

             my %cdp_if
             foreach my $key (keys %$cdp_ip){
                 $iid = $key;
                 ## Truncate off .1 from cdp response
                 $iid =~ s/\.\d+$//;
                 $cdp_if{$key} = $iid;
             }

             return \%cdp_if;

       $cdp->cdp_index()
           Returns the mapping to the SNMP2 Interface table for CDP Cache Entries.

           Most devices don't implement this, so you probably want to use $cdp->cdp_if() instead.

           See cdp_if() entry.

           ("cdpCacheIfIndex")

       $cdp->cdp_ip()
           If $cdp->cdp_proto() is supported, returns remote IPV4 address only.  Otherwise it
           will return all addresses.

           ("cdpCacheAddress")

       $cdp->cdp_addr()
           Returns remote address

           ("cdpCacheAddress")

       $cdp->cdp_platform()
           Returns remote platform id

           ("cdpCachePlatform")

       $cdp->cdp_port()
           Returns remote port ID

           ("cdpDevicePort")

       $cdp->cdp_proto()
           Returns remote address type received.  Usually IP.

           ("cdpCacheAddressType")

       $cdp->cdp_ver()
           Returns remote hardware version

           ("cdpCacheVersion")

       $cdp->cdp_vlan()
           Returns the remote interface native VLAN.

           ("cdpCacheNativeVLAN")

       $cdp->cdp_power()
           Returns the amount of power consumed by remote device in milliwatts munged for decimal
           placement.

           ("cdpCachePowerConsumption")

       $cdp->cdp_cap()
           Returns hash of arrays with each array containing the system capabilities supported by
           the remote system.  Possible elements in the array are "Router", "Trans-Bridge",
           "Source-Route-Bridge", "Switch", "Host", "IGMP", "Repeater", "VoIP-Phone",
           "Remotely-Managed-Device", "Supports-STP-Dispute", and "Two-port Mac Relay".

Data Munging Callback Subroutines

       $cdp->munge_power()
           Inserts a decimal at the proper location.