Class: PacketGen::Header::GRE
- Defined in:
- lib/packetgen/header/gre.rb
Overview
Generic Routing Encapsulation (RFC 2784 and 2890)
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|C| |K|S| Reserved0 | Ver | Protocol Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum (optional) | Reserved1 (Optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Key (optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number (Optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
A GRE header is composed of:
-
A first 16-bit attribute containing given flags:
-
#c indicates if #checksum and #reserved1 attributes are present.
-
#s indicatesid #sequence_number attribute is present.
-
#ver 3-bit version number.
-
-
#protocol_type (
BinStruct::Int16
). -
optional #checksum and #reserved1 attribute (both
BinStruct::Int16
). -
optional #key attribute (
BinStruct::Int32
). -
optional #sequence_number attribute (
BinStruct::Int32
). -
and a #body (+BinStruct::String or PacketGen::Headerable).
Current implementation supports tunneling IP and IPv6 packets in GRE.
Constant Summary collapse
- IP_PROTOCOL =
IP protocol number for GRE
47
Instance Attribute Summary collapse
- #body ⇒ BinStruct::String, Headerable
-
#c ⇒ Boolean
Say if #checksum and #reserved1 attributes are present.
-
#checksum ⇒ Integer
IP checksum over all 16-bit words in GRE header and its body.
-
#k ⇒ Boolean
Say if #key attribute is present.
-
#key ⇒ Integer
32-bit integer used to identify an individual traffic flow within a tunnel.
- #protocol_type ⇒ Integer
- #reserved0 ⇒ Integer
-
#reserved1 ⇒ Integer
Reserved field, present only if #c is set.
-
#s ⇒ Boolean
Say if #sequence_number attribute is present.
-
#sequence_number ⇒ Integer
(also: #seqnum)
32-bit integer.
-
#ver ⇒ Integer
3-bit GRE protocol version.
Instance Method Summary collapse
-
#calc_checksum ⇒ Integer
Compute checksum and set
checksum
attribute. -
#initialize(options = {}) ⇒ GRE
constructor
A new instance of GRE.
Methods inherited from Base
bind, calculate_and_set_length, #header_id, inherited, #ip_header, #ll_header
Methods included from PacketGen::Headerable
#added_to_packet, included, #method_name, #packet, #packet=, #parse?, #protocol_name, #read, #to_s
Constructor Details
permalink #initialize(options = {}) ⇒ GRE
Returns a new instance of GRE.
87 88 89 90 |
# File 'lib/packetgen/header/gre.rb', line 87 def initialize(={}) opts = { r: false, reserved0: 0, version: 0 }.merge() super(opts) end |
Instance Attribute Details
permalink #body ⇒ BinStruct::String, Headerable
82 |
# File 'lib/packetgen/header/gre.rb', line 82 define_attr :body, BinStruct::String |
permalink #c ⇒ Boolean
Say if #checksum and #reserved1 attributes are present
58 |
# File 'lib/packetgen/header/gre.rb', line 58 define_bit_attr :u16, c: 1, r: 1, k: 1, s: 1, reserved0: 9, ver: 3 |
permalink #checksum ⇒ Integer
IP checksum over all 16-bit words in GRE header and its body. Present only if #c is set.
66 |
# File 'lib/packetgen/header/gre.rb', line 66 define_attr :checksum, BinStruct::Int16, default: 0, optional: lambda(&:c?) |
permalink #k ⇒ Boolean
Say if #key attribute is present
58 |
# File 'lib/packetgen/header/gre.rb', line 58 define_bit_attr :u16, c: 1, r: 1, k: 1, s: 1, reserved0: 9, ver: 3 |
permalink #key ⇒ Integer
32-bit integer used to identify an individual traffic flow within a tunnel. Present only if #k is set.
75 |
# File 'lib/packetgen/header/gre.rb', line 75 define_attr :key, BinStruct::Int32, optional: lambda(&:k?) |
permalink #protocol_type ⇒ Integer
62 |
# File 'lib/packetgen/header/gre.rb', line 62 define_attr :protocol_type, BinStruct::Int16 |
permalink #reserved0 ⇒ Integer
58 |
# File 'lib/packetgen/header/gre.rb', line 58 define_bit_attr :u16, c: 1, r: 1, k: 1, s: 1, reserved0: 9, ver: 3 |
permalink #reserved1 ⇒ Integer
Reserved field, present only if #c is set.
70 |
# File 'lib/packetgen/header/gre.rb', line 70 define_attr :reserved1, BinStruct::Int16, default: 0, optional: lambda(&:c?) |
permalink #s ⇒ Boolean
Say if #sequence_number attribute is present
58 |
# File 'lib/packetgen/header/gre.rb', line 58 define_bit_attr :u16, c: 1, r: 1, k: 1, s: 1, reserved0: 9, ver: 3 |
permalink #sequence_number ⇒ Integer Also known as: seqnum
32-bit integer. Present only if #s is set.
79 |
# File 'lib/packetgen/header/gre.rb', line 79 define_attr :sequence_number, BinStruct::Int32, optional: lambda(&:s?) |
permalink #ver ⇒ Integer
3-bit GRE protocol version.
58 |
# File 'lib/packetgen/header/gre.rb', line 58 define_bit_attr :u16, c: 1, r: 1, k: 1, s: 1, reserved0: 9, ver: 3 |
Instance Method Details
permalink #calc_checksum ⇒ Integer
Compute checksum and set checksum
attribute.
94 95 96 97 |
# File 'lib/packetgen/header/gre.rb', line 94 def calc_checksum sum = IP.sum16(self) self.checksum = IP.reduce_checksum(sum) end |