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 by Cisco and several other vendors.
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
GLOBALS
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 itmy $cdp_ip = $device->cdp_ip();my %cdp_ifforeach 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. Most of the time this is a string with the port name, but this is not guaranteed to be so.
(
"cdpCacheDevicePort")
- $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.