File Coverage

blib/lib/Net/Frame/Layer/RAW.pm
Criterion Covered Total %
statement 24 30 80.0
branch 2 10 20.0
condition n/a
subroutine 8 8 100.0
pod 4 4 100.0
total 38 52 73.0


line stmt bran cond sub pod time code
1             #
2             # $Id: RAW.pm,v 7609c9d085d3 2018/03/15 15:17:19 gomor $
3             #
4             package Net::Frame::Layer::RAW;
5 2     2   6014 use strict;
  2         10  
  2         57  
6 2     2   12 use warnings;
  2         4  
  2         61  
7              
8 2     2   479 use Net::Frame::Layer qw(:consts);
  2         6  
  2         407  
9             require Exporter;
10             our @ISA = qw(Net::Frame::Layer Exporter);
11             __PACKAGE__->cgBuildIndices;
12              
13             our %EXPORT_TAGS = (
14             consts => [],
15             );
16             our @EXPORT_OK = (
17             @{$EXPORT_TAGS{consts}},
18             );
19              
20 2     2   21 no strict 'vars';
  2         5  
  2         735  
21              
22             sub pack {
23 1     1 1 218 my $self = shift;
24 1         7 $self->[$__raw] = '';
25 1         3 $self->[$__raw];
26             }
27              
28             sub unpack {
29 1     1 1 5 my $self = shift;
30 1         3 $self->[$__payload] = $self->[$__raw];
31 1         2 $self;
32             }
33              
34             sub encapsulate {
35 1     1 1 9 my $self = shift;
36              
37 1 50       4 return $self->[$__nextLayer] if $self->[$__nextLayer];
38              
39 1 50       6 return NF_LAYER_NONE if ! $self->[$__payload];
40              
41             # With RAW layer, we must guess which type is the first layer
42 0         0 my $payload = CORE::unpack('H*', $self->[$__payload]);
43              
44             # XXX: may not work on big-endian arch
45 0 0       0 if ($payload =~ /^4/) {
    0          
    0          
46 0         0 return 'IPv4';
47             }
48             elsif ($payload =~ /^6/) {
49 0         0 return 'IPv6';
50             }
51             elsif ($payload =~ /^0001....06/) {
52 0         0 return 'ARP';
53             }
54              
55 0         0 return NF_LAYER_UNKNOWN;
56             }
57              
58             sub print {
59 1     1 1 5 my $self = shift;
60 1         7 my $l = $self->layer;
61 1         43 "$l: empty";
62             }
63              
64             1;
65              
66             __END__