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 )