packetgen 4.0.0 → 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 (105) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/packetgen/deprecation.rb +7 -1
  4. data/lib/packetgen/header/arp.rb +6 -7
  5. data/lib/packetgen/header/asn1_base.rb +2 -1
  6. data/lib/packetgen/header/base.rb +27 -24
  7. data/lib/packetgen/header/bootp.rb +14 -14
  8. data/lib/packetgen/header/dhcp/option.rb +8 -8
  9. data/lib/packetgen/header/dhcp/options.rb +2 -2
  10. data/lib/packetgen/header/dhcp.rb +6 -7
  11. data/lib/packetgen/header/dhcpv6/duid.rb +1 -1
  12. data/lib/packetgen/header/dhcpv6/option.rb +37 -15
  13. data/lib/packetgen/header/dhcpv6/options.rb +3 -3
  14. data/lib/packetgen/header/dhcpv6/relay.rb +1 -0
  15. data/lib/packetgen/header/dhcpv6.rb +13 -14
  16. data/lib/packetgen/header/dns/name.rb +9 -8
  17. data/lib/packetgen/header/dns/opt.rb +3 -0
  18. data/lib/packetgen/header/dns/option.rb +7 -7
  19. data/lib/packetgen/header/dns/qdsection.rb +2 -2
  20. data/lib/packetgen/header/dns/question.rb +1 -0
  21. data/lib/packetgen/header/dns/rrsection.rb +2 -2
  22. data/lib/packetgen/header/dns.rb +76 -60
  23. data/lib/packetgen/header/dot11/control.rb +5 -5
  24. data/lib/packetgen/header/dot11/data.rb +11 -10
  25. data/lib/packetgen/header/dot11/element.rb +1 -1
  26. data/lib/packetgen/header/dot11/management.rb +18 -15
  27. data/lib/packetgen/header/dot11/sub_mngt.rb +22 -21
  28. data/lib/packetgen/header/dot11.rb +38 -38
  29. data/lib/packetgen/header/dot1q.rb +5 -4
  30. data/lib/packetgen/header/dot1x.rb +8 -8
  31. data/lib/packetgen/header/eap/fast.rb +3 -3
  32. data/lib/packetgen/header/eap/md5.rb +11 -3
  33. data/lib/packetgen/header/eap/tls.rb +9 -8
  34. data/lib/packetgen/header/eap/ttls.rb +13 -10
  35. data/lib/packetgen/header/eap.rb +58 -33
  36. data/lib/packetgen/header/eth.rb +26 -12
  37. data/lib/packetgen/header/gre.rb +26 -2
  38. data/lib/packetgen/header/http/headers.rb +6 -5
  39. data/lib/packetgen/header/http/request.rb +24 -16
  40. data/lib/packetgen/header/http/response.rb +22 -15
  41. data/lib/packetgen/header/icmp.rb +10 -10
  42. data/lib/packetgen/header/icmpv6.rb +10 -9
  43. data/lib/packetgen/header/igmp.rb +21 -10
  44. data/lib/packetgen/header/igmpv3/group_record.rb +7 -2
  45. data/lib/packetgen/header/igmpv3/mq.rb +1 -1
  46. data/lib/packetgen/header/igmpv3/mr.rb +1 -1
  47. data/lib/packetgen/header/igmpv3.rb +11 -10
  48. data/lib/packetgen/header/ip/addr.rb +6 -2
  49. data/lib/packetgen/header/ip/option.rb +18 -5
  50. data/lib/packetgen/header/ip.rb +52 -35
  51. data/lib/packetgen/header/ipv6/addr.rb +14 -13
  52. data/lib/packetgen/header/ipv6/extension.rb +9 -7
  53. data/lib/packetgen/header/ipv6/hop_by_hop.rb +26 -7
  54. data/lib/packetgen/header/ipv6.rb +31 -22
  55. data/lib/packetgen/header/llc.rb +20 -13
  56. data/lib/packetgen/header/mdns.rb +9 -2
  57. data/lib/packetgen/header/mld.rb +11 -9
  58. data/lib/packetgen/header/mldv2/mcast_address_record.rb +6 -1
  59. data/lib/packetgen/header/mldv2/mlq.rb +8 -8
  60. data/lib/packetgen/header/mldv2/mlr.rb +4 -4
  61. data/lib/packetgen/header/mldv2.rb +1 -1
  62. data/lib/packetgen/header/ospfv2/db_description.rb +10 -10
  63. data/lib/packetgen/header/ospfv2/hello.rb +11 -10
  64. data/lib/packetgen/header/ospfv2/ls_ack.rb +5 -6
  65. data/lib/packetgen/header/ospfv2/ls_request.rb +7 -6
  66. data/lib/packetgen/header/ospfv2/ls_update.rb +7 -7
  67. data/lib/packetgen/header/ospfv2/lsa.rb +33 -10
  68. data/lib/packetgen/header/ospfv2/lsa_header.rb +3 -2
  69. data/lib/packetgen/header/ospfv2.rb +31 -26
  70. data/lib/packetgen/header/ospfv3/db_description.rb +12 -13
  71. data/lib/packetgen/header/ospfv3/hello.rb +10 -9
  72. data/lib/packetgen/header/ospfv3/ipv6_prefix.rb +6 -2
  73. data/lib/packetgen/header/ospfv3/ls_ack.rb +5 -6
  74. data/lib/packetgen/header/ospfv3/ls_request.rb +10 -10
  75. data/lib/packetgen/header/ospfv3/ls_update.rb +7 -7
  76. data/lib/packetgen/header/ospfv3/lsa.rb +23 -9
  77. data/lib/packetgen/header/ospfv3/lsa_header.rb +3 -2
  78. data/lib/packetgen/header/ospfv3.rb +38 -34
  79. data/lib/packetgen/header/sctp/chunk.rb +38 -17
  80. data/lib/packetgen/header/sctp/error.rb +169 -197
  81. data/lib/packetgen/header/sctp/padded32.rb +3 -3
  82. data/lib/packetgen/header/sctp/parameter.rb +85 -132
  83. data/lib/packetgen/header/sctp.rb +14 -3
  84. data/lib/packetgen/header/snmp.rb +108 -7
  85. data/lib/packetgen/header/tcp/option.rb +7 -0
  86. data/lib/packetgen/header/tcp/options.rb +11 -3
  87. data/lib/packetgen/header/tcp.rb +33 -26
  88. data/lib/packetgen/header/tftp.rb +16 -10
  89. data/lib/packetgen/header/udp.rb +15 -13
  90. data/lib/packetgen/header.rb +19 -13
  91. data/lib/packetgen/headerable.rb +9 -3
  92. data/lib/packetgen/inspect.rb +2 -7
  93. data/lib/packetgen/packet.rb +94 -36
  94. data/lib/packetgen/pcapng/block.rb +2 -1
  95. data/lib/packetgen/pcapng/file.rb +41 -14
  96. data/lib/packetgen/pcapng/idb.rb +2 -1
  97. data/lib/packetgen/pcapng/shb.rb +2 -1
  98. data/lib/packetgen/pcapng/spb.rb +1 -1
  99. data/lib/packetgen/pcapng.rb +2 -0
  100. data/lib/packetgen/proto.rb +4 -0
  101. data/lib/packetgen/unknown_packet.rb +3 -3
  102. data/lib/packetgen/utils.rb +2 -1
  103. data/lib/packetgen/version.rb +1 -1
  104. data/lib/packetgen.rb +8 -2
  105. metadata +4 -4
@@ -9,31 +9,18 @@
9
9
  module PacketGen
10
10
  module Header
11
11
  class SCTP
12
- # Common methods to all error causes
13
- # @author Sylvain Daubert
14
- module ErrorMixin
15
- include Padded32
16
-
17
- # Get error name
18
- # @return [String]
19
- def error_name
20
- self.class.name.split('::').last.delete_suffix('Error')
21
- end
22
-
23
- # @return [String]
24
- def to_human
25
- "<#{error_name}: #{value}>"
26
- end
27
- end
28
-
12
+ # @!parse
13
+ # # Base class/factory for {AbortChunk} and {ErrorChunk} error causes
14
+ # # @author LemonTree55
15
+ # # @since 3.4.0
16
+ # # @since 4.1.0 No more include +ErrorMixin+
17
+ # class Error < BinStruct::AbstractTLV; end
29
18
  Error = BinStruct::AbstractTLV.create(type_class: BinStruct::Int16Enum,
30
19
  length_class: BinStruct::Int16,
31
20
  attr_in_length: 'TLV')
32
21
 
33
- # Base class/factory for {AbortChunk} and {ErrorChunk} error causes
34
- # @author Sylvain Daubert
35
22
  class Error
36
- include ErrorMixin
23
+ include Padded32
37
24
 
38
25
  # Error Causes/Types
39
26
  TYPES = {
@@ -52,18 +39,33 @@ module PacketGen
52
39
  'ProtocolViolation' => 13
53
40
  }.freeze
54
41
 
42
+ # Get error name
43
+ # @return [String]
44
+ def error_name
45
+ self.class.name.split('::').last.delete_suffix('Error')
46
+ end
47
+
48
+ # Get human-readable description
49
+ # @return [String]
50
+ def to_human
51
+ "<#{error_name}: #{value}>"
52
+ end
53
+
54
+ # Set +#value+ from +value+
55
55
  # @param [Object] value
56
+ # @return self
56
57
  def from_human(value)
57
58
  if value.is_a?(self[:value].class)
58
59
  self[:value] = value
59
60
  else
60
61
  self[:value].from_human(value)
61
62
  end
63
+ self
62
64
  end
63
65
  end
64
66
  Error.define_type_enum(Error::TYPES)
65
67
 
66
- # Handle array of {Error} and {ErrorMixin} classes.
68
+ # Handle array of {Error} classes.
67
69
  # @author Sylvain Daubert
68
70
  class ArrayOfError < BinStruct::Array
69
71
  set_of Error
@@ -79,20 +81,36 @@ module PacketGen
79
81
  end
80
82
 
81
83
  def real_klass_name(type_name)
82
- type_name + 'Error' # rubocop:disable Style/StringConcatenation
84
+ type_name + 'Error'
83
85
  end
84
86
  end
85
87
 
86
- InvalidStreamIdError = BinStruct::AbstractTLV.create(type_class: BinStruct::Int16Enum,
87
- length_class: BinStruct::Int16,
88
- value_class: BinStruct::Int32,
89
- attr_in_length: 'TLV')
88
+ # @!parse
89
+ # # Base class for error without value.
90
+ # # @author LemonTree55
91
+ # # @since 4.1.0 Derived from {Error}
92
+ # class NoValueError < Error; end
93
+ NoValueError = Error.derive
90
94
 
91
- # InvalidStreamIdentifier error
92
- # @author Sylvain Daubert
93
- class InvalidStreamIdError
94
- include ErrorMixin
95
+ class NoValueError
96
+ # Get human-readable string
97
+ # @return [String]
98
+ def to_human
99
+ "<#{error_name}>"
100
+ end
101
+ end
102
+
103
+ # @!parse
104
+ # # InvalidStreamIdentifier error
105
+ # # @author Sylvain Daubert
106
+ # # @author LemonTree55
107
+ # # @since 3.4.0
108
+ # # @since 4.1.0 Derived from {Error}
109
+ # class InvalidStreamIdError < Error; end
110
+ InvalidStreamIdError = Error.derive(value_class: BinStruct::Int32)
111
+ InvalidStreamIdError.define_type_default('InvalidStreamId')
95
112
 
113
+ class InvalidStreamIdError
96
114
  # Get stream Id value
97
115
  # @return [Integer]
98
116
  def stream_identifier
@@ -107,86 +125,77 @@ module PacketGen
107
125
  stream_id
108
126
  end
109
127
 
110
- # @return [::String]
128
+ # Get human-readable string
129
+ # @return [String]
111
130
  def to_human
112
131
  "<#{error_name}: #{stream_identifier}>"
113
132
  end
114
133
 
134
+ # Set +#value+ from an Integer
115
135
  # @param [Integer] val
116
136
  def from_human(val)
117
137
  super
118
138
  self.value <<= 16 if self[:value] < BinStruct::Int
119
139
  end
120
140
  end
121
- InvalidStreamIdError.define_type_enum(Error::TYPES)
122
- InvalidStreamIdError.define_type_default('InvalidStreamId')
123
141
 
124
- MissingMandatoryParameterError = BinStruct::AbstractTLV.create(type_class: BinStruct::Int16Enum,
125
- length_class: BinStruct::Int16,
126
- value_class: BinStruct::ArrayOfInt16,
127
- attr_in_length: 'TLV')
142
+ # @!parse
143
+ # # MissingMandatoryParameter error. Indicate that one or more
144
+ # # mandatory TLV parameters are missing in a received {InitChunk}
145
+ # # or {InitAckChunk}.
146
+ # # @author Sylvain Daubert
147
+ # # @author LemonTree55
148
+ # # @since 3.4.0
149
+ # # @since 4.1.0 Derived from {Error}
150
+ # class MissingMandatoryParameterError < Error; end
151
+ MissingMandatoryParameterError = Error.derive(value_class: BinStruct::ArrayOfInt16)
152
+ MissingMandatoryParameterError.define_type_default('MissingMandatoryParameter')
128
153
 
129
- # MissingMandatoryParameter error. Indicate that one or more
130
- # mandatory TLV parameters are missing in a received {InitChunk}
131
- # or {InitAckChunk}.
132
- # @author Sylvain Daubert
133
154
  class MissingMandatoryParameterError
134
- include ErrorMixin
135
-
136
- # @return [::String]
155
+ # Get human-readable string
156
+ # @return [String]
137
157
  def to_human
138
158
  "<#{error_name}: #{self[:value].to_human}>"
139
159
  end
140
160
  end
141
- MissingMandatoryParameterError.define_type_enum(Error::TYPES)
142
- MissingMandatoryParameterError.define_type_default('MissingMandatoryParameter')
143
-
144
- StaleCookieError = BinStruct::AbstractTLV.create(type_class: BinStruct::Int16Enum,
145
- length_class: BinStruct::Int16,
146
- value_class: BinStruct::Int32,
147
- attr_in_length: 'TLV')
148
161
 
149
- # StaleCookie error. Indicates the receipt of a valid State Cookie that
150
- # has expired.
151
- # @author Sylvain Daubert
152
- class StaleCookieError
153
- include ErrorMixin
154
- end
155
- StaleCookieError.define_type_enum(Error::TYPES)
162
+ # @!parse
163
+ # # StaleCookie error. Indicates the receipt of a valid State Cookie that
164
+ # # has expired.
165
+ # # @author Sylvain Daubert
166
+ # # @author LemonTree55
167
+ # # @since 3.4.0
168
+ # # @since 4.1.0 Derived from {Error}
169
+ # class StaleCookieError < Error; end
170
+ StaleCookieError = Error.derive(value_class: BinStruct::Int32)
156
171
  StaleCookieError.define_type_default('StaleCookie')
157
172
 
158
- OutOfResourceError = BinStruct::AbstractTLV.create(type_class: BinStruct::Int16Enum,
159
- length_class: BinStruct::Int16,
160
- attr_in_length: 'TLV')
161
-
162
- # Out of ressource error. Indicates that the sender is out of resource.
163
- # @author Sylvain Daubert
164
- class OutOfResourceError
165
- include ErrorMixin
166
-
167
- # @return [::String]
168
- def to_human
169
- "<#{error_name}>"
170
- end
171
- end
172
- OutOfResourceError.define_type_enum(Error::TYPES)
173
+ # @!parse
174
+ # # Out of ressource error. Indicates that the sender is out of resource.
175
+ # # @author LemonTree55
176
+ # # @since 3.4.0
177
+ # # @since 4.1.0 Derived from {Error}
178
+ # class OutOfResourceError < NoValueError; end
179
+ OutOfResourceError = NoValueError.derive
173
180
  OutOfResourceError.define_type_default('OutOfResource')
174
181
 
175
- UnresolvableAddressError = BinStruct::AbstractTLV.create(type_class: BinStruct::Int16Enum,
176
- length_class: BinStruct::Int16,
177
- value_class: Parameter,
178
- attr_in_length: 'TLV')
182
+ # @!parse
183
+ # # Unresolvable address error. Indicates that the sender is not able to resolve the specified
184
+ # # address parameter (type of address is not supported)
185
+ # # @author Sylvain Daubert
186
+ # # @author LemonTree55
187
+ # # @since 3.4.0
188
+ # # @since 4.1.0 Derived from {Error}
189
+ # class UnresolvableAddressError < Error; end
190
+ UnresolvableAddressError = Error.derive(value_class: Parameter)
191
+ UnresolvableAddressError.define_type_default('UnresolvableAddress')
179
192
 
180
- # Out of ressource error. Indicates that the sender is out of resource.
181
- # @author Sylvain Daubert
182
193
  class UnresolvableAddressError
183
- include ErrorMixin
184
-
185
- # Set +value+ by accepting {ParameterMixin} classes.
186
- # @param [ParameterMixin] val
187
- # @return [ParameterMixin]
194
+ # Set +value+ by accepting {Parameter} classes.
195
+ # @param [Parameter] val
196
+ # @return [Parameter]
188
197
  def value=(val)
189
- if val.is_a?(ParameterMixin)
198
+ if val.is_a?(Parameter)
190
199
  self[:value] = val
191
200
  calc_length
192
201
  val
@@ -195,152 +204,115 @@ module PacketGen
195
204
  end
196
205
  end
197
206
 
198
- # @return [::String]
207
+ # Get human-readable string
208
+ # @return [String]
199
209
  def to_human
200
210
  "<#{error_name}: #{self[:value].to_human}>"
201
211
  end
202
212
  end
203
- UnresolvableAddressError.define_type_enum(Error::TYPES)
204
- UnresolvableAddressError.define_type_default('UnresolvableAddress')
205
213
 
206
- UnrecognizedChunkTypeError = BinStruct::AbstractTLV.create(type_class: BinStruct::Int16Enum,
207
- length_class: BinStruct::Int16,
208
- value_class: BaseChunk,
209
- attr_in_length: 'TLV')
214
+ # @!parse
215
+ # # Unrecognized chunk type error. The receiver does not understand the chunk and the upper bits of the 'Chunk Type'
216
+ # # are set to 01 or 11.
217
+ # # @author Sylvain Daubert
218
+ # # @author LemonTree55
219
+ # # @since 3.4.0
220
+ # # @since 4.1.0 Derived from {Error}
221
+ # class UnrecognizedChunkTypeError < Error; end
222
+ UnrecognizedChunkTypeError = Error.derive(value_class: BaseChunk)
223
+ UnrecognizedChunkTypeError.define_type_default('UnrecognizedChunkType')
210
224
 
211
- # Unrecognized chunk type error. The receiver does not understand the chunk and the upper bits of the 'Chunk Type'
212
- # are set to 01 or 11.
213
- # @author Sylvain Daubert
214
225
  class UnrecognizedChunkTypeError
215
- include ErrorMixin
216
-
217
- # @return [::String]
226
+ # Get human-readable string
227
+ # @return [String]
218
228
  def to_human
219
229
  "<#{error_name}: #{self[:value].to_human}>"
220
230
  end
221
231
  end
222
- UnrecognizedChunkTypeError.define_type_enum(Error::TYPES)
223
- UnrecognizedChunkTypeError.define_type_default('UnrecognizedChunkType')
224
-
225
- InvalidMandatoryParameterError = BinStruct::AbstractTLV.create(type_class: BinStruct::Int16Enum,
226
- length_class: BinStruct::Int16,
227
- attr_in_length: 'TLV')
228
232
 
229
- # Invalid mandatory parameter error. Returned to the originator of an INIT or INIT ACK chunk when one of the
230
- # mandatory parameters is set to an invalid value.
231
- # @author Sylvain Daubert
232
- class InvalidMandatoryParameterError
233
- include ErrorMixin
234
-
235
- # @return [::String]
236
- def to_human
237
- "<#{error_name}>"
238
- end
239
- end
240
- InvalidMandatoryParameterError.define_type_enum(Error::TYPES)
233
+ # @!parse
234
+ # # Invalid mandatory parameter error. Returned to the originator of an INIT or INIT ACK chunk when one of the
235
+ # # mandatory parameters is set to an invalid value.
236
+ # # @author LemonTree55
237
+ # # @since 3.4.0
238
+ # # @since 4.1.0 Derived from {Error}
239
+ # class InvalidMandatoryParameterError < NoValueError; end
240
+ InvalidMandatoryParameterError = NoValueError.derive
241
241
  InvalidMandatoryParameterError.define_type_default('InvalidMandatoryParameter')
242
242
 
243
- UnrecognizedParametersError = BinStruct::AbstractTLV.create(type_class: BinStruct::Int16Enum,
244
- length_class: BinStruct::Int16,
245
- value_class: ArrayOfParameter,
246
- attr_in_length: 'TLV')
243
+ # @!parse
244
+ # # Unrecognized parameters error. Returned to the originator of the INIT ACK chunk if the receiver does not
245
+ # # recognize one or more Optional TLV parameters in the INIT ACK chunk.
246
+ # # @author Sylvain Daubert
247
+ # # @author LemonTree55
248
+ # # @since 3.4.0
249
+ # # @since 4.1.0 Derived from {Error}
250
+ # class UnrecognizedParametersError < Error; end
251
+ UnrecognizedParametersError = Error.derive(value_class: ArrayOfParameter)
252
+ UnrecognizedParametersError.define_type_default('UnrecognizedParameters')
247
253
 
248
- # Unrecognized parameters error. Returned to the originator of the INIT ACK chunk if the receiver does not
249
- # recognize one or more Optional TLV parameters in the INIT ACK chunk.
250
- # @author Sylvain Daubert
251
254
  class UnrecognizedParametersError
252
- include ErrorMixin
253
-
254
- # @return [::String]
255
+ # Get human-readable string
256
+ # @return [String]
255
257
  def to_human
256
258
  "<#{error_name}: #{self[:value].to_human}>"
257
259
  end
258
260
  end
259
- UnrecognizedParametersError.define_type_enum(Error::TYPES)
260
- UnrecognizedParametersError.define_type_default('UnrecognizedParameters')
261
261
 
262
- NoUserDataError = BinStruct::AbstractTLV.create(type_class: BinStruct::Int16Enum,
263
- length_class: BinStruct::Int16,
264
- value_class: BinStruct::Int32,
265
- attr_in_length: 'TLV')
266
-
267
- # No user data error. Returned when a received {DataChunk} was received with no data.
268
- # @author Sylvain Daubert
269
- class NoUserDataError
270
- include ErrorMixin
271
- end
272
- NoUserDataError.define_type_enum(Error::TYPES)
262
+ # @!parse
263
+ # # No user data error. Returned when a received {DataChunk} was received with no data.
264
+ # # @author Sylvain Daubert
265
+ # # @author LemonTree55
266
+ # # @since 3.4.0
267
+ # # @since 4.1.0 Derived from {Error}
268
+ # class NoUserDataError < Error; end
269
+ NoUserDataError = Error.derive(value_class: BinStruct::Int32)
273
270
  NoUserDataError.define_type_default('NoUserData')
274
271
 
275
- CookieReceivedWhileShuttingDownError = BinStruct::AbstractTLV.create(type_class: BinStruct::Int16Enum,
276
- length_class: BinStruct::Int16,
277
- attr_in_length: 'TLV')
278
-
279
- # Cookie received while shutting down error.
280
- # A COOKIE ECHO chunk was received while the endpoint was in the SHUTDOWN-ACK-SENT state.
281
- # @author Sylvain Daubert
282
- class CookieReceivedWhileShuttingDownError
283
- include ErrorMixin
284
-
285
- # @return [::String]
286
- def to_human
287
- "<#{error_name}>"
288
- end
289
- end
290
- CookieReceivedWhileShuttingDownError.define_type_enum(Error::TYPES)
272
+ # @!parse
273
+ # # Cookie received while shutting down error.
274
+ # # A COOKIE ECHO chunk was received while the endpoint was in the SHUTDOWN-ACK-SENT state.
275
+ # # @author LemonTree55
276
+ # # @since 3.4.0
277
+ # # @since 4.1.0 Derived from {Error}
278
+ # class CookieReceivedWhileShuttingDownError < NoValueError; end
279
+ CookieReceivedWhileShuttingDownError = NoValueError.derive
291
280
  CookieReceivedWhileShuttingDownError.define_type_default('CookieReceivedWhileShuttingDown')
292
281
 
293
- RestartAssociationWithNewAddressError = BinStruct::AbstractTLV.create(type_class: BinStruct::Int16Enum,
294
- length_class: BinStruct::Int16,
295
- value_class: ArrayOfParameter,
296
- attr_in_length: 'TLV')
282
+ # @!parse
283
+ # # INIT added an address out of association.
284
+ # # @author Sylvain Daubert
285
+ # # @author LemonTree55
286
+ # # @since 3.4.0
287
+ # # @since 4.1.0 Derived from {Error}
288
+ # class RestartAssociationWithNewAddressError < Error; end
289
+ RestartAssociationWithNewAddressError = Error.derive(value_class: ArrayOfParameter)
290
+ RestartAssociationWithNewAddressError.define_type_default('RestartAssociationWithNewAddress')
297
291
 
298
- # Cookie received while shutting down error.
299
- # A COOKIE ECHO chunk was received while the endpoint was in the SHUTDOWN-ACK-SENT state.
300
- # @author Sylvain Daubert
301
292
  class RestartAssociationWithNewAddressError
302
- include ErrorMixin
303
-
304
- # @return [::String]
293
+ # Get human-readable string
294
+ # @return [String]
305
295
  def to_human
306
296
  "<#{error_name}: #{self[:value].to_human}>"
307
297
  end
308
298
  end
309
- RestartAssociationWithNewAddressError.define_type_enum(Error::TYPES)
310
- RestartAssociationWithNewAddressError.define_type_default('RestartAssociationWithNewAddress')
311
-
312
- UserInitiatedAbortError = BinStruct::AbstractTLV.create(type_class: BinStruct::Int16Enum,
313
- length_class: BinStruct::Int16,
314
- attr_in_length: 'TLV')
315
299
 
316
- # User-Initiated abort error.
317
- # @author Sylvain Daubert
318
- class UserInitiatedAbortError
319
- include ErrorMixin
320
-
321
- # @return [::String]
322
- def to_human
323
- "<#{error_name}>"
324
- end
325
- end
326
- UserInitiatedAbortError.define_type_enum(Error::TYPES)
300
+ # @!parse
301
+ # # User-Initiated abort error.
302
+ # # @author LemonTree55
303
+ # # @since 3.4.0
304
+ # # @since 4.1.0 Derived from {Error}
305
+ # class UserInitiatedAbortError < NoValueError; end
306
+ UserInitiatedAbortError = NoValueError.derive
327
307
  UserInitiatedAbortError.define_type_default('UserInitiatedAbort')
328
308
 
329
- ProtocolViolationError = BinStruct::AbstractTLV.create(type_class: BinStruct::Int16Enum,
330
- length_class: BinStruct::Int16,
331
- attr_in_length: 'TLV')
332
-
333
- # Protocol violation error.
334
- # @author Sylvain Daubert
335
- class ProtocolViolationError
336
- include ErrorMixin
337
-
338
- # @return [::String]
339
- def to_human
340
- "<#{error_name}>"
341
- end
342
- end
343
- ProtocolViolationError.define_type_enum(Error::TYPES)
309
+ # @!parse
310
+ # # User-Initiated abort error.
311
+ # # @author LemonTree55
312
+ # # @since 3.4.0
313
+ # # @since 4.1.0 Derived from {Error}
314
+ # class ProtocolViolationError < NoValueError; end
315
+ ProtocolViolationError = NoValueError.derive
344
316
  ProtocolViolationError.define_type_default('ProtocolViolation')
345
317
  end
346
318
  end
@@ -11,15 +11,15 @@ module PacketGen
11
11
  class SCTP
12
12
  # Mixin to handle 32-bit padding in SCTP classes
13
13
  module Padded32
14
- # Handle padding
15
- # @param [Bool] no_padding
14
+ # Generate binary string and handle padding
15
+ # @param [Bool] no_padding Do not append padding when generating binary string.
16
16
  # @return [::String]
17
17
  def to_s(no_padding: false)
18
18
  s = super()
19
19
  return s if no_padding
20
20
 
21
21
  padlen = -(s.size % -4)
22
- s << force_binary("\x00" * padlen)
22
+ s << "\x00".b * padlen
23
23
  end
24
24
 
25
25
  # Say if binary string is padded