Net-Frame-Layer-IPv6
view release on metacpan or search on metacpan
examples/hopbyhop.pl view on Meta::CPAN
options => [ $option, $PadN ],
);
# MLD (ICMPv6)
my $icmpv6 = Net::Frame::Layer::ICMPv6->new(
type => 128,
);
my $mld = Net::Frame::Layer::ICMPv6::Echo->new(
identifier => 16,
sequenceNumber => 0,
payload => inet6Aton('::'),
);
# Create packet
my $packet = Net::Frame::Simple->new(
layers => [ $ether, $ipv6, $hop, $icmpv6, $mld, ],
);
print $packet->print."\n";
my $raw = $packet->pack;
lib/Net/Frame/Layer/IPv6.pm view on Meta::CPAN
my $version = Bit::Vector->new_Dec(4, $self->[$__version]);
my $trafficClass = Bit::Vector->new_Dec(8, $self->[$__trafficClass]);
my $flowLabel = Bit::Vector->new_Dec(20, $self->[$__flowLabel]);
my $v32 = $version->Concat_List($trafficClass, $flowLabel);
$self->[$__raw] = $self->SUPER::pack('NnCCa*a*',
$v32->to_Dec,
$self->[$__payloadLength],
$self->[$__nextHeader],
$self->[$__hopLimit],
inet6Aton($self->[$__src]),
inet6Aton($self->[$__dst]),
) or return undef;
$self->raw;
}
sub unpack {
my $self = shift;
my ($vTcFl, $pl, $nh, $hl, $sa, $da, $payload) =
$self->SUPER::unpack('NnCCa16a16 a*', $self->[$__raw])
or return undef;
my $v32 = Bit::Vector->new_Dec(32, $vTcFl);
$self->[$__flowLabel] = $v32->Chunk_Read(20, 0);
$self->[$__trafficClass] = $v32->Chunk_Read( 8, 20);
$self->[$__version] = $v32->Chunk_Read( 4, 28);
$self->[$__payloadLength] = $pl;
$self->[$__nextHeader] = $nh;
$self->[$__hopLimit] = $hl;
$self->[$__src] = inet6Ntoa($sa);
$self->[$__dst] = inet6Ntoa($da);
$self->[$__payload] = $payload;
$self;
}
sub encapsulate {
my $self = shift;
return $self->[$__nextLayer] if $self->[$__nextLayer];
lib/Net/Frame/Layer/IPv6/Routing.pm view on Meta::CPAN
sub pack {
my $self = shift;
my $raw = $self->SUPER::pack('CCCCN',
$self->nextHeader, $self->hdrExtLen, $self->routingType,
$self->segmentsLeft, $self->reserved
) or return;
for ($self->addresses) {
$raw .= $self->SUPER::pack('a16',
inet6Aton($_)
) or return;
}
return $self->raw($raw);
}
sub unpack {
my $self = shift;
my ($nextHeader, $hdrExtLen, $routingType, $segmentsLeft, $reserved, $rest) =
lib/Net/Frame/Layer/IPv6/Routing.pm view on Meta::CPAN
$self->hdrExtLen($hdrExtLen);
$self->routingType($routingType);
$self->segmentsLeft($segmentsLeft);
$self->reserved($reserved);
my @addresses = ();
for (1..$hdrExtLen/2) {
my ($address) =
$self->SUPER::unpack('a16', substr $rest, 16*($_-1))
or return;
push @addresses, inet6Ntoa($address)
}
$self->addresses(\@addresses);
$self->payload(substr $rest, 16*$hdrExtLen/2);
return $self;
}
sub computeSegmentsLeft {
( run in 0.670 second using v1.01-cache-2.11-cpan-87723dcf8b7 )