Provided by: libsnmp-info-perl_3.11-1_all
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.