Net-Frame-Layer-ICMPv6-MLD
view release on metacpan or search on metacpan
lib/Net/Frame/Layer/ICMPv6/MLD.pm view on Meta::CPAN
package Net::Frame::Layer::ICMPv6::MLD;
use strict; use warnings;
our $VERSION = '1.00';
use Net::Frame::Layer qw(:consts :subs);
use Exporter;
our @ISA = qw(Net::Frame::Layer Exporter);
our %EXPORT_TAGS = (
consts => [qw(
NF_MLD_ALLMLDRTRS
NF_MLD_ALLMLDRTRS_MAC
NF_MLD_TYPE_QUERY
NF_MLD_TYPE_REPORTv1
NF_MLD_TYPE_DONE
NF_MLD_TYPE_REPORTv2
)],
);
our @EXPORT_OK = (
@{$EXPORT_TAGS{consts}},
);
use constant NF_MLD_ALLMLDRTRS => 'ff02::16';
use constant NF_MLD_ALLMLDRTRS_MAC => '33:33:00:00:00:16';
use constant NF_MLD_TYPE_QUERY => 130;
use constant NF_MLD_TYPE_REPORTv1 => 131;
use constant NF_MLD_TYPE_DONE => 132;
use constant NF_MLD_TYPE_REPORTv2 => 143;
our @AS = qw(
maxResp
reserved
groupAddress
);
__PACKAGE__->cgBuildIndices;
__PACKAGE__->cgBuildAccessorsScalar(\@AS);
#no strict 'vars';
use Net::Frame::Layer::ICMPv6::MLD::Query;
use Net::Frame::Layer::ICMPv6::MLD::Report;
use Net::Frame::Layer::ICMPv6::MLD::Report::Record qw(:consts);
sub new {
shift->SUPER::new(
maxResp => 0,
reserved => 0,
groupAddress => '::',
@_,
);
}
sub getLength { 20 }
sub pack {
my $self = shift;
my $raw = $self->SUPER::pack('nna*',
$self->maxResp,
$self->reserved,
inet6Aton($self->groupAddress)
) or return;
return $self->raw($raw);
}
sub unpack {
my $self = shift;
my ($maxResp, $reserved, $group, $payload) =
$self->SUPER::unpack('nna16 a*', $self->raw)
or return;
$self->maxResp($maxResp);
$self->reserved($reserved);
$self->groupAddress(inet6Ntoa($group));
$self->payload($payload);
return $self;
}
sub encapsulate {
my $self = shift;
return $self->nextLayer if $self->nextLayer;
if ($self->payload) {
return 'ICMPv6::MLD::Query';
}
NF_LAYER_NONE;
}
sub print {
my $self = shift;
my $l = $self->layer;
my $buf .= sprintf
"$l: maxResp:%d reserved:%d\n".
"$l: groupAddress:%s",
$self->maxResp, $self->reserved,
$self->groupAddress;
return $buf;
}
1;
__END__
=head1 NAME
Net::Frame::Layer::ICMPv6::MLD - Multicast Listener Discovery layer object
=head1 SYNOPSIS
use Net::Frame::Simple;
use Net::Frame::Layer::ICMPv6::MLD qw(:consts);
my $layer = Net::Frame::Layer::ICMPv6::MLD->new(
maxResp => 0,
reserved => 0,
groupAddress => '::',
);
#
# Read a raw layer
#
my $layer = Net::Frame::Layer::ICMPv6::MLD->new(raw => $raw);
print $layer->print."\n";
print 'PAYLOAD: '.unpack('H*', $layer->payload)."\n"
if $layer->payload;
( run in 0.500 second using v1.01-cache-2.11-cpan-39bf76dae61 )