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.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +38 -22
  3. data/lib/packetgen/capture.rb +2 -2
  4. data/lib/packetgen/config.rb +0 -1
  5. data/lib/packetgen/deprecation.rb +14 -8
  6. data/lib/packetgen/header/arp.rb +17 -18
  7. data/lib/packetgen/header/asn1_base.rb +2 -1
  8. data/lib/packetgen/header/base.rb +42 -40
  9. data/lib/packetgen/header/bootp.rb +35 -37
  10. data/lib/packetgen/header/dhcp/option.rb +21 -21
  11. data/lib/packetgen/header/dhcp/options.rb +3 -3
  12. data/lib/packetgen/header/dhcp.rb +8 -9
  13. data/lib/packetgen/header/dhcpv6/duid.rb +16 -16
  14. data/lib/packetgen/header/dhcpv6/option.rb +83 -61
  15. data/lib/packetgen/header/dhcpv6/options.rb +4 -4
  16. data/lib/packetgen/header/dhcpv6/relay.rb +6 -5
  17. data/lib/packetgen/header/dhcpv6.rb +17 -18
  18. data/lib/packetgen/header/dns/name.rb +21 -16
  19. data/lib/packetgen/header/dns/opt.rb +5 -2
  20. data/lib/packetgen/header/dns/option.rb +14 -14
  21. data/lib/packetgen/header/dns/qdsection.rb +3 -3
  22. data/lib/packetgen/header/dns/question.rb +7 -8
  23. data/lib/packetgen/header/dns/rr.rb +56 -43
  24. data/lib/packetgen/header/dns/rrsection.rb +6 -6
  25. data/lib/packetgen/header/dns.rb +103 -90
  26. data/lib/packetgen/header/dot11/control.rb +12 -12
  27. data/lib/packetgen/header/dot11/data.rb +25 -24
  28. data/lib/packetgen/header/dot11/element.rb +4 -4
  29. data/lib/packetgen/header/dot11/management.rb +21 -18
  30. data/lib/packetgen/header/dot11/sub_mngt.rb +40 -53
  31. data/lib/packetgen/header/dot11.rb +117 -122
  32. data/lib/packetgen/header/dot1q.rb +12 -13
  33. data/lib/packetgen/header/dot1x.rb +13 -13
  34. data/lib/packetgen/header/eap/fast.rb +4 -4
  35. data/lib/packetgen/header/eap/md5.rb +16 -8
  36. data/lib/packetgen/header/eap/tls.rb +18 -19
  37. data/lib/packetgen/header/eap/ttls.rb +22 -21
  38. data/lib/packetgen/header/eap.rb +73 -48
  39. data/lib/packetgen/header/eth.rb +41 -27
  40. data/lib/packetgen/header/gre.rb +33 -11
  41. data/lib/packetgen/header/http/headers.rb +7 -6
  42. data/lib/packetgen/header/http/request.rb +38 -29
  43. data/lib/packetgen/header/http/response.rb +35 -27
  44. data/lib/packetgen/header/http/verbs.rb +1 -3
  45. data/lib/packetgen/header/icmp.rb +14 -14
  46. data/lib/packetgen/header/icmpv6.rb +10 -9
  47. data/lib/packetgen/header/igmp.rb +26 -15
  48. data/lib/packetgen/header/igmpv3/group_record.rb +18 -13
  49. data/lib/packetgen/header/igmpv3/mq.rb +16 -18
  50. data/lib/packetgen/header/igmpv3/mr.rb +5 -5
  51. data/lib/packetgen/header/igmpv3.rb +12 -11
  52. data/lib/packetgen/header/ip/addr.rb +19 -15
  53. data/lib/packetgen/header/ip/option.rb +47 -36
  54. data/lib/packetgen/header/ip/options.rb +1 -1
  55. data/lib/packetgen/header/ip.rb +77 -95
  56. data/lib/packetgen/header/ipv6/addr.rb +28 -27
  57. data/lib/packetgen/header/ipv6/extension.rb +13 -11
  58. data/lib/packetgen/header/ipv6/hop_by_hop.rb +32 -13
  59. data/lib/packetgen/header/ipv6.rb +42 -35
  60. data/lib/packetgen/header/llc.rb +28 -21
  61. data/lib/packetgen/header/mdns.rb +10 -3
  62. data/lib/packetgen/header/mld.rb +15 -13
  63. data/lib/packetgen/header/mldv2/mcast_address_record.rb +17 -12
  64. data/lib/packetgen/header/mldv2/mlq.rb +22 -24
  65. data/lib/packetgen/header/mldv2/mlr.rb +8 -8
  66. data/lib/packetgen/header/mldv2.rb +1 -1
  67. data/lib/packetgen/header/ospfv2/db_description.rb +17 -18
  68. data/lib/packetgen/header/ospfv2/hello.rb +18 -17
  69. data/lib/packetgen/header/ospfv2/ls_ack.rb +6 -7
  70. data/lib/packetgen/header/ospfv2/ls_request.rb +14 -13
  71. data/lib/packetgen/header/ospfv2/ls_update.rb +9 -9
  72. data/lib/packetgen/header/ospfv2/lsa.rb +79 -60
  73. data/lib/packetgen/header/ospfv2/lsa_header.rb +12 -11
  74. data/lib/packetgen/header/ospfv2.rb +49 -46
  75. data/lib/packetgen/header/ospfv3/db_description.rb +20 -22
  76. data/lib/packetgen/header/ospfv3/hello.rb +17 -16
  77. data/lib/packetgen/header/ospfv3/ipv6_prefix.rb +22 -20
  78. data/lib/packetgen/header/ospfv3/ls_ack.rb +7 -8
  79. data/lib/packetgen/header/ospfv3/ls_request.rb +18 -18
  80. data/lib/packetgen/header/ospfv3/ls_update.rb +10 -10
  81. data/lib/packetgen/header/ospfv3/lsa.rb +62 -51
  82. data/lib/packetgen/header/ospfv3/lsa_header.rb +12 -11
  83. data/lib/packetgen/header/ospfv3.rb +54 -52
  84. data/lib/packetgen/header/sctp/chunk.rb +80 -56
  85. data/lib/packetgen/header/sctp/error.rb +174 -202
  86. data/lib/packetgen/header/sctp/padded32.rb +3 -3
  87. data/lib/packetgen/header/sctp/parameter.rb +89 -136
  88. data/lib/packetgen/header/sctp.rb +19 -8
  89. data/lib/packetgen/header/snmp.rb +108 -7
  90. data/lib/packetgen/header/tcp/option.rb +52 -39
  91. data/lib/packetgen/header/tcp/options.rb +13 -5
  92. data/lib/packetgen/header/tcp.rb +83 -65
  93. data/lib/packetgen/header/tftp.rb +31 -25
  94. data/lib/packetgen/header/udp.rb +21 -19
  95. data/lib/packetgen/header.rb +23 -18
  96. data/lib/packetgen/headerable.rb +21 -5
  97. data/lib/packetgen/inspect.rb +3 -8
  98. data/lib/packetgen/packet.rb +146 -71
  99. data/lib/packetgen/pcap.rb +15 -4
  100. data/lib/packetgen/pcapng/block.rb +20 -18
  101. data/lib/packetgen/pcapng/epb.rb +13 -15
  102. data/lib/packetgen/pcapng/file.rb +44 -111
  103. data/lib/packetgen/pcapng/idb.rb +11 -12
  104. data/lib/packetgen/pcapng/shb.rb +15 -16
  105. data/lib/packetgen/pcapng/spb.rb +9 -11
  106. data/lib/packetgen/pcapng/unknown_block.rb +6 -17
  107. data/lib/packetgen/pcapng.rb +6 -4
  108. data/lib/packetgen/pcaprub_wrapper.rb +17 -1
  109. data/lib/packetgen/proto.rb +5 -1
  110. data/lib/packetgen/unknown_packet.rb +5 -5
  111. data/lib/packetgen/utils/arp_spoofer.rb +18 -19
  112. data/lib/packetgen/utils.rb +4 -3
  113. data/lib/packetgen/version.rb +1 -1
  114. data/lib/packetgen.rb +12 -5
  115. metadata +29 -38
  116. data/lib/packetgen/types/abstract_tlv.rb +0 -278
  117. data/lib/packetgen/types/array.rb +0 -287
  118. data/lib/packetgen/types/cstring.rb +0 -109
  119. data/lib/packetgen/types/enum.rb +0 -171
  120. data/lib/packetgen/types/fieldable.rb +0 -66
  121. data/lib/packetgen/types/fields.rb +0 -622
  122. data/lib/packetgen/types/int.rb +0 -473
  123. data/lib/packetgen/types/int_string.rb +0 -102
  124. data/lib/packetgen/types/length_from.rb +0 -54
  125. data/lib/packetgen/types/oui.rb +0 -52
  126. data/lib/packetgen/types/string.rb +0 -97
  127. data/lib/packetgen/types/tlv.rb +0 -161
  128. 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
- # BaseChunk class, defining SCTP chunk common fields
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
- define_field :type, Types::Int8Enum, enum: TYPES
45
+ define_attr :type, BinStruct::Int8Enum, enum: TYPES
46
46
  # @!attribute type
47
47
  # 8-bit SCTP chunk flags
48
48
  # @return [Integer]
49
- define_field :flags, Types::Int8
49
+ define_attr :flags, BinStruct::Int8
50
50
  # @!attribute length
51
51
  # 16-bit SCTP chunk length
52
52
  # @return [Integer]
53
- define_field :length, Types::Int16
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 = +"<chunk:#{human_type}"
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 < Types::Array
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
- define_field :body, Types::String, builder: ->(h, t) { t.new(length_from: -> { h.length - 4 }) }
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 TSN for this DATA chunk
146
+ # 32-bit Transmission Sequence Number for this DATA chunk
147
147
  # @return [Integer]
148
- define_field :tsn, Types::Int32
148
+ define_attr :tsn, BinStruct::Int32
149
149
  # @!attribute stream_id
150
150
  # 16-bit stream identifier
151
151
  # @return [Integer]
152
- define_field :stream_id, Types::Int16
152
+ define_attr :stream_id, BinStruct::Int16
153
153
  # @!attribute stream_sn
154
154
  # 16-bit stream sequence number
155
155
  # @return [Integer]
156
- define_field :stream_sn, Types::Int16
156
+ define_attr :stream_sn, BinStruct::Int16
157
157
  # @!attribute ppid
158
158
  # 32-bit payload protocol identifier
159
159
  # @return [Integer]
160
- define_field :ppid, Types::Int32
160
+ define_attr :ppid, BinStruct::Int32
161
161
  # @!attribute body
162
- # SCTP chunk value
162
+ # User data
163
163
  # @return [String]
164
- define_field :body, Types::String, builder: ->(h, t) { t.new(length_from: -> { h.length - 4 }) }
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 [Boolean]
169
+ # @return [Integer]
169
170
  # @!attribute flag_u
170
- # UNORDERED flag
171
- # @return [Boolean]
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 [Boolean]
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 [Boolean]
178
- define_bit_fields_on :flags, :flag_res, 4, :flag_i, :flag_u, :flag_b, :flag_e
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
- define_field :initiate_tag, Types::Int32
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
- define_field :a_rwnd, Types::Int32
220
+ define_attr :a_rwnd, BinStruct::Int32
220
221
  # @!attribute nos
221
222
  # 16-bit Number of Outbound Streams
222
223
  # @return [Integer]
223
- define_field :nos, Types::Int16
224
+ define_attr :nos, BinStruct::Int16
224
225
  # @!attribute nis
225
226
  # 16-bit Number of Inbound Streams
226
227
  # @return [Integer]
227
- define_field :nis, Types::Int16
228
+ define_attr :nis, BinStruct::Int16
228
229
  # @!attribute initial_tsn
229
230
  # 32-bit Initial TSN
230
231
  # @return [Integer]
231
- define_field :initial_tsn, Types::Int32
232
+ define_attr :initial_tsn, BinStruct::Int32
232
233
  # @!attribute parameters
233
234
  # List of parameters
234
235
  # @return [ArrayOfParameter]
235
- define_field :parameters, ArrayOfParameter
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 [void]
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
- # @return [::String]
250
+ # Get human-redable description.
251
+ # @return [String]
250
252
  def to_human
251
- str = +"<chunk:#{human_type}"
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
- define_field :ctsn_ack, Types::Int32
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
- define_field :a_rwnd, Types::Int32
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
- define_field :num_gap, Types::Int32
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
- define_field :num_dup_tsn, Types::Int32
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 [Types::ArrayOfInt32]
335
- define_field :gaps, Types::ArrayOfInt32
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 [Types::ArrayOfInt32]
339
- define_field :dup_tsns, Types::ArrayOfInt32
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
- # Array of Heartbeat information TLV.
361
- # @return [Types::ArrayOfInt32]
362
- define_field :info, HearbeatInfoParameter
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
- # @return [ArrayofError]
402
- define_field :error_causes, ArrayOfError
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 parameters ones.
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 = +"<chunk:#{human_type}"
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
- # @return [Boolean]
440
- define_bit_fields_on :flags, :flag_res, 7, :flag_t
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
- define_field :ctsn_ack, Types::Int32
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
- define_field :cookie, Types::String
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 [Boolean]
537
- define_bit_fields_on :flags, :flag_res, 7, :flag_t
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)