NAME

Net::Packet::VLAN - 802.1Q layer 3 object

SYNOPSIS

use Net::Packet qw($Env);
use Net::Packet::VLAN;

# Load needed constants
use Net::Packet::Consts qw(:ipv4 :eth);

# In order to avoid autocreation of Desc and Dump objects
# Because VLAN is particuliar, we must do it manually
use Net::Packet::DescL2;
use Net::Packet::Dump;

Net::Packet::DescL2->new;
Net::Packet::Dump->new(filter => 'vlan');

# Another thing to note, do not send VLAN frames in a 
# vlan interface, it would be encapsulated another time ;)
# Instead, send it to the parent interface

# So, we will play an echo-request inside a vlan
use Net::Packet::Frame;
use Net::Packet::IPv4;
use Net::Packet::ICMPv4;
my $echo = Net::Packet::Frame->new(
   l3 => Net::Packet::IPv4->new(
      src      => $vlanSrcIp,
      dst      => $vlanDstIp,
      protocol => NP_IPv4_PROTOCOL_ICMPv4,
      doChecksum => 1, # Because system will not do it,
                       # at least under FreeBSD
      noFixLen   => 1, # Well, FreeBSD needs fixing, but not 
                       # when frames are injected into VLANs ;)
   ),
   l4 => Net::Packet::ICMPv4->new,
);

# Frame to inject is built, time to encapsulate it into a VLAN frame
use Net::Packet::ETH;
my $frame = Net::Packet::Frame->new(
   l2 => Net::Packet::ETH->new(
      dst  => $vlanDstMac,
      type => NP_ETH_TYPE_VLAN,
   ),
   l3 => Net::Packet::VLAN->new(
      frame => $echo,
   ),
);

# Done !
print $frame->l3->print, "\n";
print $frame->l3->frame->l3->print, "\n";
print $frame->l3->frame->l4->print, "\n";
$frame->send;

DESCRIPTION

This modules implements the encoding and decoding of the Virtual LAN/802.1Q layer.

Details: http://standards.ieee.org/getieee802/802.1.html

See also Net::Packet::Layer and Net::Packet::Layer3 for other attributes and methods.

ATTRIBUTES

priority

The priority field.

cfi

The cfi field. It is only one bit long, so set it to 0 or 1.

id

VLAN tag id. You'll love it.

type

Which type the next encapsulated layer is.

frame

This is a Net::Packet::Frame object, built it like any other such frame. Just to mention that you should use doChecksum attribute if you put in a Net::Packet::IPv4 layer, and maybe the noFixLen attribute also.

METHODS

new

Object constructor. You can pass attributes that will overwrite default ones. Default values:

priority: 0

cfi: 0

id: 0

type: NP_VLAN_TYPE_IPv4

pack

Packs all attributes into a raw format, in order to inject to network. Returns 1 on success, undef otherwise.

unpack

Unpacks raw data from network and stores attributes into the object. Returns 1 on success, undef otherwise.

CONSTANTS

Load them: use Net::Packet::Consts qw(:vlan);

NP_VLAN_TYPE_ARP
NP_VLAN_TYPE_IPv4
NP_VLAN_TYPE_IPv6

Various supported encapsulated frame types.

AUTHOR

Patrice <GomoR> Auffret

COPYRIGHT AND LICENSE

Copyright (c) 2004-2006, Patrice <GomoR> Auffret

You may distribute this module under the terms of the Artistic license. See LICENSE.Artistic file in the source distribution archive.

RELATED MODULES

NetPacket, Net::RawIP, Net::RawSock

1 POD Error

The following errors were encountered while parsing the POD:

Around line 118:

Non-ASCII character seen before =encoding in '# Load'. Assuming CP1252