| Net-Frame documentation | Contained in the Net-Frame distribution. |
Net::Frame::Layer::SLL - Linux cooked capture layer object
use Net::Frame::Layer::SLL qw(:consts);
# Build a layer
my $layer = Net::Frame::Layer::SLL->new(
packetType => NF_SLL_PACKET_TYPE_SENT_BY_US,
addressType => NF_SLL_ADDRESS_TYPE_512,
addressLength => 0,
source => 0,
protocol => NF_SLL_PROTOCOL_IPv4,
);
$layer->pack;
print 'RAW: '.$layer->dump."\n";
# Read a raw layer
my $layer = Net::Frame::Layer::SLL->new(raw => $raw);
print $layer->print."\n";
print 'PAYLOAD: '.unpack('H*', $layer->payload)."\n"
if $layer->payload;
This modules implements the encoding and decoding of the Linux cooked capture layer.
See also Net::Frame::Layer for other attributes and methods.
Stores the packet type (unicast to us, sent by us ...).
The address type.
The length of the previously specified address.
Source address.
Encapsulated protocol.
The following are inherited attributes. See Net::Frame::Layer for more information.
Object constructor. You can pass attributes that will overwrite default ones. See SYNOPSIS for default values.
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.
Load them: use Net::Frame::Layer::SLL qw(:consts);
Various possible packet types.
Various supported encapsulated layer types.
Patrice <GomoR> Auffret
Copyright (c) 2006-2011, Patrice <GomoR> Auffret
You may distribute this module under the terms of the Artistic license. See LICENSE.Artistic file in the source distribution archive.
| Net-Frame documentation | Contained in the Net-Frame distribution. |
# # $Id: SLL.pm 333 2011-02-16 10:47:33Z gomor $ # package Net::Frame::Layer::SLL; use strict; use warnings; use Net::Frame::Layer qw(:consts); require Exporter; our @ISA = qw(Net::Frame::Layer Exporter); our %EXPORT_TAGS = ( consts => [qw( NF_SLL_HDR_LEN NF_SLL_PACKET_TYPE_SENT_BY_US NF_SLL_PACKET_TYPE_UNICAST_TO_US NF_SLL_ADDRESS_TYPE_512 NF_SLL_PROTOCOL_IPv4 NF_SLL_PROTOCOL_X25 NF_SLL_PROTOCOL_ARP NF_SLL_PROTOCOL_CGMP NF_SLL_PROTOCOL_80211 NF_SLL_PROTOCOL_PPPIPCP NF_SLL_PROTOCOL_RARP NF_SLL_PROTOCOL_DDP NF_SLL_PROTOCOL_AARP NF_SLL_PROTOCOL_PPPCCP NF_SLL_PROTOCOL_WCP NF_SLL_PROTOCOL_8021Q NF_SLL_PROTOCOL_IPX NF_SLL_PROTOCOL_STP NF_SLL_PROTOCOL_IPv6 NF_SLL_PROTOCOL_WLCCP NF_SLL_PROTOCOL_MPLS NF_SLL_PROTOCOL_PPPoED NF_SLL_PROTOCOL_PPPoES NF_SLL_PROTOCOL_8021X NF_SLL_PROTOCOL_AoE NF_SLL_PROTOCOL_80211I NF_SLL_PROTOCOL_LLDP NF_SLL_PROTOCOL_LLTD NF_SLL_PROTOCOL_LOOP NF_SLL_PROTOCOL_VLAN NF_SLL_PROTOCOL_PPPPAP NF_SLL_PROTOCOL_PPPCHAP )], ); our @EXPORT_OK = ( @{$EXPORT_TAGS{consts}}, ); use constant NF_SLL_HDR_LEN => 16; use constant NF_SLL_PACKET_TYPE_SENT_BY_US => 4; use constant NF_SLL_PACKET_TYPE_UNICAST_TO_US => 0; use constant NF_SLL_ADDRESS_TYPE_512 => 512; use constant NF_SLL_PROTOCOL_IPv4 => 0x0800; use constant NF_SLL_PROTOCOL_X25 => 0x0805; use constant NF_SLL_PROTOCOL_ARP => 0x0806; use constant NF_SLL_PROTOCOL_CGMP => 0x2001; use constant NF_SLL_PROTOCOL_80211 => 0x2452; use constant NF_SLL_PROTOCOL_PPPIPCP => 0x8021; use constant NF_SLL_PROTOCOL_RARP => 0x8035; use constant NF_SLL_PROTOCOL_DDP => 0x809b; use constant NF_SLL_PROTOCOL_AARP => 0x80f3; use constant NF_SLL_PROTOCOL_PPPCCP => 0x80fd; use constant NF_SLL_PROTOCOL_WCP => 0x80ff; use constant NF_SLL_PROTOCOL_8021Q => 0x8100; use constant NF_SLL_PROTOCOL_IPX => 0x8137; use constant NF_SLL_PROTOCOL_STP => 0x8181; use constant NF_SLL_PROTOCOL_IPv6 => 0x86dd; use constant NF_SLL_PROTOCOL_WLCCP => 0x872d; use constant NF_SLL_PROTOCOL_MPLS => 0x8847; use constant NF_SLL_PROTOCOL_PPPoED => 0x8863; use constant NF_SLL_PROTOCOL_PPPoES => 0x8864; use constant NF_SLL_PROTOCOL_8021X => 0x888e; use constant NF_SLL_PROTOCOL_AoE => 0x88a2; use constant NF_SLL_PROTOCOL_80211I => 0x88c7; use constant NF_SLL_PROTOCOL_LLDP => 0x88cc; use constant NF_SLL_PROTOCOL_LLTD => 0x88d9; use constant NF_SLL_PROTOCOL_LOOP => 0x9000; use constant NF_SLL_PROTOCOL_VLAN => 0x9100; use constant NF_SLL_PROTOCOL_PPPPAP => 0xc023; use constant NF_SLL_PROTOCOL_PPPCHAP => 0xc223; our @AS = qw( packetType addressType addressLength source protocol ); __PACKAGE__->cgBuildIndices; __PACKAGE__->cgBuildAccessorsScalar(\@AS); no strict 'vars'; sub new { shift->SUPER::new( packetType => NF_SLL_PACKET_TYPE_SENT_BY_US, addressType => NF_SLL_ADDRESS_TYPE_512, addressLength => 0, source => 0, protocol => NF_SLL_PROTOCOL_IPv4, @_, ); } sub getLength { NF_SLL_HDR_LEN } sub pack { my $self = shift; $self->[$__raw] = $self->SUPER::pack('nnnH16n', $self->[$__packetType], $self->[$__addressType], $self->[$__addressLength], $self->[$__source], $self->[$__protocol], ) or return undef; $self->[$__raw]; } sub unpack { my $self = shift; my ($pt, $at, $al, $s, $p, $payload) = $self->SUPER::unpack('nnnH16n a*', $self->[$__raw]) or return undef; $self->[$__packetType] = $pt; $self->[$__addressType] = $at; $self->[$__addressLength] = $al; $self->[$__source] = $s; $self->[$__protocol] = $p; $self->[$__payload] = $payload; $self; } our $Next = { NF_SLL_PROTOCOL_IPv4() => 'IPv4', NF_SLL_PROTOCOL_X25() => 'X25', NF_SLL_PROTOCOL_ARP() => 'ARP', NF_SLL_PROTOCOL_CGMP() => 'CGMP', NF_SLL_PROTOCOL_80211() => '80211', NF_SLL_PROTOCOL_PPPIPCP() => 'PPPIPCP', NF_SLL_PROTOCOL_RARP() => 'RARP', NF_SLL_PROTOCOL_DDP () => 'DDP', NF_SLL_PROTOCOL_AARP() => 'AARP', NF_SLL_PROTOCOL_PPPCCP() => 'PPPCCP', NF_SLL_PROTOCOL_WCP() => 'WCP', NF_SLL_PROTOCOL_8021Q() => '8021Q', NF_SLL_PROTOCOL_IPX() => 'IPX', NF_SLL_PROTOCOL_STP() => 'STP', NF_SLL_PROTOCOL_IPv6() => 'IPv6', NF_SLL_PROTOCOL_WLCCP() => 'WLCCP', NF_SLL_PROTOCOL_MPLS() => 'MPLS', NF_SLL_PROTOCOL_PPPoED() => 'PPPoED', NF_SLL_PROTOCOL_PPPoES() => 'PPPoES', NF_SLL_PROTOCOL_8021X() => '8021X', NF_SLL_PROTOCOL_AoE() => 'AoE', NF_SLL_PROTOCOL_80211I() => '80211I', NF_SLL_PROTOCOL_LLDP() => 'LLDP', NF_SLL_PROTOCOL_LLTD() => 'LLTD', NF_SLL_PROTOCOL_LOOP() => 'LOOP', NF_SLL_PROTOCOL_VLAN() => 'VLAN', NF_SLL_PROTOCOL_PPPPAP() => 'PPPPAP', NF_SLL_PROTOCOL_PPPCHAP() => 'PPPCHAP', }; sub encapsulate { my $self = shift; return $self->[$__nextLayer] if $self->[$__nextLayer]; return $Next->{$self->[$__protocol]} || NF_LAYER_UNKNOWN; } sub print { my $self = shift; my $l = $self->layer; sprintf "$l: packetType:0x%04x addressType:0x%04x ". "addressLength:0x%04x\n". "$l: source:%d protocol:0x%04x", $self->[$__packetType], $self->[$__addressType], $self->[$__addressLength], $self->[$__source], $self->[$__protocol]; } 1; __END__