packetgen 3.3.3 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +38 -22
- data/lib/packetgen/capture.rb +2 -2
- data/lib/packetgen/config.rb +0 -1
- data/lib/packetgen/deprecation.rb +14 -8
- data/lib/packetgen/header/arp.rb +17 -18
- data/lib/packetgen/header/asn1_base.rb +2 -1
- data/lib/packetgen/header/base.rb +42 -40
- data/lib/packetgen/header/bootp.rb +35 -37
- data/lib/packetgen/header/dhcp/option.rb +21 -21
- data/lib/packetgen/header/dhcp/options.rb +3 -3
- data/lib/packetgen/header/dhcp.rb +8 -9
- data/lib/packetgen/header/dhcpv6/duid.rb +16 -16
- data/lib/packetgen/header/dhcpv6/option.rb +83 -61
- data/lib/packetgen/header/dhcpv6/options.rb +4 -4
- data/lib/packetgen/header/dhcpv6/relay.rb +6 -5
- data/lib/packetgen/header/dhcpv6.rb +17 -18
- data/lib/packetgen/header/dns/name.rb +21 -16
- data/lib/packetgen/header/dns/opt.rb +5 -2
- data/lib/packetgen/header/dns/option.rb +14 -14
- data/lib/packetgen/header/dns/qdsection.rb +3 -3
- data/lib/packetgen/header/dns/question.rb +7 -8
- data/lib/packetgen/header/dns/rr.rb +56 -43
- data/lib/packetgen/header/dns/rrsection.rb +6 -6
- data/lib/packetgen/header/dns.rb +103 -90
- data/lib/packetgen/header/dot11/control.rb +12 -12
- data/lib/packetgen/header/dot11/data.rb +25 -24
- data/lib/packetgen/header/dot11/element.rb +4 -4
- data/lib/packetgen/header/dot11/management.rb +21 -18
- data/lib/packetgen/header/dot11/sub_mngt.rb +40 -53
- data/lib/packetgen/header/dot11.rb +117 -122
- data/lib/packetgen/header/dot1q.rb +12 -13
- data/lib/packetgen/header/dot1x.rb +13 -13
- data/lib/packetgen/header/eap/fast.rb +4 -4
- data/lib/packetgen/header/eap/md5.rb +16 -8
- data/lib/packetgen/header/eap/tls.rb +18 -19
- data/lib/packetgen/header/eap/ttls.rb +22 -21
- data/lib/packetgen/header/eap.rb +73 -48
- data/lib/packetgen/header/eth.rb +41 -27
- data/lib/packetgen/header/gre.rb +33 -11
- data/lib/packetgen/header/http/headers.rb +7 -6
- data/lib/packetgen/header/http/request.rb +38 -29
- data/lib/packetgen/header/http/response.rb +35 -27
- data/lib/packetgen/header/http/verbs.rb +1 -3
- data/lib/packetgen/header/icmp.rb +14 -14
- data/lib/packetgen/header/icmpv6.rb +10 -9
- data/lib/packetgen/header/igmp.rb +26 -15
- data/lib/packetgen/header/igmpv3/group_record.rb +18 -13
- data/lib/packetgen/header/igmpv3/mq.rb +16 -18
- data/lib/packetgen/header/igmpv3/mr.rb +5 -5
- data/lib/packetgen/header/igmpv3.rb +12 -11
- data/lib/packetgen/header/ip/addr.rb +19 -15
- data/lib/packetgen/header/ip/option.rb +47 -36
- data/lib/packetgen/header/ip/options.rb +1 -1
- data/lib/packetgen/header/ip.rb +77 -95
- data/lib/packetgen/header/ipv6/addr.rb +28 -27
- data/lib/packetgen/header/ipv6/extension.rb +13 -11
- data/lib/packetgen/header/ipv6/hop_by_hop.rb +32 -13
- data/lib/packetgen/header/ipv6.rb +42 -35
- data/lib/packetgen/header/llc.rb +28 -21
- data/lib/packetgen/header/mdns.rb +10 -3
- data/lib/packetgen/header/mld.rb +15 -13
- data/lib/packetgen/header/mldv2/mcast_address_record.rb +17 -12
- data/lib/packetgen/header/mldv2/mlq.rb +22 -24
- data/lib/packetgen/header/mldv2/mlr.rb +8 -8
- data/lib/packetgen/header/mldv2.rb +1 -1
- data/lib/packetgen/header/ospfv2/db_description.rb +17 -18
- data/lib/packetgen/header/ospfv2/hello.rb +18 -17
- data/lib/packetgen/header/ospfv2/ls_ack.rb +6 -7
- data/lib/packetgen/header/ospfv2/ls_request.rb +14 -13
- data/lib/packetgen/header/ospfv2/ls_update.rb +9 -9
- data/lib/packetgen/header/ospfv2/lsa.rb +79 -60
- data/lib/packetgen/header/ospfv2/lsa_header.rb +12 -11
- data/lib/packetgen/header/ospfv2.rb +49 -46
- data/lib/packetgen/header/ospfv3/db_description.rb +20 -22
- data/lib/packetgen/header/ospfv3/hello.rb +17 -16
- data/lib/packetgen/header/ospfv3/ipv6_prefix.rb +22 -20
- data/lib/packetgen/header/ospfv3/ls_ack.rb +7 -8
- data/lib/packetgen/header/ospfv3/ls_request.rb +18 -18
- data/lib/packetgen/header/ospfv3/ls_update.rb +10 -10
- data/lib/packetgen/header/ospfv3/lsa.rb +62 -51
- data/lib/packetgen/header/ospfv3/lsa_header.rb +12 -11
- data/lib/packetgen/header/ospfv3.rb +54 -52
- data/lib/packetgen/header/sctp/chunk.rb +80 -56
- data/lib/packetgen/header/sctp/error.rb +174 -202
- data/lib/packetgen/header/sctp/padded32.rb +3 -3
- data/lib/packetgen/header/sctp/parameter.rb +89 -136
- data/lib/packetgen/header/sctp.rb +19 -8
- data/lib/packetgen/header/snmp.rb +108 -7
- data/lib/packetgen/header/tcp/option.rb +52 -39
- data/lib/packetgen/header/tcp/options.rb +13 -5
- data/lib/packetgen/header/tcp.rb +83 -65
- data/lib/packetgen/header/tftp.rb +31 -25
- data/lib/packetgen/header/udp.rb +21 -19
- data/lib/packetgen/header.rb +23 -18
- data/lib/packetgen/headerable.rb +21 -5
- data/lib/packetgen/inspect.rb +3 -8
- data/lib/packetgen/packet.rb +146 -71
- data/lib/packetgen/pcap.rb +15 -4
- data/lib/packetgen/pcapng/block.rb +20 -18
- data/lib/packetgen/pcapng/epb.rb +13 -15
- data/lib/packetgen/pcapng/file.rb +44 -111
- data/lib/packetgen/pcapng/idb.rb +11 -12
- data/lib/packetgen/pcapng/shb.rb +15 -16
- data/lib/packetgen/pcapng/spb.rb +9 -11
- data/lib/packetgen/pcapng/unknown_block.rb +6 -17
- data/lib/packetgen/pcapng.rb +6 -4
- data/lib/packetgen/pcaprub_wrapper.rb +17 -1
- data/lib/packetgen/proto.rb +5 -1
- data/lib/packetgen/unknown_packet.rb +5 -5
- data/lib/packetgen/utils/arp_spoofer.rb +18 -19
- data/lib/packetgen/utils.rb +4 -3
- data/lib/packetgen/version.rb +1 -1
- data/lib/packetgen.rb +12 -5
- metadata +29 -38
- data/lib/packetgen/types/abstract_tlv.rb +0 -278
- data/lib/packetgen/types/array.rb +0 -287
- data/lib/packetgen/types/cstring.rb +0 -109
- data/lib/packetgen/types/enum.rb +0 -171
- data/lib/packetgen/types/fieldable.rb +0 -66
- data/lib/packetgen/types/fields.rb +0 -622
- data/lib/packetgen/types/int.rb +0 -473
- data/lib/packetgen/types/int_string.rb +0 -102
- data/lib/packetgen/types/length_from.rb +0 -54
- data/lib/packetgen/types/oui.rb +0 -52
- data/lib/packetgen/types/string.rb +0 -97
- data/lib/packetgen/types/tlv.rb +0 -161
- data/lib/packetgen/types.rb +0 -26
@@ -11,7 +11,7 @@ require_relative 'padded32'
|
|
11
11
|
module PacketGen
|
12
12
|
module Header
|
13
13
|
class SCTP
|
14
|
-
#
|
14
|
+
# Base SCTP chunk class, defining SCTP chunk common fields.
|
15
15
|
# 0 1 2 3
|
16
16
|
# 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
|
17
17
|
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
@@ -42,32 +42,32 @@ module PacketGen
|
|
42
42
|
# @!attribute type
|
43
43
|
# 8-bit SCTP chunk type
|
44
44
|
# @return [Integer]
|
45
|
-
|
45
|
+
define_attr :type, BinStruct::Int8Enum, enum: TYPES
|
46
46
|
# @!attribute type
|
47
47
|
# 8-bit SCTP chunk flags
|
48
48
|
# @return [Integer]
|
49
|
-
|
49
|
+
define_attr :flags, BinStruct::Int8
|
50
50
|
# @!attribute length
|
51
51
|
# 16-bit SCTP chunk length
|
52
52
|
# @return [Integer]
|
53
|
-
|
53
|
+
define_attr :length, BinStruct::Int16
|
54
54
|
|
55
55
|
# Get human-redable chunk
|
56
56
|
# @return [::String]
|
57
57
|
def to_human
|
58
|
-
str =
|
58
|
+
str = "<chunk:#{human_type}"
|
59
59
|
flags_str = flags_to_human
|
60
60
|
str << ",flags:#{flags_str}" unless flags_str.empty?
|
61
61
|
str << '>'
|
62
62
|
end
|
63
63
|
|
64
|
+
# Get human-readable type
|
64
65
|
# @return [::String,Integer]
|
65
66
|
def human_type
|
66
67
|
self[:type].to_human
|
67
68
|
end
|
68
69
|
|
69
|
-
# Calculate and set chunk length
|
70
|
-
# @todo do not count last parameter padding
|
70
|
+
# Calculate and set chunk {#length}
|
71
71
|
# @return [Integer]
|
72
72
|
def calc_length
|
73
73
|
self.length = to_s(no_padding: true).size
|
@@ -91,7 +91,7 @@ module PacketGen
|
|
91
91
|
class SCTP
|
92
92
|
# Embed chunks for a given {SCTP} packet.
|
93
93
|
# @author Sylvain Daubert
|
94
|
-
class ArrayOfChunk <
|
94
|
+
class ArrayOfChunk < BinStruct::Array
|
95
95
|
set_of BaseChunk
|
96
96
|
|
97
97
|
private
|
@@ -121,10 +121,10 @@ module PacketGen
|
|
121
121
|
# @!attribute body
|
122
122
|
# SCTP chunk value
|
123
123
|
# @return [String]
|
124
|
-
|
124
|
+
define_attr :body, BinStruct::String, builder: ->(h, t) { t.new(length_from: -> { h.length - 4 }) }
|
125
125
|
end
|
126
126
|
|
127
|
-
# Data chunk
|
127
|
+
# Data chunk. This SCTP chunk embeds user data.
|
128
128
|
# 0 1 2 3
|
129
129
|
# 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
|
130
130
|
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
@@ -143,39 +143,40 @@ module PacketGen
|
|
143
143
|
# @author Sylvain Daubert
|
144
144
|
class DataChunk < BaseChunk
|
145
145
|
# @!attribute tsn
|
146
|
-
# 32-bit
|
146
|
+
# 32-bit Transmission Sequence Number for this DATA chunk
|
147
147
|
# @return [Integer]
|
148
|
-
|
148
|
+
define_attr :tsn, BinStruct::Int32
|
149
149
|
# @!attribute stream_id
|
150
150
|
# 16-bit stream identifier
|
151
151
|
# @return [Integer]
|
152
|
-
|
152
|
+
define_attr :stream_id, BinStruct::Int16
|
153
153
|
# @!attribute stream_sn
|
154
154
|
# 16-bit stream sequence number
|
155
155
|
# @return [Integer]
|
156
|
-
|
156
|
+
define_attr :stream_sn, BinStruct::Int16
|
157
157
|
# @!attribute ppid
|
158
158
|
# 32-bit payload protocol identifier
|
159
159
|
# @return [Integer]
|
160
|
-
|
160
|
+
define_attr :ppid, BinStruct::Int32
|
161
161
|
# @!attribute body
|
162
|
-
#
|
162
|
+
# User data
|
163
163
|
# @return [String]
|
164
|
-
|
164
|
+
define_attr :body, BinStruct::String, builder: ->(h, t) { t.new(length_from: -> { h.length - 4 }) }
|
165
165
|
|
166
|
+
remove_attr :flags
|
166
167
|
# @!attribute flag_i
|
167
168
|
# IMMEDIATE flag
|
168
|
-
# @return [
|
169
|
+
# @return [Integer]
|
169
170
|
# @!attribute flag_u
|
170
|
-
# UNORDERED flag
|
171
|
-
# @return [
|
171
|
+
# UNORDERED flag. If set, no Stream Sequence Number is assigned to this chunk.
|
172
|
+
# @return [Integer]
|
172
173
|
# @!attribute flag_b
|
173
|
-
# BEGINNING fragment flag
|
174
|
-
# @return [
|
174
|
+
# BEGINNING fragment flag. If set, indicate the first fragment of a user message.
|
175
|
+
# @return [Integer]
|
175
176
|
# @!attribute flag_e
|
176
|
-
# ENDING fragment flag
|
177
|
-
# @return [
|
178
|
-
|
177
|
+
# ENDING fragment flag. If set, indicate the last fragment of a user message.
|
178
|
+
# @return [Integer]
|
179
|
+
define_bit_attr_after :type, :flags, flag_res: 4, flag_i: 1, flag_u: 1, flag_b: 1, flag_e: 1
|
179
180
|
|
180
181
|
private
|
181
182
|
|
@@ -189,7 +190,7 @@ module PacketGen
|
|
189
190
|
end
|
190
191
|
end
|
191
192
|
|
192
|
-
# Init Chunk
|
193
|
+
# Init Chunk. This chunk is used to initiate an SCTP association.
|
193
194
|
# 0 1 2 3
|
194
195
|
# 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
|
195
196
|
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
@@ -212,27 +213,27 @@ module PacketGen
|
|
212
213
|
# @!attribute initiate_tag
|
213
214
|
# 32-bit Initiate Tag
|
214
215
|
# @return [Integer]
|
215
|
-
|
216
|
+
define_attr :initiate_tag, BinStruct::Int32
|
216
217
|
# @!attribute a_wrnd
|
217
218
|
# 32-bit Advertised Receiver Window Credit (a_rwnd)
|
218
219
|
# @return [Integer]
|
219
|
-
|
220
|
+
define_attr :a_rwnd, BinStruct::Int32
|
220
221
|
# @!attribute nos
|
221
222
|
# 16-bit Number of Outbound Streams
|
222
223
|
# @return [Integer]
|
223
|
-
|
224
|
+
define_attr :nos, BinStruct::Int16
|
224
225
|
# @!attribute nis
|
225
226
|
# 16-bit Number of Inbound Streams
|
226
227
|
# @return [Integer]
|
227
|
-
|
228
|
+
define_attr :nis, BinStruct::Int16
|
228
229
|
# @!attribute initial_tsn
|
229
230
|
# 32-bit Initial TSN
|
230
231
|
# @return [Integer]
|
231
|
-
|
232
|
+
define_attr :initial_tsn, BinStruct::Int32
|
232
233
|
# @!attribute parameters
|
233
234
|
# List of parameters
|
234
235
|
# @return [ArrayOfParameter]
|
235
|
-
|
236
|
+
define_attr :parameters, ArrayOfParameter
|
236
237
|
|
237
238
|
def initialize(options={})
|
238
239
|
options[:type] = BaseChunk::TYPES['INIT'] unless options.key?(:type)
|
@@ -240,15 +241,16 @@ module PacketGen
|
|
240
241
|
end
|
241
242
|
|
242
243
|
# Calculate lengths, including parameters ones.
|
243
|
-
# @return [
|
244
|
+
# @return [Integer] chunk length
|
244
245
|
def calc_length
|
245
246
|
parameters.each(&:calc_length)
|
246
247
|
super
|
247
248
|
end
|
248
249
|
|
249
|
-
#
|
250
|
+
# Get human-redable description.
|
251
|
+
# @return [String]
|
250
252
|
def to_human
|
251
|
-
str =
|
253
|
+
str = "<chunk:#{human_type}"
|
252
254
|
flags_str = flags_to_human
|
253
255
|
str << ",flags:#{flags_str}" unless flags_str.empty?
|
254
256
|
str << ",param:#{parameters.map(&:to_human).join(',')}" unless parameters.empty?
|
@@ -315,28 +317,28 @@ module PacketGen
|
|
315
317
|
# @!attribute ctsn_ack
|
316
318
|
# 32-bit Cumulative TSN Ack
|
317
319
|
# @return [Integer]
|
318
|
-
|
320
|
+
define_attr :ctsn_ack, BinStruct::Int32
|
319
321
|
# @!attribute a_rwnd
|
320
322
|
# 32-bit Advertised Receiver Window Credit
|
321
323
|
# @return [Integer]
|
322
|
-
|
324
|
+
define_attr :a_rwnd, BinStruct::Int32
|
323
325
|
# @!attribute num_gap
|
324
326
|
# 16-bit Number of Gap Ack Blocks
|
325
327
|
# @return [Integer]
|
326
|
-
|
328
|
+
define_attr :num_gap, BinStruct::Int32
|
327
329
|
# @!attribute num_dup_tsn
|
328
330
|
# 16-bit Number of Duplicate TSNs
|
329
331
|
# @return [Integer]
|
330
|
-
|
332
|
+
define_attr :num_dup_tsn, BinStruct::Int32
|
331
333
|
# @!attribute gaps
|
332
334
|
# Array of 32-bit Integers, encoding boudaries of a Gap Ack Block.
|
333
335
|
# 16 most significant bits encode block start. 16 least significant bits encode block end.
|
334
|
-
# @return [
|
335
|
-
|
336
|
+
# @return [BinStruct::ArrayOfInt32]
|
337
|
+
define_attr :gaps, BinStruct::ArrayOfInt32
|
336
338
|
# @!attribute dup_tsns
|
337
339
|
# Array of 32-bit Duplicate TSNs.
|
338
|
-
# @return [
|
339
|
-
|
340
|
+
# @return [BinStruct::ArrayOfInt32]
|
341
|
+
define_attr :dup_tsns, BinStruct::ArrayOfInt32
|
340
342
|
|
341
343
|
def initialize(options={})
|
342
344
|
options[:type] = BaseChunk::TYPES['SACK'] unless options.key?(:type)
|
@@ -344,6 +346,17 @@ module PacketGen
|
|
344
346
|
end
|
345
347
|
end
|
346
348
|
|
349
|
+
# @!parse
|
350
|
+
# # Heartbeat Information.
|
351
|
+
# # @author LemonTree55
|
352
|
+
# # @since 4.1.0 Replace +HeartbeatInfoParameter+
|
353
|
+
# class HeartbeatInfo < BinStruct::AbstractTLV; end
|
354
|
+
HearbeatInfo = BinStruct::AbstractTLV.create(type_class: BinStruct::Int16Enum,
|
355
|
+
length_class: BinStruct::Int16,
|
356
|
+
attr_in_length: 'TLV')
|
357
|
+
HearbeatInfo.define_type_enum({ 'HearbeatInfo' => 1 }.freeze)
|
358
|
+
HearbeatInfo.define_type_default('HearbeatInfo')
|
359
|
+
|
347
360
|
# Heartbeat Request Chunk
|
348
361
|
# 0 1 2 3
|
349
362
|
# 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
|
@@ -355,11 +368,14 @@ module PacketGen
|
|
355
368
|
# \ \
|
356
369
|
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
357
370
|
# @author Sylvain Daubert
|
371
|
+
# @author LemonTree55
|
372
|
+
# @since 3.4.0
|
373
|
+
# @since 4.1.0 {#info} is now a {HeartbeatInfo}
|
358
374
|
class HeartbeatChunk < BaseChunk
|
359
375
|
# @!attribute info
|
360
|
-
#
|
361
|
-
# @return [
|
362
|
-
|
376
|
+
# Heartbeat information TLV.
|
377
|
+
# @return [HearbeatInfo]
|
378
|
+
define_attr :info, HearbeatInfo
|
363
379
|
|
364
380
|
def initialize(options={})
|
365
381
|
options[:type] = BaseChunk::TYPES['HEARTBEAT'] unless options.key?(:type)
|
@@ -378,6 +394,8 @@ module PacketGen
|
|
378
394
|
# \ \
|
379
395
|
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
380
396
|
# @author Sylvain Daubert
|
397
|
+
# @since 3.4.0
|
398
|
+
# @since 4.1.0 {#info} is now a {HeartbeatInfo}
|
381
399
|
class HeartbeatAckChunk < HeartbeatChunk
|
382
400
|
def initialize(options={})
|
383
401
|
options[:type] = BaseChunk::TYPES['HEARTBEAT_ACK'] unless options.key?(:type)
|
@@ -398,24 +416,26 @@ module PacketGen
|
|
398
416
|
# @author Sylvain Daubert
|
399
417
|
class ErrorChunk < BaseChunk
|
400
418
|
# @!attribute error_causes
|
401
|
-
#
|
402
|
-
|
419
|
+
# Causes for this error chunk
|
420
|
+
# @return [ArrayOfError]
|
421
|
+
define_attr :error_causes, ArrayOfError
|
403
422
|
|
404
423
|
def initialize(options={})
|
405
424
|
options[:type] = BaseChunk::TYPES['ERROR'] unless options.key?(:type)
|
406
425
|
super
|
407
426
|
end
|
408
427
|
|
409
|
-
# Calculate lengths, including
|
428
|
+
# Calculate lengths, including causes ones.
|
410
429
|
# @return [void]
|
411
430
|
def calc_length
|
412
431
|
error_causes.each(&:calc_length)
|
413
432
|
super
|
414
433
|
end
|
415
434
|
|
435
|
+
# Get human-readable description
|
416
436
|
# @return [::String]
|
417
437
|
def to_human
|
418
|
-
str =
|
438
|
+
str = "<chunk:#{human_type}"
|
419
439
|
flags_str = flags_to_human
|
420
440
|
str << ",flags:#{flags_str}" unless flags_str.empty?
|
421
441
|
str << ",causes:#{error_causes.map(&:to_human).join(',')}" unless error_causes.empty?
|
@@ -435,9 +455,11 @@ module PacketGen
|
|
435
455
|
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
436
456
|
# @author Sylvain Daubert
|
437
457
|
class AbortChunk < ErrorChunk
|
458
|
+
remove_attr :flags
|
438
459
|
# @!attribute flag_t
|
439
|
-
#
|
440
|
-
|
460
|
+
# Reflecting bit
|
461
|
+
# @return [Integer]
|
462
|
+
define_bit_attr_after :type, :flags, flag_res: 7, flag_t: 1
|
441
463
|
|
442
464
|
def initialize(options={})
|
443
465
|
options[:type] = BaseChunk::TYPES['ABORT'] unless options.key?(:type)
|
@@ -464,7 +486,7 @@ module PacketGen
|
|
464
486
|
# @!attribute cstn_ack
|
465
487
|
# 32-bit cumulative TSN ack
|
466
488
|
# @return [Integer]
|
467
|
-
|
489
|
+
define_attr :ctsn_ack, BinStruct::Int32
|
468
490
|
|
469
491
|
def initialize(options={})
|
470
492
|
options[:type] = BaseChunk::TYPES['SHUTDOWN'] unless options.key?(:type)
|
@@ -500,8 +522,9 @@ module PacketGen
|
|
500
522
|
# @author Sylvain Daubert
|
501
523
|
class CookieEchoChunk < BaseChunk
|
502
524
|
# @!attribute cookie
|
525
|
+
# Cookie value
|
503
526
|
# @return [String]
|
504
|
-
|
527
|
+
define_attr :cookie, BinStruct::String
|
505
528
|
|
506
529
|
def initialize(options={})
|
507
530
|
options[:type] = BaseChunk::TYPES['COOKIE_ECHO'] unless options.key?(:type)
|
@@ -532,9 +555,10 @@ module PacketGen
|
|
532
555
|
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
533
556
|
# @author Sylvain Daubert
|
534
557
|
class ShutdownCompleteChunk < BaseChunk
|
558
|
+
remove_attr :flags
|
535
559
|
# @!attribute flag_t
|
536
|
-
# @return [
|
537
|
-
|
560
|
+
# @return [Integer]
|
561
|
+
define_bit_attr_after :type, :flags, flag_res: 7, flag_t: 1
|
538
562
|
|
539
563
|
def initialize(options={})
|
540
564
|
options[:type] = BaseChunk::TYPES['SHUTDOWN_COMPLETE'] unless options.key?(:type)
|