Info::CDP(3) User Contributed Perl Documentation Info::CDP(3)NAMESNMP::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 $c_if = $cdp->c_if();
my $c_ip = $cdp->c_ip();
my $c_port = $cdp->c_port();
foreach my $cdp_key (keys %$c_ip){
my $iid = $c_if->{$cdp_key};
my $port = $interfaces->{$iid};
my $neighbor = $c_ip->{$cdp_key};
my $neighbor_port = $c_port->{$cdp_key};
print "Port : $port connected to $neighbor / $neighbor_port\n";
}
DESCRIPTIONSNMP::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_id()
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->c_capabilities()
Returns Device Functional Capabilities. Results are munged into an
ascii binary string, 7 digits long, MSB. Each digit represents a
bit from the table below.
From
<http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.htm#18843>:
(Bit) - Description
(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 "martin -at- lorensen.dk" for a pointer
to this information.
("cdpCacheCapabilities")
$cdp->c_domain()
Returns remote VTP Management Domain as defined in
"CISCO-VTP-MIB::managementDomainName"
("cdpCacheVTPMgmtDomain")
$cdp->c_duplex()
Returns the port duplex status from remote devices.
("cdpCacheDuplex")
$cdp->c_id()
Returns remote device id string
("cdpCacheDeviceId")
$cdp->c_if()
Returns the mapping to the SNMP Interface Table.
Note that a lot devices don't implement $cdp->c_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 $c_index = $device->c_index();
return $c_index if defined $c_index;
# if not, let's fake it
my $c_ip = $device->c_ip();
my %c_if
foreach my $key (keys %$c_ip){
$iid = $key;
## Truncate off .1 from cdp response
$iid =~ s/\.\d+$//;
$c_if{$key} = $iid;
}
return \%c_if;
$cdp->c_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->c_if() instead.
See c_if() entry.
("cdpCacheIfIndex")
$cdp->c_ip()
If $cdp->c_proto() is supported, returns remote IPV4 address only.
Otherwise it will return all addresses.
("cdpCacheAddress")
$cdp->c_addr()
Returns remote address
("cdpCacheAddress")
$cdp->c_platform()
Returns remote platform id
("cdpCachePlatform")
$cdp->c_port()
Returns remote port ID
("cdpDevicePort")
$cdp->c_proto()
Returns remote address type received. Usually IP.
("cdpCacheAddressType")
$cdp->c_ver()
Returns remote hardware version
("cdpCacheVersion")
$cdp->c_vlan()
Returns the remote interface native VLAN.
("cdpCacheNativeVLAN")
$cdp->c_power()
Returns the amount of power consumed by remote device in milliwatts
munged for decimal placement.
("cdpCachePowerConsumption")
Data Munging Callback Subroutines
$cdp->munge_power()
Inserts a decimal at the proper location.
perl v5.14.1 2011-09-28 Info::CDP(3)