| Net-CDP documentation | Contained in the Net-CDP distribution. |
Net::CDP::Address - Cisco Discovery Protocol (CDP) port address
use Net::CDP::Address qw(:protos); # Constructors $address = new Net::CDP::Address($ip); $address = new Net::CDP::Address($protocol, $packed); $cloned = clone $address; # Object methods $protocol = $address->protocol; $address = $address->address; $packed = $address->packed;
A Net::CDP::Address object represents a single addres in the Addresses or Management Addresses field of a CDP packet. Net::CDP::Address objects are immutable.
$address = new Net::CDP::Address($ip)
$address = new Net::CDP::Address($protocol, $packed)
Returns a new Net::CDP::Address object.
If only one argument is provided, new will attempt to parse it as an IPv4 or
IPv6 address.
Otherwise, you must specify the protocol and the bytes that comprise the
address. $protocol should be one of the following constants:
CDP_ADDR_PROTO_CLNP
CDP_ADDR_PROTO_IPV4
CDP_ADDR_PROTO_IPV6
CDP_ADDR_PROTO_DECNET
CDP_ADDR_PROTO_APPLETALK
CDP_ADDR_PROTO_IPX
CDP_ADDR_PROTO_VINES
CDP_ADDR_PROTO_XNS
CDP_ADDR_PROTO_APOLLO
These constants can be exported using the tag :protos. See Exporter.
$packed must be a string consisting of the bytes that make up the address in
network order. You may find the pack function useful in generating this
string.
$cloned = clone $packet
Returns a deep copy of the supplied Net::CDP::Address object.
$protocol = $address->protocol()
Returns this address's protocol.
$ip = $address->address()
If this is an IPv4 or IPv6 address, returns its standard string representation,
otherwise undef.
$packed = $address->packed()
Returns this address as a string consisting of the bytes that comprise it in network order.
Michael Chapman, <cpan@very.puzzling.org>
Copyright (C) 2005 by Michael Chapman
libcdp is released under the terms and conditions of the GNU Library General Public License version 2. Net::CDP may be redistributed and/or modified under the same terms as Perl itself.
| Net-CDP documentation | Contained in the Net-CDP distribution. |
package Net::CDP::Address; # # $Id: Address.pm,v 1.8 2005/07/20 13:44:13 mchapman Exp $ # use 5.00503; use strict; use Carp::Clan qw(^Net::CDP); use vars qw($VERSION @ISA $AUTOLOAD @EXPORT @EXPORT_OK %EXPORT_TAGS); $VERSION = (qw$Revision: 1.8 $)[1]; require Exporter; @ISA = qw(Exporter); my @EXPORT_PROTOS = qw( CDP_ADDR_PROTO_CLNP CDP_ADDR_PROTO_IPV4 CDP_ADDR_PROTO_IPV6 CDP_ADDR_PROTO_DECNET CDP_ADDR_PROTO_APPLETALK CDP_ADDR_PROTO_IPX CDP_ADDR_PROTO_VINES CDP_ADDR_PROTO_XNS CDP_ADDR_PROTO_APOLLO ); @EXPORT = qw(); @EXPORT_OK = (@EXPORT_PROTOS, ); %EXPORT_TAGS = ( protos => [ @EXPORT_PROTOS, ], ); use Net::CDP; *AUTOLOAD = \&Net::CDP::AUTOLOAD;
sub new($$;$) { my $class = shift; croak 'Usage: Net::CDP::Address->new($ip) or Net::CDP::Address->new($protocol, $packed)' unless defined $_[0]; my $ip = shift; my $protocol; my $packed; if (@_ && defined $_[0]) { $protocol = $ip; $packed = shift; } elsif (defined($packed = Net::CDP::_v6_pack($ip))) { $protocol = CDP_ADDR_PROTO_IPV6(); } elsif (defined($packed = Net::CDP::_v4_pack($ip))) { $protocol = CDP_ADDR_PROTO_IPV4(); } elsif (defined($packed = gethostbyname($ip))) { $protocol = CDP_ADDR_PROTO_IPV4(); } croak "Cannot parse address '$ip'" unless defined $protocol; Net::CDP::_rethrow { $class->_new_by_id($protocol, $packed) }; }
*protocol = \&_protocol_id;
sub address($) { my $self = shift or croak 'Usage: $self->address'; my $protocol = $self->_protocol_id; my $packed = $self->_address; if ($protocol == CDP_ADDR_PROTO_IPV4()) { return Net::CDP::_v4_unpack($packed); } elsif ($protocol == CDP_ADDR_PROTO_IPV6()) { return Net::CDP::_v6_unpack($packed); } return undef; }
*packed = \&_address;
1;