Class: PacketGen::Header::GRE
- Inherits:
-
Base
show all
- 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) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Constant Summary
collapse
- IP_PROTOCOL =
IP protocol number for GRE
47
Instance Attribute Summary collapse
Attributes inherited from Base
#packet
Instance Method Summary
collapse
Methods inherited from Base
bind_header, #header_id, inherited, #ip_header, known_headers, #method_name, #parse?, protocol_name, #protocol_name
#[], #[]=, define_bit_fields_on, define_field, define_field_after, define_field_before, delete_field, #fields, #force_binary, inherited, #inspect, #is_optional?, #is_present?, #optional_fields, #read, #sz, #to_h, #to_s
Constructor Details
#initialize(options = {}) ⇒ GRE
Returns a new instance of GRE.
63
64
65
66
|
# File 'lib/packetgen/header/gre.rb', line 63
def initialize(options={})
opts = { r: false, reserved0: 0, version: 0 }.merge(options)
super(opts)
end
|
Instance Attribute Details
58
|
# File 'lib/packetgen/header/gre.rb', line 58
define_field :body, Types::String
|
#c ⇒ Boolean
39
|
# File 'lib/packetgen/header/gre.rb', line 39
define_bit_fields_on :u16, :c, :r, :k, :s, :reserved0, 9, :ver, 3
|
#checksum ⇒ Integer
46
|
# File 'lib/packetgen/header/gre.rb', line 46
define_field :checksum, Types::Int16, default: 0, optional: ->(gre) { gre.c? }
|
#k ⇒ Boolean
39
|
# File 'lib/packetgen/header/gre.rb', line 39
define_bit_fields_on :u16, :c, :r, :k, :s, :reserved0, 9, :ver, 3
|
#key ⇒ Integer
52
|
# File 'lib/packetgen/header/gre.rb', line 52
define_field :key, Types::Int32, optional: ->(gre) { gre.k? }
|
#protocol_type ⇒ Integer
43
|
# File 'lib/packetgen/header/gre.rb', line 43
define_field :protocol_type, Types::Int16
|
#reserved0 ⇒ Integer
39
|
# File 'lib/packetgen/header/gre.rb', line 39
define_bit_fields_on :u16, :c, :r, :k, :s, :reserved0, 9, :ver, 3
|
#reserved1 ⇒ Integer
49
|
# File 'lib/packetgen/header/gre.rb', line 49
define_field :reserved1, Types::Int16, default: 0, optional: ->(gre) { gre.c? }
|
#s ⇒ Boolean
39
|
# File 'lib/packetgen/header/gre.rb', line 39
define_bit_fields_on :u16, :c, :r, :k, :s, :reserved0, 9, :ver, 3
|
#sequence_number ⇒ Integer
Also known as:
seqnum
55
|
# File 'lib/packetgen/header/gre.rb', line 55
define_field :sequence_number, Types::Int32, optional: ->(gre) { gre.s? }
|
#ver ⇒ Integer
39
|
# File 'lib/packetgen/header/gre.rb', line 39
define_bit_fields_on :u16, :c, :r, :k, :s, :reserved0, 9, :ver, 3
|
Instance Method Details
#calc_checksum ⇒ Integer
Compute checksum and set checksum field
70
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/packetgen/header/gre.rb', line 70
def calc_checksum
str = to_s
str << "\x00" if str.length % 2 == 1
sum = str.unpack('n*').reduce(:+)
while sum > 0xffff do
sum = (sum & 0xffff) + (sum >> 16)
end
sum = ~sum & 0xffff
self[:checksum].value = (sum == 0) ? 0xffff : sum
end
|