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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/packetgen/deprecation.rb +7 -1
- data/lib/packetgen/header/arp.rb +6 -7
- data/lib/packetgen/header/asn1_base.rb +2 -1
- data/lib/packetgen/header/base.rb +27 -24
- data/lib/packetgen/header/bootp.rb +14 -14
- data/lib/packetgen/header/dhcp/option.rb +8 -8
- data/lib/packetgen/header/dhcp/options.rb +2 -2
- data/lib/packetgen/header/dhcp.rb +6 -7
- data/lib/packetgen/header/dhcpv6/duid.rb +1 -1
- data/lib/packetgen/header/dhcpv6/option.rb +37 -15
- data/lib/packetgen/header/dhcpv6/options.rb +3 -3
- data/lib/packetgen/header/dhcpv6/relay.rb +1 -0
- data/lib/packetgen/header/dhcpv6.rb +13 -14
- data/lib/packetgen/header/dns/name.rb +9 -8
- data/lib/packetgen/header/dns/opt.rb +3 -0
- data/lib/packetgen/header/dns/option.rb +7 -7
- data/lib/packetgen/header/dns/qdsection.rb +2 -2
- data/lib/packetgen/header/dns/question.rb +1 -0
- data/lib/packetgen/header/dns/rrsection.rb +2 -2
- data/lib/packetgen/header/dns.rb +76 -60
- data/lib/packetgen/header/dot11/control.rb +5 -5
- data/lib/packetgen/header/dot11/data.rb +11 -10
- data/lib/packetgen/header/dot11/element.rb +1 -1
- data/lib/packetgen/header/dot11/management.rb +18 -15
- data/lib/packetgen/header/dot11/sub_mngt.rb +22 -21
- data/lib/packetgen/header/dot11.rb +38 -38
- data/lib/packetgen/header/dot1q.rb +5 -4
- data/lib/packetgen/header/dot1x.rb +8 -8
- data/lib/packetgen/header/eap/fast.rb +3 -3
- data/lib/packetgen/header/eap/md5.rb +11 -3
- data/lib/packetgen/header/eap/tls.rb +9 -8
- data/lib/packetgen/header/eap/ttls.rb +13 -10
- data/lib/packetgen/header/eap.rb +58 -33
- data/lib/packetgen/header/eth.rb +26 -12
- data/lib/packetgen/header/gre.rb +26 -2
- data/lib/packetgen/header/http/headers.rb +6 -5
- data/lib/packetgen/header/http/request.rb +24 -16
- data/lib/packetgen/header/http/response.rb +22 -15
- data/lib/packetgen/header/icmp.rb +10 -10
- data/lib/packetgen/header/icmpv6.rb +10 -9
- data/lib/packetgen/header/igmp.rb +21 -10
- data/lib/packetgen/header/igmpv3/group_record.rb +7 -2
- data/lib/packetgen/header/igmpv3/mq.rb +1 -1
- data/lib/packetgen/header/igmpv3/mr.rb +1 -1
- data/lib/packetgen/header/igmpv3.rb +11 -10
- data/lib/packetgen/header/ip/addr.rb +6 -2
- data/lib/packetgen/header/ip/option.rb +18 -5
- data/lib/packetgen/header/ip.rb +52 -35
- data/lib/packetgen/header/ipv6/addr.rb +14 -13
- data/lib/packetgen/header/ipv6/extension.rb +9 -7
- data/lib/packetgen/header/ipv6/hop_by_hop.rb +26 -7
- data/lib/packetgen/header/ipv6.rb +31 -22
- data/lib/packetgen/header/llc.rb +20 -13
- data/lib/packetgen/header/mdns.rb +9 -2
- data/lib/packetgen/header/mld.rb +11 -9
- data/lib/packetgen/header/mldv2/mcast_address_record.rb +6 -1
- data/lib/packetgen/header/mldv2/mlq.rb +8 -8
- data/lib/packetgen/header/mldv2/mlr.rb +4 -4
- data/lib/packetgen/header/mldv2.rb +1 -1
- data/lib/packetgen/header/ospfv2/db_description.rb +10 -10
- data/lib/packetgen/header/ospfv2/hello.rb +11 -10
- data/lib/packetgen/header/ospfv2/ls_ack.rb +5 -6
- data/lib/packetgen/header/ospfv2/ls_request.rb +7 -6
- data/lib/packetgen/header/ospfv2/ls_update.rb +7 -7
- data/lib/packetgen/header/ospfv2/lsa.rb +33 -10
- data/lib/packetgen/header/ospfv2/lsa_header.rb +3 -2
- data/lib/packetgen/header/ospfv2.rb +31 -26
- data/lib/packetgen/header/ospfv3/db_description.rb +12 -13
- data/lib/packetgen/header/ospfv3/hello.rb +10 -9
- data/lib/packetgen/header/ospfv3/ipv6_prefix.rb +6 -2
- data/lib/packetgen/header/ospfv3/ls_ack.rb +5 -6
- data/lib/packetgen/header/ospfv3/ls_request.rb +10 -10
- data/lib/packetgen/header/ospfv3/ls_update.rb +7 -7
- data/lib/packetgen/header/ospfv3/lsa.rb +23 -9
- data/lib/packetgen/header/ospfv3/lsa_header.rb +3 -2
- data/lib/packetgen/header/ospfv3.rb +38 -34
- data/lib/packetgen/header/sctp/chunk.rb +38 -17
- data/lib/packetgen/header/sctp/error.rb +169 -197
- data/lib/packetgen/header/sctp/padded32.rb +3 -3
- data/lib/packetgen/header/sctp/parameter.rb +85 -132
- data/lib/packetgen/header/sctp.rb +14 -3
- data/lib/packetgen/header/snmp.rb +108 -7
- data/lib/packetgen/header/tcp/option.rb +7 -0
- data/lib/packetgen/header/tcp/options.rb +11 -3
- data/lib/packetgen/header/tcp.rb +33 -26
- data/lib/packetgen/header/tftp.rb +16 -10
- data/lib/packetgen/header/udp.rb +15 -13
- data/lib/packetgen/header.rb +19 -13
- data/lib/packetgen/headerable.rb +9 -3
- data/lib/packetgen/inspect.rb +2 -7
- data/lib/packetgen/packet.rb +94 -36
- data/lib/packetgen/pcapng/block.rb +2 -1
- data/lib/packetgen/pcapng/file.rb +41 -14
- data/lib/packetgen/pcapng/idb.rb +2 -1
- data/lib/packetgen/pcapng/shb.rb +2 -1
- data/lib/packetgen/pcapng/spb.rb +1 -1
- data/lib/packetgen/pcapng.rb +2 -0
- data/lib/packetgen/proto.rb +4 -0
- data/lib/packetgen/unknown_packet.rb +3 -3
- data/lib/packetgen/utils.rb +2 -1
- data/lib/packetgen/version.rb +1 -1
- data/lib/packetgen.rb +8 -2
- metadata +4 -4
@@ -9,31 +9,18 @@
|
|
9
9
|
module PacketGen
|
10
10
|
module Header
|
11
11
|
class SCTP
|
12
|
-
#
|
13
|
-
#
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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
|
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}
|
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'
|
84
|
+
type_name + 'Error'
|
83
85
|
end
|
84
86
|
end
|
85
87
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
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
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
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
|
-
#
|
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
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
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
|
-
|
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
|
-
#
|
150
|
-
#
|
151
|
-
#
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
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
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
#
|
163
|
-
#
|
164
|
-
|
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
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
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
|
-
|
184
|
-
|
185
|
-
#
|
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?(
|
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
|
-
#
|
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
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
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
|
-
|
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
|
-
#
|
230
|
-
# mandatory
|
231
|
-
#
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
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
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
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
|
-
|
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
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
#
|
268
|
-
#
|
269
|
-
|
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
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
#
|
280
|
-
#
|
281
|
-
#
|
282
|
-
|
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
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
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
|
-
|
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
|
-
#
|
317
|
-
#
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
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
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
#
|
334
|
-
#
|
335
|
-
|
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
|
-
#
|
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 <<
|
22
|
+
s << "\x00".b * padlen
|
23
23
|
end
|
24
24
|
|
25
25
|
# Say if binary string is padded
|