File Coverage

blib/lib/Net/Frame/Layer/ICMPv4/Redirect.pm
Criterion Covered Total %
statement 26 31 83.8
branch 4 10 40.0
condition n/a
subroutine 8 9 88.8
pod 6 6 100.0
total 44 56 78.5


line stmt bran cond sub pod time code
1             #
2             # $Id: Redirect.pm 56 2015-01-20 18:55:33Z gomor $
3             #
4             package Net::Frame::Layer::ICMPv4::Redirect;
5 3     3   6042 use strict; use warnings;
  3     3   6  
  3         97  
  3         14  
  3         3  
  3         91  
6              
7 3     3   452 use Net::Frame::Layer qw(:consts :subs);
  3         55040  
  3         1600  
8             our @ISA = qw(Net::Frame::Layer);
9              
10             our @AS = qw(
11             gateway
12             );
13             __PACKAGE__->cgBuildIndices;
14             __PACKAGE__->cgBuildAccessorsScalar(\@AS);
15              
16             sub new {
17 1     1 1 19 my $self = shift->SUPER::new(
18             gateway => '127.0.0.1',
19             @_,
20             );
21              
22 1         186 return $self;
23             }
24              
25 0     0 1 0 sub getLength { 4 }
26              
27             sub pack {
28 1     1 1 5 my $self = shift;
29              
30 1 50       3 $self->raw($self->SUPER::pack('a4', inetAton($self->gateway)))
31             or return;
32              
33 1         66 return $self->raw;
34             }
35              
36             sub unpack {
37 1     1 1 10 my $self = shift;
38              
39 1 50       4 my ($gateway, $payload) = $self->SUPER::unpack('a4 a*', $self->raw)
40             or return;
41              
42 1         24 $self->gateway(inetNtoa($gateway));
43 1         17 $self->payload($payload);
44              
45 1         7 return $self;
46             }
47              
48             sub encapsulate {
49 1     1 1 112 my $self = shift;
50              
51 1 50       7 return $self->nextLayer if $self->nextLayer;
52              
53 1 50       15 if ($self->payload) {
54 0         0 my $pLen = length($self->payload);
55 0 0       0 if ($pLen < 40) {
56 0         0 $self->payload($self->payload.("\x00" x (40 - $pLen)));
57             }
58 0         0 return 'IPv4';
59             }
60              
61 1         9 return NF_LAYER_NONE;
62             }
63              
64             sub print {
65 1     1 1 4 my $self = shift;
66              
67 1         5 my $l = $self->layer;
68 1         11 return sprintf "$l: gateway:%s", $self->gateway;
69             }
70              
71             1;
72              
73             __END__