Net-Frame-Layer-ICMPv6

 view release on metacpan or  search on metacpan

lib/Net/Frame/Layer/ICMPv6.pm  view on Meta::CPAN

   if ($mob) {
      $ipPayloadLength -= $mob->getLength;
   }

   # Build pseudo-header and pack ICMPv6 packet
   my $zero       = Bit::Vector->new_Dec(24, 0);
   my $nextHeader = Bit::Vector->new_Dec( 8, $lastNextHeader);
   my $v32        = $zero->Concat_List($nextHeader);

   my $packed = $self->SUPER::pack('a*a*NNCCn',
      inet6Aton($ip->src), inet6Aton($lastIpDst), $ipPayloadLength,
      $v32->to_Dec, $self->type, $self->code, 0
   ) or return;

   if (defined($last->payload) && length($last->payload)) {
      $payload .= $last->payload;
   }
   if (length($payload)) {
      $packed .= $self->SUPER::pack('a*', $payload)
         or return;
   }

lib/Net/Frame/Layer/ICMPv6/NeighborAdvertisement.pm  view on Meta::CPAN

}

sub pack {
   my $self = shift;

   my $flags    = Bit::Vector->new_Dec( 3, $self->flags);
   my $reserved = Bit::Vector->new_Dec(29, $self->reserved);
   my $v32      = $flags->Concat_List($reserved);

   my $raw = $self->SUPER::pack('Na16',
      $v32->to_Dec, inet6Aton($self->targetAddress),
   ) or return;

   for ($self->options) {
      $raw .= $_->pack;
   }

   return $self->raw($raw);
}

sub _unpackOptions {

lib/Net/Frame/Layer/ICMPv6/NeighborAdvertisement.pm  view on Meta::CPAN

   my $self = shift;

   my ($flagsReserved, $targetAddress, $payload) =
      $self->SUPER::unpack('Na16 a*', $self->raw)
         or return undef;

   my $v32 = Bit::Vector->new_Dec(32, $flagsReserved);

   $self->reserved($v32->Chunk_Read(29,  0));
   $self->flags   ($v32->Chunk_Read( 3, 29));
   $self->targetAddress(inet6Ntoa($targetAddress));

   if (defined($payload) && length($payload)) {
      $payload = $self->_unpackOptions($payload);
   }

   $self->payload($payload);

   return $self;
}

lib/Net/Frame/Layer/ICMPv6/NeighborSolicitation.pm  view on Meta::CPAN


sub getLength {
   my $self = shift;
   return 20 + $self->getOptionsLength;
}

sub pack {
   my $self = shift;

   my $raw = $self->SUPER::pack('Na16',
      $self->reserved, inet6Aton($self->targetAddress),
   ) or return;

   for ($self->options) {
      $raw .= $_->pack;
   }

   return $self->raw($raw);
}

sub _unpackOptions {

lib/Net/Frame/Layer/ICMPv6/NeighborSolicitation.pm  view on Meta::CPAN

}

sub unpack {
   my $self = shift;

   my ($reserved, $targetAddress, $payload) =
      $self->SUPER::unpack('Na16 a*', $self->raw)
         or return;

   $self->reserved($reserved);
   $self->targetAddress(inet6Ntoa($targetAddress));

   if (defined($payload) && length($payload)) {
      $payload = $self->_unpackOptions($payload);
   }

   $self->payload($payload);

   return $self;
}



( run in 0.229 second using v1.01-cache-2.11-cpan-87723dcf8b7 )