File Coverage

blib/lib/Net/Frame/Layer/ICMPv6/Option.pm
Criterion Covered Total %
statement 25 31 80.6
branch 4 8 50.0
condition n/a
subroutine 7 9 77.7
pod 5 5 100.0
total 41 53 77.3


line stmt bran cond sub pod time code
1             #
2             # $Id: Option.pm 45 2014-04-09 06:32:08Z gomor $
3             #
4             package Net::Frame::Layer::ICMPv6::Option;
5 2     2   10 use strict; use warnings;
  2     2   4  
  2         62  
  2         9  
  2         5  
  2         62  
6              
7 2     2   12 use Net::Frame::Layer qw(:consts :subs);
  2         3  
  2         1108  
8             our @ISA = qw(Net::Frame::Layer);
9              
10             our @AS = qw(
11             type
12             length
13             value
14             );
15             __PACKAGE__->cgBuildIndices;
16             __PACKAGE__->cgBuildAccessorsScalar(\@AS);
17              
18 2     2   62 use Net::Frame::Layer::ICMPv6 qw(:consts);
  2         5  
  2         2413  
19              
20             sub new {
21             shift->SUPER::new(
22 1     1 1 19 type => 0,
23             length => 0,
24             value => '',
25             @_,
26             );
27             }
28              
29             sub getLength {
30 0     0 1 0 my $self = shift;
31              
32 0         0 return length($self->value) + 2;
33             }
34              
35             sub pack {
36 1     1 1 206 my $self = shift;
37              
38 1 50       6 $self->raw($self->SUPER::pack('CCa*',
39             $self->type, $self->length, $self->value,
40             )) or return;
41              
42 1         74 return $self->raw;
43             }
44              
45             sub unpack {
46 1     1 1 14 my $self = shift;
47              
48 1 50       4 my ($type, $length, $tail) = $self->SUPER::unpack('CC a*', $self->raw)
49             or return;
50              
51 1         29 $self->type($type);
52 1         11 $self->length($length);
53              
54             # Dirty hack. Some systems does not set the length correctly
55 1 50       12 if ($type == NF_ICMPv6_OPTION_TARGETLINKLAYERADDRESS) {
56 0         0 $length = 6;
57             }
58              
59 1 50       8 my ($value, $payload) = $self->SUPER::unpack("a$length a*", $tail)
60             or return;
61              
62 1         17 $self->value($value);
63 1         17 $self->payload($payload);
64              
65 1         24 return $self;
66             }
67              
68             sub print {
69 0     0 1   my $self = shift;
70              
71 0           my $l = $self->layer;
72 0           sprintf "$l: type:%02x length:%02x value:%s",
73             $self->type, $self->length, CORE::unpack('H*', $self->value);
74             }
75              
76             1;
77              
78             __END__