Net::Frame::Layer::RAW - empty layer object


Net-Frame documentation Contained in the Net-Frame distribution.

Index


Code Index:

NAME

Top

Net::Frame::Layer::RAW - empty layer object

SYNOPSIS

Top

   use Net::Frame::Layer::RAW qw(:consts);

   # Build a layer
   my $layer = Net::Frame::Layer::RAW->new;
   $layer->pack;

   print 'RAW: '.$layer->dump."\n";

   # Read a raw layer
   my $layer = Net::Frame::Layer::RAW->new(raw => $raw);

   print $layer->print."\n";
   print 'PAYLOAD: '.unpack('H*', $layer->payload)."\n"
      if $layer->payload;

DESCRIPTION

Top

This modules implements the encoding and decoding of the raw layer 2.

See also Net::Frame::Layer for other attributes and methods.

ATTRIBUTES

Top

No attributes in this layer.

The following are inherited attributes. See Net::Frame::Layer for more information.

raw
payload
nextLayer

METHODS

Top

new

Object constructor. No default values, because no attributes here.

The following are inherited methods. Some of them may be overriden in this layer, and some others may not be meaningful in this layer. See Net::Frame::Layer for more information.

layer
computeLengths
computeChecksums
pack
unpack
encapsulate
getLength
getPayloadLength
print
dump

CONSTANTS

Top

No constants here.

SEE ALSO

Top

Net::Frame::Layer

AUTHOR

Top

Patrice <GomoR> Auffret

COPYRIGHT AND LICENSE

Top


Net-Frame documentation Contained in the Net-Frame distribution.

#
# $Id: RAW.pm 333 2011-02-16 10:47:33Z gomor $
#
package Net::Frame::Layer::RAW;
use strict;
use warnings;

use Net::Frame::Layer qw(:consts);
require Exporter;
our @ISA = qw(Net::Frame::Layer Exporter);
__PACKAGE__->cgBuildIndices;

our %EXPORT_TAGS = (
   consts => [],
);
our @EXPORT_OK = (
   @{$EXPORT_TAGS{consts}},
);

no strict 'vars';

sub pack {
   my $self = shift;
   $self->[$__raw] = '';
   $self->[$__raw];
}

sub unpack {
   my $self = shift;
   $self->[$__payload] = $self->[$__raw];
   $self;
}

sub encapsulate {
   my $self = shift;

   return $self->[$__nextLayer] if $self->[$__nextLayer];

   return NF_LAYER_NONE if ! $self->[$__payload];

   # With RAW layer, we must guess which type is the first layer
   my $payload = CORE::unpack('H*', $self->[$__payload]);

   # XXX: may not work on big-endian arch
   if ($payload =~ /^4/) {
      return 'IPv4';
   }
   elsif ($payload =~ /^6/) {
      return 'IPv6';
   }
   elsif ($payload =~ /^0001....06/) {
      return 'ARP';
   }

   return NF_LAYER_UNKNOWN;
}

sub print {
   my $self = shift;
   my $l = $self->layer;
   "$l: empty";
}

1;

__END__