nl-linux 0.3.0 → 0.4.1
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/.yardopts +5 -0
- data/CHANGELOG.md +6 -0
- data/Rakefile +14 -2
- data/generated/nl/linux/binder.rb +172 -44
- data/generated/nl/linux/conntrack.rb +1293 -370
- data/generated/nl/linux/dev_energymodel.rb +278 -93
- data/generated/nl/linux/devlink.rb +5654 -1954
- data/generated/nl/linux/dpll.rb +1838 -669
- data/generated/nl/linux/drm_ras.rb +234 -72
- data/generated/nl/linux/ethtool.rb +6683 -2885
- data/generated/nl/linux/fou.rb +308 -129
- data/generated/nl/linux/handshake.rb +277 -99
- data/generated/nl/linux/lockd.rb +88 -33
- data/generated/nl/linux/mptcp_pm.rb +639 -186
- data/generated/nl/linux/net_shaper.rb +782 -224
- data/generated/nl/linux/netdev.rb +2105 -631
- data/generated/nl/linux/nfsd.rb +1030 -358
- data/generated/nl/linux/nftables.rb +5041 -1612
- data/generated/nl/linux/nl80211.rb +4531 -871
- data/generated/nl/linux/nlctrl.rb +411 -119
- data/generated/nl/linux/ovpn.rb +1211 -293
- data/generated/nl/linux/ovs_datapath.rb +271 -106
- data/generated/nl/linux/ovs_flow.rb +1819 -354
- data/generated/nl/linux/ovs_packet.rb +257 -82
- data/generated/nl/linux/ovs_vport.rb +334 -132
- data/generated/nl/linux/psp.rb +916 -281
- data/generated/nl/linux/rt_addr.rb +369 -166
- data/generated/nl/linux/rt_link.rb +6708 -1450
- data/generated/nl/linux/rt_neigh.rb +919 -364
- data/generated/nl/linux/rt_route.rb +1034 -448
- data/generated/nl/linux/rt_rule.rb +775 -395
- data/generated/nl/linux/sunrpc_cache.rb +297 -102
- data/generated/nl/linux/tc.rb +9989 -1780
- data/generated/nl/linux/tcp_metrics.rb +327 -105
- data/generated/nl/linux/team.rb +279 -93
- data/generated/nl/linux/wireguard.rb +432 -95
- data/generated/nl/linux.rb +1 -0
- data/lib/nl/linux/nlctrl_resolver.rb +31 -0
- data/lib/nl/linux/version.rb +1 -1
- data/sig/generated/nl/linux/binder.rbs +366 -0
- data/sig/generated/nl/linux/conntrack.rbs +2787 -0
- data/sig/generated/nl/linux/dev_energymodel.rbs +636 -0
- data/sig/generated/nl/linux/devlink.rbs +12496 -0
- data/sig/generated/nl/linux/dpll.rbs +3461 -0
- data/sig/generated/nl/linux/drm_ras.rbs +553 -0
- data/sig/generated/nl/linux/ethtool.rbs +15291 -0
- data/sig/generated/nl/linux/fou.rbs +702 -0
- data/sig/generated/nl/linux/handshake.rbs +622 -0
- data/sig/generated/nl/linux/lockd.rbs +234 -0
- data/sig/generated/nl/linux/mptcp_pm.rbs +1511 -0
- data/sig/generated/nl/linux/net_shaper.rbs +1645 -0
- data/sig/generated/nl/linux/netdev.rbs +4187 -0
- data/sig/generated/nl/linux/nfsd.rbs +2520 -0
- data/sig/generated/nl/linux/nftables.rbs +10304 -0
- data/sig/generated/nl/linux/nl80211.rbs +9786 -0
- data/sig/generated/nl/linux/nlctrl.rbs +944 -0
- data/sig/generated/nl/linux/nlctrl_resolver.rbs +20 -0
- data/sig/generated/nl/linux/ovpn.rbs +2564 -0
- data/sig/generated/nl/linux/ovs_datapath.rbs +640 -0
- data/sig/generated/nl/linux/ovs_flow.rbs +3659 -0
- data/sig/generated/nl/linux/ovs_packet.rbs +540 -0
- data/sig/generated/nl/linux/ovs_vport.rbs +777 -0
- data/sig/generated/nl/linux/psp.rbs +1846 -0
- data/sig/generated/nl/linux/rt_addr.rbs +866 -0
- data/sig/generated/nl/linux/rt_link.rbs +13438 -0
- data/sig/generated/nl/linux/rt_neigh.rbs +2124 -0
- data/sig/generated/nl/linux/rt_route.rbs +2218 -0
- data/sig/generated/nl/linux/rt_rule.rbs +1726 -0
- data/sig/generated/nl/linux/sunrpc_cache.rbs +739 -0
- data/sig/generated/nl/linux/tc.rbs +19931 -0
- data/sig/generated/nl/linux/tcp_metrics.rbs +740 -0
- data/sig/generated/nl/linux/team.rbs +733 -0
- data/sig/generated/nl/linux/version.rbs +7 -0
- data/sig/generated/nl/linux/wireguard.rbs +1006 -0
- data/sig/generated/nl/linux.rbs +6 -0
- data/sig/generated/nl-linux.rbs +2 -0
- metadata +46 -7
|
@@ -3,100 +3,211 @@
|
|
|
3
3
|
# This file is based on Documentation/netlink/specs/tcp_metrics.yaml from Linux v7.2.
|
|
4
4
|
#--
|
|
5
5
|
# frozen_string_literal: true
|
|
6
|
-
# rbs_inline: enabled
|
|
7
6
|
# This code is generated by Ynl::Generator. DO NOT EDIT.
|
|
8
7
|
require 'nl'
|
|
9
8
|
module Nl; module Linux
|
|
10
9
|
# Management interface for TCP metrics.
|
|
11
|
-
class TcpMetrics < ::Nl::Family
|
|
10
|
+
class TcpMetrics < ::Nl::Genl::Family
|
|
12
11
|
NAME = "tcp_metrics"
|
|
13
|
-
|
|
12
|
+
VERSION = 1
|
|
13
|
+
# @rbs (?resolver: ^(::Nl::Genl::Client, ::String) -> ::Nl::Genl::FamilyInfo, ?executor: executor?, ?notification_capacity: ::Integer?) -> (::Nl::Family::Session & instance)
|
|
14
|
+
# @rbs | [R] (?resolver: ^(::Nl::Genl::Client, ::String) -> ::Nl::Genl::FamilyInfo, ?executor: executor?, ?notification_capacity: ::Integer?) { (instance) -> R } -> R
|
|
15
|
+
# @overload open(resolver: ::Nl::Linux::DEFAULT_RESOLVER, executor: nil, notification_capacity: DEFAULT_NOTIFICATION_CAPACITY)
|
|
16
|
+
# @param [#call] resolver
|
|
17
|
+
# @param [Symbol, nil] executor
|
|
18
|
+
# @param [Integer, nil] notification_capacity
|
|
19
|
+
# @return [TcpMetrics]
|
|
20
|
+
# @overload open(resolver: ::Nl::Linux::DEFAULT_RESOLVER, executor: nil, notification_capacity: DEFAULT_NOTIFICATION_CAPACITY, &block)
|
|
21
|
+
# @param [#call] resolver
|
|
22
|
+
# @param [Symbol, nil] executor
|
|
23
|
+
# @param [Integer, nil] notification_capacity
|
|
24
|
+
# @yieldparam [TcpMetrics] family
|
|
25
|
+
# @return [Object] the result of the block
|
|
26
|
+
def self.open(resolver: ::Nl::Linux::DEFAULT_RESOLVER, executor: nil, notification_capacity: DEFAULT_NOTIFICATION_CAPACITY)
|
|
27
|
+
super
|
|
28
|
+
end
|
|
29
|
+
# @private
|
|
14
30
|
MCAST_GROUPS = Ractor.make_shareable({}) #: Hash[::Symbol, ::Nl::McastGroup]
|
|
31
|
+
module Constants
|
|
32
|
+
TCP_FASTOPEN_COOKIE_MAX = 16
|
|
33
|
+
end
|
|
15
34
|
module Structs
|
|
16
35
|
end
|
|
17
36
|
module AttributeSets
|
|
18
|
-
class TcpMetrics < ::Nl::
|
|
37
|
+
class TcpMetrics < ::Nl::AttributeSet
|
|
19
38
|
# Abstract class
|
|
20
|
-
class Attribute < ::Nl::
|
|
39
|
+
class Attribute < ::Nl::AttributeSet::Attribute
|
|
21
40
|
end
|
|
22
41
|
class AddrIpv4 < Attribute
|
|
23
42
|
TYPE = 1
|
|
24
43
|
NAME = :"addr_ipv4"
|
|
25
|
-
|
|
44
|
+
# @private
|
|
45
|
+
ORDER = 0
|
|
46
|
+
# @private
|
|
47
|
+
DATATYPE = ::Nl::DataTypes::Scalar.new(::Nl::Endian::Big::U32, check: nil)
|
|
26
48
|
end
|
|
27
49
|
class AddrIpv6 < Attribute
|
|
28
50
|
TYPE = 2
|
|
29
51
|
NAME = :"addr_ipv6"
|
|
30
|
-
|
|
52
|
+
# @private
|
|
53
|
+
ORDER = 1
|
|
54
|
+
# @private
|
|
55
|
+
DATATYPE = ::Nl::DataTypes::Binary.new(check: -> { raise ArgumentError, "Value #{it.inspect} is shorter than minimum length 16" unless it.bytesize >= 16 })
|
|
31
56
|
end
|
|
32
57
|
class Age < Attribute
|
|
33
58
|
TYPE = 3
|
|
34
59
|
NAME = :"age"
|
|
35
|
-
|
|
60
|
+
# @private
|
|
61
|
+
ORDER = 2
|
|
62
|
+
# @private
|
|
63
|
+
DATATYPE = ::Nl::DataTypes::Scalar.new(::Nl::Endian::Host::U64, check: nil)
|
|
36
64
|
end
|
|
65
|
+
# unused
|
|
37
66
|
class TwTsval < Attribute
|
|
38
67
|
TYPE = 4
|
|
39
68
|
NAME = :"tw_tsval"
|
|
40
|
-
|
|
69
|
+
# @private
|
|
70
|
+
ORDER = 3
|
|
71
|
+
# @private
|
|
72
|
+
DATATYPE = ::Nl::DataTypes::Scalar.new(::Nl::Endian::Host::U32, check: nil)
|
|
41
73
|
end
|
|
74
|
+
# unused
|
|
42
75
|
class TwTsStamp < Attribute
|
|
43
76
|
TYPE = 5
|
|
44
77
|
NAME = :"tw_ts_stamp"
|
|
45
|
-
|
|
78
|
+
# @private
|
|
79
|
+
ORDER = 4
|
|
80
|
+
# @private
|
|
81
|
+
DATATYPE = ::Nl::DataTypes::Scalar.new(::Nl::Endian::Host::S32, check: nil)
|
|
46
82
|
end
|
|
47
83
|
class Vals < Attribute
|
|
48
84
|
TYPE = 6
|
|
49
85
|
NAME = :"vals"
|
|
86
|
+
# @private
|
|
87
|
+
ORDER = 5
|
|
50
88
|
end
|
|
51
89
|
class FopenMss < Attribute
|
|
52
90
|
TYPE = 7
|
|
53
91
|
NAME = :"fopen_mss"
|
|
54
|
-
|
|
92
|
+
# @private
|
|
93
|
+
ORDER = 6
|
|
94
|
+
# @private
|
|
95
|
+
DATATYPE = ::Nl::DataTypes::Scalar.new(::Nl::Endian::Host::U16, check: nil)
|
|
55
96
|
end
|
|
56
97
|
class FopenSynDrops < Attribute
|
|
57
98
|
TYPE = 8
|
|
58
99
|
NAME = :"fopen_syn_drops"
|
|
59
|
-
|
|
100
|
+
# @private
|
|
101
|
+
ORDER = 7
|
|
102
|
+
# @private
|
|
103
|
+
DATATYPE = ::Nl::DataTypes::Scalar.new(::Nl::Endian::Host::U16, check: nil)
|
|
60
104
|
end
|
|
61
105
|
class FopenSynDropTs < Attribute
|
|
62
106
|
TYPE = 9
|
|
63
107
|
NAME = :"fopen_syn_drop_ts"
|
|
64
|
-
|
|
108
|
+
# @private
|
|
109
|
+
ORDER = 8
|
|
110
|
+
# @private
|
|
111
|
+
DATATYPE = ::Nl::DataTypes::Scalar.new(::Nl::Endian::Host::U64, check: nil)
|
|
65
112
|
end
|
|
66
113
|
class FopenCookie < Attribute
|
|
67
114
|
TYPE = 10
|
|
68
115
|
NAME = :"fopen_cookie"
|
|
69
|
-
|
|
116
|
+
# @private
|
|
117
|
+
ORDER = 9
|
|
118
|
+
# @private
|
|
119
|
+
DATATYPE = ::Nl::DataTypes::Binary.new(check: -> { raise ArgumentError, "Value #{it.inspect} is shorter than minimum length #{Constants::TCP_FASTOPEN_COOKIE_MAX}" unless it.bytesize >= Constants::TCP_FASTOPEN_COOKIE_MAX })
|
|
70
120
|
end
|
|
71
121
|
class SaddrIpv4 < Attribute
|
|
72
122
|
TYPE = 11
|
|
73
123
|
NAME = :"saddr_ipv4"
|
|
74
|
-
|
|
124
|
+
# @private
|
|
125
|
+
ORDER = 10
|
|
126
|
+
# @private
|
|
127
|
+
DATATYPE = ::Nl::DataTypes::Scalar.new(::Nl::Endian::Big::U32, check: nil)
|
|
75
128
|
end
|
|
76
129
|
class SaddrIpv6 < Attribute
|
|
77
130
|
TYPE = 12
|
|
78
131
|
NAME = :"saddr_ipv6"
|
|
79
|
-
|
|
132
|
+
# @private
|
|
133
|
+
ORDER = 11
|
|
134
|
+
# @private
|
|
135
|
+
DATATYPE = ::Nl::DataTypes::Binary.new(check: -> { raise ArgumentError, "Value #{it.inspect} is shorter than minimum length 16" unless it.bytesize >= 16 })
|
|
80
136
|
end
|
|
81
137
|
class Pad < Attribute
|
|
82
138
|
TYPE = 13
|
|
83
139
|
NAME = :"pad"
|
|
84
|
-
|
|
140
|
+
# @private
|
|
141
|
+
ORDER = 12
|
|
142
|
+
# @private
|
|
143
|
+
DATATYPE = ::Nl::DataTypes::Pad.new()
|
|
85
144
|
end
|
|
86
|
-
#
|
|
145
|
+
# @private
|
|
87
146
|
BY_NAME = Ractor.make_shareable({:"addr_ipv4" => AddrIpv4, :"addr_ipv6" => AddrIpv6, :"age" => Age, :"tw_tsval" => TwTsval, :"tw_ts_stamp" => TwTsStamp, :"vals" => Vals, :"fopen_mss" => FopenMss, :"fopen_syn_drops" => FopenSynDrops, :"fopen_syn_drop_ts" => FopenSynDropTs, :"fopen_cookie" => FopenCookie, :"saddr_ipv4" => SaddrIpv4, :"saddr_ipv6" => SaddrIpv6, :"pad" => Pad}) #: Hash[::Symbol, Attribute]
|
|
88
|
-
#
|
|
147
|
+
# @private
|
|
89
148
|
BY_TYPE = Ractor.make_shareable({1 => AddrIpv4, 2 => AddrIpv6, 3 => Age, 4 => TwTsval, 5 => TwTsStamp, 6 => Vals, 7 => FopenMss, 8 => FopenSynDrops, 9 => FopenSynDropTs, 10 => FopenCookie, 11 => SaddrIpv4, 12 => SaddrIpv6, 13 => Pad}) #: Hash[::Integer, Attribute]
|
|
149
|
+
# @rbs return: ::Integer
|
|
150
|
+
# @return [Integer]
|
|
151
|
+
# @see AddrIpv4
|
|
152
|
+
def addr_ipv4; self[:"addr_ipv4"]&.value; end
|
|
153
|
+
# @rbs return: ::String
|
|
154
|
+
# @return [String]
|
|
155
|
+
# @see AddrIpv6
|
|
156
|
+
def addr_ipv6; self[:"addr_ipv6"]&.value; end
|
|
157
|
+
# @rbs return: ::Integer
|
|
158
|
+
# @return [Integer]
|
|
159
|
+
# @see Age
|
|
160
|
+
def age; self[:"age"]&.value; end
|
|
161
|
+
# unused
|
|
162
|
+
# @rbs return: ::Integer
|
|
163
|
+
# @return [Integer]
|
|
164
|
+
# @see TwTsval
|
|
165
|
+
def tw_tsval; self[:"tw_tsval"]&.value; end
|
|
166
|
+
# unused
|
|
167
|
+
# @rbs return: ::Integer
|
|
168
|
+
# @return [Integer]
|
|
169
|
+
# @see TwTsStamp
|
|
170
|
+
def tw_ts_stamp; self[:"tw_ts_stamp"]&.value; end
|
|
171
|
+
# @rbs return: AttributeSets::Metrics
|
|
172
|
+
# @return [AttributeSets::Metrics]
|
|
173
|
+
# @see Vals
|
|
174
|
+
def vals; self[:"vals"]&.value; end
|
|
175
|
+
# @rbs return: ::Integer
|
|
176
|
+
# @return [Integer]
|
|
177
|
+
# @see FopenMss
|
|
178
|
+
def fopen_mss; self[:"fopen_mss"]&.value; end
|
|
179
|
+
# @rbs return: ::Integer
|
|
180
|
+
# @return [Integer]
|
|
181
|
+
# @see FopenSynDrops
|
|
182
|
+
def fopen_syn_drops; self[:"fopen_syn_drops"]&.value; end
|
|
183
|
+
# @rbs return: ::Integer
|
|
184
|
+
# @return [Integer]
|
|
185
|
+
# @see FopenSynDropTs
|
|
186
|
+
def fopen_syn_drop_ts; self[:"fopen_syn_drop_ts"]&.value; end
|
|
187
|
+
# @rbs return: ::String
|
|
188
|
+
# @return [String]
|
|
189
|
+
# @see FopenCookie
|
|
190
|
+
def fopen_cookie; self[:"fopen_cookie"]&.value; end
|
|
191
|
+
# @rbs return: ::Integer
|
|
192
|
+
# @return [Integer]
|
|
193
|
+
# @see SaddrIpv4
|
|
194
|
+
def saddr_ipv4; self[:"saddr_ipv4"]&.value; end
|
|
195
|
+
# @rbs return: ::String
|
|
196
|
+
# @return [String]
|
|
197
|
+
# @see SaddrIpv6
|
|
198
|
+
def saddr_ipv6; self[:"saddr_ipv6"]&.value; end
|
|
90
199
|
class << self
|
|
91
200
|
# Looks up Attribute class by name.
|
|
92
|
-
#--
|
|
93
201
|
# @rbs name: Symbol
|
|
94
202
|
# @rbs return: Attribute
|
|
203
|
+
# @param [Symbol] name
|
|
204
|
+
# @return [Attribute]
|
|
95
205
|
def by_name(name); BY_NAME.fetch(name); end
|
|
96
206
|
# Looks up Attribute class by type value.
|
|
97
|
-
#--
|
|
98
207
|
# @rbs type: Integer
|
|
99
208
|
# @rbs return: Attribute
|
|
209
|
+
# @param [Integer] type
|
|
210
|
+
# @return [Attribute]
|
|
100
211
|
def by_type(type); BY_TYPE.fetch(type); end
|
|
101
212
|
end
|
|
102
213
|
end
|
|
@@ -104,268 +215,379 @@ class TcpMetrics < ::Nl::Family
|
|
|
104
215
|
# the TCP_METRIC_* defines in the kernel, because kernel defines
|
|
105
216
|
# are off-by one (e.g. rtt is defined as enum 0, while netlink carries
|
|
106
217
|
# attribute type 1).
|
|
107
|
-
class Metrics < ::Nl::
|
|
218
|
+
class Metrics < ::Nl::AttributeSet
|
|
108
219
|
# Abstract class
|
|
109
|
-
class Attribute < ::Nl::
|
|
220
|
+
class Attribute < ::Nl::AttributeSet::Attribute
|
|
110
221
|
end
|
|
222
|
+
# Round Trip Time (RTT), in msecs with 3 bits fractional
|
|
223
|
+
# (left-shift by 3 to get the msec value).
|
|
111
224
|
class Rtt < Attribute
|
|
112
225
|
TYPE = 1
|
|
113
226
|
NAME = :"rtt"
|
|
114
|
-
|
|
227
|
+
# @private
|
|
228
|
+
ORDER = 0
|
|
229
|
+
# @private
|
|
230
|
+
DATATYPE = ::Nl::DataTypes::Scalar.new(::Nl::Endian::Host::U32, check: nil)
|
|
115
231
|
end
|
|
232
|
+
# Round Trip Time VARiance (RTT), in msecs with 2 bits fractional
|
|
233
|
+
# (left-shift by 2 to get the msec value).
|
|
116
234
|
class Rttvar < Attribute
|
|
117
235
|
TYPE = 2
|
|
118
236
|
NAME = :"rttvar"
|
|
119
|
-
|
|
237
|
+
# @private
|
|
238
|
+
ORDER = 1
|
|
239
|
+
# @private
|
|
240
|
+
DATATYPE = ::Nl::DataTypes::Scalar.new(::Nl::Endian::Host::U32, check: nil)
|
|
120
241
|
end
|
|
242
|
+
# Slow Start THRESHold.
|
|
121
243
|
class Ssthresh < Attribute
|
|
122
244
|
TYPE = 3
|
|
123
245
|
NAME = :"ssthresh"
|
|
124
|
-
|
|
246
|
+
# @private
|
|
247
|
+
ORDER = 2
|
|
248
|
+
# @private
|
|
249
|
+
DATATYPE = ::Nl::DataTypes::Scalar.new(::Nl::Endian::Host::U32, check: nil)
|
|
125
250
|
end
|
|
251
|
+
# Congestion Window.
|
|
126
252
|
class Cwnd < Attribute
|
|
127
253
|
TYPE = 4
|
|
128
254
|
NAME = :"cwnd"
|
|
129
|
-
|
|
255
|
+
# @private
|
|
256
|
+
ORDER = 3
|
|
257
|
+
# @private
|
|
258
|
+
DATATYPE = ::Nl::DataTypes::Scalar.new(::Nl::Endian::Host::U32, check: nil)
|
|
130
259
|
end
|
|
260
|
+
# Reodering metric.
|
|
131
261
|
class Reodering < Attribute
|
|
132
262
|
TYPE = 5
|
|
133
263
|
NAME = :"reodering"
|
|
134
|
-
|
|
264
|
+
# @private
|
|
265
|
+
ORDER = 4
|
|
266
|
+
# @private
|
|
267
|
+
DATATYPE = ::Nl::DataTypes::Scalar.new(::Nl::Endian::Host::U32, check: nil)
|
|
135
268
|
end
|
|
269
|
+
# Round Trip Time (RTT), in usecs, with 3 bits fractional
|
|
270
|
+
# (left-shift by 3 to get the msec value).
|
|
136
271
|
class RttUs < Attribute
|
|
137
272
|
TYPE = 6
|
|
138
273
|
NAME = :"rtt_us"
|
|
139
|
-
|
|
274
|
+
# @private
|
|
275
|
+
ORDER = 5
|
|
276
|
+
# @private
|
|
277
|
+
DATATYPE = ::Nl::DataTypes::Scalar.new(::Nl::Endian::Host::U32, check: nil)
|
|
140
278
|
end
|
|
279
|
+
# Round Trip Time (RTT), in usecs, with 2 bits fractional
|
|
280
|
+
# (left-shift by 3 to get the msec value).
|
|
141
281
|
class RttvarUs < Attribute
|
|
142
282
|
TYPE = 7
|
|
143
283
|
NAME = :"rttvar_us"
|
|
144
|
-
|
|
284
|
+
# @private
|
|
285
|
+
ORDER = 6
|
|
286
|
+
# @private
|
|
287
|
+
DATATYPE = ::Nl::DataTypes::Scalar.new(::Nl::Endian::Host::U32, check: nil)
|
|
145
288
|
end
|
|
146
|
-
#
|
|
289
|
+
# @private
|
|
147
290
|
BY_NAME = Ractor.make_shareable({:"rtt" => Rtt, :"rttvar" => Rttvar, :"ssthresh" => Ssthresh, :"cwnd" => Cwnd, :"reodering" => Reodering, :"rtt_us" => RttUs, :"rttvar_us" => RttvarUs}) #: Hash[::Symbol, Attribute]
|
|
148
|
-
#
|
|
291
|
+
# @private
|
|
149
292
|
BY_TYPE = Ractor.make_shareable({1 => Rtt, 2 => Rttvar, 3 => Ssthresh, 4 => Cwnd, 5 => Reodering, 6 => RttUs, 7 => RttvarUs}) #: Hash[::Integer, Attribute]
|
|
293
|
+
# Round Trip Time (RTT), in msecs with 3 bits fractional
|
|
294
|
+
# (left-shift by 3 to get the msec value).
|
|
295
|
+
# @rbs return: ::Integer
|
|
296
|
+
# @return [Integer]
|
|
297
|
+
# @see Rtt
|
|
298
|
+
def rtt; self[:"rtt"]&.value; end
|
|
299
|
+
# Round Trip Time VARiance (RTT), in msecs with 2 bits fractional
|
|
300
|
+
# (left-shift by 2 to get the msec value).
|
|
301
|
+
# @rbs return: ::Integer
|
|
302
|
+
# @return [Integer]
|
|
303
|
+
# @see Rttvar
|
|
304
|
+
def rttvar; self[:"rttvar"]&.value; end
|
|
305
|
+
# Slow Start THRESHold.
|
|
306
|
+
# @rbs return: ::Integer
|
|
307
|
+
# @return [Integer]
|
|
308
|
+
# @see Ssthresh
|
|
309
|
+
def ssthresh; self[:"ssthresh"]&.value; end
|
|
310
|
+
# Congestion Window.
|
|
311
|
+
# @rbs return: ::Integer
|
|
312
|
+
# @return [Integer]
|
|
313
|
+
# @see Cwnd
|
|
314
|
+
def cwnd; self[:"cwnd"]&.value; end
|
|
315
|
+
# Reodering metric.
|
|
316
|
+
# @rbs return: ::Integer
|
|
317
|
+
# @return [Integer]
|
|
318
|
+
# @see Reodering
|
|
319
|
+
def reodering; self[:"reodering"]&.value; end
|
|
320
|
+
# Round Trip Time (RTT), in usecs, with 3 bits fractional
|
|
321
|
+
# (left-shift by 3 to get the msec value).
|
|
322
|
+
# @rbs return: ::Integer
|
|
323
|
+
# @return [Integer]
|
|
324
|
+
# @see RttUs
|
|
325
|
+
def rtt_us; self[:"rtt_us"]&.value; end
|
|
326
|
+
# Round Trip Time (RTT), in usecs, with 2 bits fractional
|
|
327
|
+
# (left-shift by 3 to get the msec value).
|
|
328
|
+
# @rbs return: ::Integer
|
|
329
|
+
# @return [Integer]
|
|
330
|
+
# @see RttvarUs
|
|
331
|
+
def rttvar_us; self[:"rttvar_us"]&.value; end
|
|
150
332
|
class << self
|
|
151
333
|
# Looks up Attribute class by name.
|
|
152
|
-
#--
|
|
153
334
|
# @rbs name: Symbol
|
|
154
335
|
# @rbs return: Attribute
|
|
336
|
+
# @param [Symbol] name
|
|
337
|
+
# @return [Attribute]
|
|
155
338
|
def by_name(name); BY_NAME.fetch(name); end
|
|
156
339
|
# Looks up Attribute class by type value.
|
|
157
|
-
#--
|
|
158
340
|
# @rbs type: Integer
|
|
159
341
|
# @rbs return: Attribute
|
|
342
|
+
# @param [Integer] type
|
|
343
|
+
# @return [Attribute]
|
|
160
344
|
def by_type(type); BY_TYPE.fetch(type); end
|
|
161
345
|
end
|
|
162
346
|
end
|
|
163
|
-
|
|
347
|
+
# @private
|
|
348
|
+
TcpMetrics::Vals::DATATYPE = ::Nl::DataTypes::NestedAttributes.new(AttributeSets::Metrics, selector_bindings: Ractor.make_shareable([]))
|
|
164
349
|
end
|
|
165
350
|
module Messages
|
|
166
351
|
# Retrieve metrics.
|
|
167
|
-
class DoGetRequest < ::Nl::
|
|
352
|
+
class DoGetRequest < ::Nl::Genl::Message
|
|
168
353
|
TYPE = 1
|
|
169
354
|
FIXED_HEADER = nil
|
|
170
355
|
ATTRIBUTE_SET = AttributeSets::TcpMetrics
|
|
171
356
|
ATTRIBUTES = Ractor.make_shareable(%i[addr_ipv4 addr_ipv6 saddr_ipv4 saddr_ipv6])
|
|
172
|
-
# Gets the value of `addr-ipv4` attribute in the message.
|
|
173
|
-
#--
|
|
174
357
|
# @rbs return: ::Integer
|
|
358
|
+
# @return [Integer]
|
|
359
|
+
# @see AttributeSets::TcpMetrics::AddrIpv4
|
|
175
360
|
def addr_ipv4; attributes[:"addr_ipv4"]&.value; end
|
|
176
|
-
# Gets the value of `addr-ipv6` attribute in the message.
|
|
177
|
-
#--
|
|
178
361
|
# @rbs return: ::String
|
|
362
|
+
# @return [String]
|
|
363
|
+
# @see AttributeSets::TcpMetrics::AddrIpv6
|
|
179
364
|
def addr_ipv6; attributes[:"addr_ipv6"]&.value; end
|
|
180
|
-
# Gets the value of `saddr-ipv4` attribute in the message.
|
|
181
|
-
#--
|
|
182
365
|
# @rbs return: ::Integer
|
|
366
|
+
# @return [Integer]
|
|
367
|
+
# @see AttributeSets::TcpMetrics::SaddrIpv4
|
|
183
368
|
def saddr_ipv4; attributes[:"saddr_ipv4"]&.value; end
|
|
184
|
-
# Gets the value of `saddr-ipv6` attribute in the message.
|
|
185
|
-
#--
|
|
186
369
|
# @rbs return: ::String
|
|
370
|
+
# @return [String]
|
|
371
|
+
# @see AttributeSets::TcpMetrics::SaddrIpv6
|
|
187
372
|
def saddr_ipv6; attributes[:"saddr_ipv6"]&.value; end
|
|
188
373
|
end
|
|
189
374
|
# Retrieve metrics.
|
|
190
|
-
class DoGetReply < ::Nl::
|
|
375
|
+
class DoGetReply < ::Nl::Genl::Message
|
|
191
376
|
TYPE = 1
|
|
192
377
|
FIXED_HEADER = nil
|
|
193
378
|
ATTRIBUTE_SET = AttributeSets::TcpMetrics
|
|
194
379
|
ATTRIBUTES = Ractor.make_shareable(%i[addr_ipv4 addr_ipv6 age vals fopen_mss fopen_syn_drops fopen_syn_drop_ts fopen_cookie saddr_ipv4 saddr_ipv6])
|
|
195
|
-
# Gets the value of `addr-ipv4` attribute in the message.
|
|
196
|
-
#--
|
|
197
380
|
# @rbs return: ::Integer
|
|
381
|
+
# @return [Integer]
|
|
382
|
+
# @see AttributeSets::TcpMetrics::AddrIpv4
|
|
198
383
|
def addr_ipv4; attributes[:"addr_ipv4"]&.value; end
|
|
199
|
-
# Gets the value of `addr-ipv6` attribute in the message.
|
|
200
|
-
#--
|
|
201
384
|
# @rbs return: ::String
|
|
385
|
+
# @return [String]
|
|
386
|
+
# @see AttributeSets::TcpMetrics::AddrIpv6
|
|
202
387
|
def addr_ipv6; attributes[:"addr_ipv6"]&.value; end
|
|
203
|
-
# Gets the value of `age` attribute in the message.
|
|
204
|
-
#--
|
|
205
388
|
# @rbs return: ::Integer
|
|
389
|
+
# @return [Integer]
|
|
390
|
+
# @see AttributeSets::TcpMetrics::Age
|
|
206
391
|
def age; attributes[:"age"]&.value; end
|
|
207
|
-
# Gets the value of `vals` attribute in the message.
|
|
208
|
-
#--
|
|
209
392
|
# @rbs return: AttributeSets::Metrics
|
|
393
|
+
# @return [AttributeSets::Metrics]
|
|
394
|
+
# @see AttributeSets::TcpMetrics::Vals
|
|
210
395
|
def vals; attributes[:"vals"]&.value; end
|
|
211
|
-
# Gets the value of `fopen-mss` attribute in the message.
|
|
212
|
-
#--
|
|
213
396
|
# @rbs return: ::Integer
|
|
397
|
+
# @return [Integer]
|
|
398
|
+
# @see AttributeSets::TcpMetrics::FopenMss
|
|
214
399
|
def fopen_mss; attributes[:"fopen_mss"]&.value; end
|
|
215
|
-
# Gets the value of `fopen-syn-drops` attribute in the message.
|
|
216
|
-
#--
|
|
217
400
|
# @rbs return: ::Integer
|
|
401
|
+
# @return [Integer]
|
|
402
|
+
# @see AttributeSets::TcpMetrics::FopenSynDrops
|
|
218
403
|
def fopen_syn_drops; attributes[:"fopen_syn_drops"]&.value; end
|
|
219
|
-
# Gets the value of `fopen-syn-drop-ts` attribute in the message.
|
|
220
|
-
#--
|
|
221
404
|
# @rbs return: ::Integer
|
|
405
|
+
# @return [Integer]
|
|
406
|
+
# @see AttributeSets::TcpMetrics::FopenSynDropTs
|
|
222
407
|
def fopen_syn_drop_ts; attributes[:"fopen_syn_drop_ts"]&.value; end
|
|
223
|
-
# Gets the value of `fopen-cookie` attribute in the message.
|
|
224
|
-
#--
|
|
225
408
|
# @rbs return: ::String
|
|
409
|
+
# @return [String]
|
|
410
|
+
# @see AttributeSets::TcpMetrics::FopenCookie
|
|
226
411
|
def fopen_cookie; attributes[:"fopen_cookie"]&.value; end
|
|
227
|
-
# Gets the value of `saddr-ipv4` attribute in the message.
|
|
228
|
-
#--
|
|
229
412
|
# @rbs return: ::Integer
|
|
413
|
+
# @return [Integer]
|
|
414
|
+
# @see AttributeSets::TcpMetrics::SaddrIpv4
|
|
230
415
|
def saddr_ipv4; attributes[:"saddr_ipv4"]&.value; end
|
|
231
|
-
# Gets the value of `saddr-ipv6` attribute in the message.
|
|
232
|
-
#--
|
|
233
416
|
# @rbs return: ::String
|
|
417
|
+
# @return [String]
|
|
418
|
+
# @see AttributeSets::TcpMetrics::SaddrIpv6
|
|
234
419
|
def saddr_ipv6; attributes[:"saddr_ipv6"]&.value; end
|
|
235
420
|
end
|
|
236
421
|
# Retrieve metrics.
|
|
237
|
-
class DumpGetRequest < ::Nl::
|
|
422
|
+
class DumpGetRequest < ::Nl::Genl::Message
|
|
238
423
|
TYPE = 1
|
|
239
424
|
FIXED_HEADER = nil
|
|
240
425
|
ATTRIBUTE_SET = AttributeSets::TcpMetrics
|
|
241
426
|
ATTRIBUTES = Ractor.make_shareable(%i[])
|
|
242
427
|
end
|
|
243
428
|
# Retrieve metrics.
|
|
244
|
-
class DumpGetReply < ::Nl::
|
|
429
|
+
class DumpGetReply < ::Nl::Genl::Message
|
|
245
430
|
TYPE = 1
|
|
246
431
|
FIXED_HEADER = nil
|
|
247
432
|
ATTRIBUTE_SET = AttributeSets::TcpMetrics
|
|
248
433
|
ATTRIBUTES = Ractor.make_shareable(%i[addr_ipv4 addr_ipv6 age vals fopen_mss fopen_syn_drops fopen_syn_drop_ts fopen_cookie saddr_ipv4 saddr_ipv6])
|
|
249
|
-
# Gets the value of `addr-ipv4` attribute in the message.
|
|
250
|
-
#--
|
|
251
434
|
# @rbs return: ::Integer
|
|
435
|
+
# @return [Integer]
|
|
436
|
+
# @see AttributeSets::TcpMetrics::AddrIpv4
|
|
252
437
|
def addr_ipv4; attributes[:"addr_ipv4"]&.value; end
|
|
253
|
-
# Gets the value of `addr-ipv6` attribute in the message.
|
|
254
|
-
#--
|
|
255
438
|
# @rbs return: ::String
|
|
439
|
+
# @return [String]
|
|
440
|
+
# @see AttributeSets::TcpMetrics::AddrIpv6
|
|
256
441
|
def addr_ipv6; attributes[:"addr_ipv6"]&.value; end
|
|
257
|
-
# Gets the value of `age` attribute in the message.
|
|
258
|
-
#--
|
|
259
442
|
# @rbs return: ::Integer
|
|
443
|
+
# @return [Integer]
|
|
444
|
+
# @see AttributeSets::TcpMetrics::Age
|
|
260
445
|
def age; attributes[:"age"]&.value; end
|
|
261
|
-
# Gets the value of `vals` attribute in the message.
|
|
262
|
-
#--
|
|
263
446
|
# @rbs return: AttributeSets::Metrics
|
|
447
|
+
# @return [AttributeSets::Metrics]
|
|
448
|
+
# @see AttributeSets::TcpMetrics::Vals
|
|
264
449
|
def vals; attributes[:"vals"]&.value; end
|
|
265
|
-
# Gets the value of `fopen-mss` attribute in the message.
|
|
266
|
-
#--
|
|
267
450
|
# @rbs return: ::Integer
|
|
451
|
+
# @return [Integer]
|
|
452
|
+
# @see AttributeSets::TcpMetrics::FopenMss
|
|
268
453
|
def fopen_mss; attributes[:"fopen_mss"]&.value; end
|
|
269
|
-
# Gets the value of `fopen-syn-drops` attribute in the message.
|
|
270
|
-
#--
|
|
271
454
|
# @rbs return: ::Integer
|
|
455
|
+
# @return [Integer]
|
|
456
|
+
# @see AttributeSets::TcpMetrics::FopenSynDrops
|
|
272
457
|
def fopen_syn_drops; attributes[:"fopen_syn_drops"]&.value; end
|
|
273
|
-
# Gets the value of `fopen-syn-drop-ts` attribute in the message.
|
|
274
|
-
#--
|
|
275
458
|
# @rbs return: ::Integer
|
|
459
|
+
# @return [Integer]
|
|
460
|
+
# @see AttributeSets::TcpMetrics::FopenSynDropTs
|
|
276
461
|
def fopen_syn_drop_ts; attributes[:"fopen_syn_drop_ts"]&.value; end
|
|
277
|
-
# Gets the value of `fopen-cookie` attribute in the message.
|
|
278
|
-
#--
|
|
279
462
|
# @rbs return: ::String
|
|
463
|
+
# @return [String]
|
|
464
|
+
# @see AttributeSets::TcpMetrics::FopenCookie
|
|
280
465
|
def fopen_cookie; attributes[:"fopen_cookie"]&.value; end
|
|
281
|
-
# Gets the value of `saddr-ipv4` attribute in the message.
|
|
282
|
-
#--
|
|
283
466
|
# @rbs return: ::Integer
|
|
467
|
+
# @return [Integer]
|
|
468
|
+
# @see AttributeSets::TcpMetrics::SaddrIpv4
|
|
284
469
|
def saddr_ipv4; attributes[:"saddr_ipv4"]&.value; end
|
|
285
|
-
# Gets the value of `saddr-ipv6` attribute in the message.
|
|
286
|
-
#--
|
|
287
470
|
# @rbs return: ::String
|
|
471
|
+
# @return [String]
|
|
472
|
+
# @see AttributeSets::TcpMetrics::SaddrIpv6
|
|
288
473
|
def saddr_ipv6; attributes[:"saddr_ipv6"]&.value; end
|
|
289
474
|
end
|
|
290
475
|
# Delete metrics.
|
|
291
476
|
#
|
|
292
477
|
# Requires CAP_NET_ADMIN in the initial user namespace.
|
|
293
|
-
class DoDelRequest < ::Nl::
|
|
478
|
+
class DoDelRequest < ::Nl::Genl::Message
|
|
294
479
|
TYPE = 2
|
|
295
480
|
FIXED_HEADER = nil
|
|
296
481
|
ATTRIBUTE_SET = AttributeSets::TcpMetrics
|
|
297
482
|
ATTRIBUTES = Ractor.make_shareable(%i[addr_ipv4 addr_ipv6 saddr_ipv4 saddr_ipv6])
|
|
298
|
-
# Gets the value of `addr-ipv4` attribute in the message.
|
|
299
|
-
#--
|
|
300
483
|
# @rbs return: ::Integer
|
|
484
|
+
# @return [Integer]
|
|
485
|
+
# @see AttributeSets::TcpMetrics::AddrIpv4
|
|
301
486
|
def addr_ipv4; attributes[:"addr_ipv4"]&.value; end
|
|
302
|
-
# Gets the value of `addr-ipv6` attribute in the message.
|
|
303
|
-
#--
|
|
304
487
|
# @rbs return: ::String
|
|
488
|
+
# @return [String]
|
|
489
|
+
# @see AttributeSets::TcpMetrics::AddrIpv6
|
|
305
490
|
def addr_ipv6; attributes[:"addr_ipv6"]&.value; end
|
|
306
|
-
# Gets the value of `saddr-ipv4` attribute in the message.
|
|
307
|
-
#--
|
|
308
491
|
# @rbs return: ::Integer
|
|
492
|
+
# @return [Integer]
|
|
493
|
+
# @see AttributeSets::TcpMetrics::SaddrIpv4
|
|
309
494
|
def saddr_ipv4; attributes[:"saddr_ipv4"]&.value; end
|
|
310
|
-
# Gets the value of `saddr-ipv6` attribute in the message.
|
|
311
|
-
#--
|
|
312
495
|
# @rbs return: ::String
|
|
496
|
+
# @return [String]
|
|
497
|
+
# @see AttributeSets::TcpMetrics::SaddrIpv6
|
|
313
498
|
def saddr_ipv6; attributes[:"saddr_ipv6"]&.value; end
|
|
314
499
|
end
|
|
315
500
|
end
|
|
316
501
|
module Notifications
|
|
317
502
|
end
|
|
503
|
+
# @private
|
|
318
504
|
NOTIFICATIONS = Ractor.make_shareable({}) #: Hash[::Integer, ::Class]
|
|
319
505
|
# Retrieve metrics.
|
|
320
|
-
#--
|
|
321
506
|
# @rbs (?addr_ipv4: ::Integer, ?addr_ipv6: ::String, ?saddr_ipv4: ::Integer, ?saddr_ipv6: ::String) -> Messages::DoGetReply
|
|
507
|
+
# @param [Hash] args
|
|
508
|
+
# @option args [Integer] addr_ipv4
|
|
509
|
+
# @option args [String] addr_ipv6
|
|
510
|
+
# @option args [Integer] saddr_ipv4
|
|
511
|
+
# @option args [String] saddr_ipv6
|
|
512
|
+
# @return [Messages::DoGetReply]
|
|
513
|
+
# @see Messages::DoGetRequest
|
|
322
514
|
def do_get(**args)
|
|
323
515
|
exchange_message(:"do", Messages::DoGetRequest, Messages::DoGetReply, args)
|
|
324
516
|
end
|
|
325
517
|
# Retrieve metrics.
|
|
326
|
-
|
|
327
|
-
# @rbs () -> Enumerable[Messages::DumpGetReply]
|
|
518
|
+
# @rbs () -> Array[Messages::DumpGetReply]
|
|
328
519
|
# | () { (Messages::DumpGetReply) -> void } -> void
|
|
520
|
+
# @overload dump_get(**args)
|
|
521
|
+
# Returns an array when no block is given.
|
|
522
|
+
# @param [Hash] args
|
|
523
|
+
# @return [Array<Messages::DumpGetReply>]
|
|
524
|
+
# @overload dump_get(**args, &block)
|
|
525
|
+
# Yields each reply when a block is given.
|
|
526
|
+
# @param [Hash] args
|
|
527
|
+
# @yieldparam [Messages::DumpGetReply] reply
|
|
528
|
+
# @return [void]
|
|
529
|
+
# @see Messages::DumpGetRequest
|
|
329
530
|
def dump_get(**args, &block)
|
|
330
531
|
exchange_message(:"dump", Messages::DumpGetRequest, Messages::DumpGetReply, args, &block)
|
|
331
532
|
end
|
|
332
533
|
# Delete metrics.
|
|
333
534
|
#
|
|
334
535
|
# Requires CAP_NET_ADMIN in the initial user namespace.
|
|
335
|
-
#--
|
|
336
536
|
# @rbs (?addr_ipv4: ::Integer, ?addr_ipv6: ::String, ?saddr_ipv4: ::Integer, ?saddr_ipv6: ::String) -> void
|
|
537
|
+
# @param [Hash] args
|
|
538
|
+
# @option args [Integer] addr_ipv4
|
|
539
|
+
# @option args [String] addr_ipv6
|
|
540
|
+
# @option args [Integer] saddr_ipv4
|
|
541
|
+
# @option args [String] saddr_ipv6
|
|
542
|
+
# @return [void]
|
|
543
|
+
# @see Messages::DoDelRequest
|
|
337
544
|
def do_del(**args)
|
|
338
545
|
exchange_message(:"do", Messages::DoDelRequest, nil, args)
|
|
339
546
|
end
|
|
340
547
|
class AsyncOperations
|
|
341
|
-
#
|
|
548
|
+
# @private
|
|
342
549
|
def initialize(&exchange)
|
|
343
550
|
@exchange = exchange
|
|
344
551
|
end
|
|
345
552
|
# Retrieve metrics.
|
|
346
|
-
#--
|
|
347
553
|
# @rbs (?addr_ipv4: ::Integer, ?addr_ipv6: ::String, ?saddr_ipv4: ::Integer, ?saddr_ipv6: ::String) -> ::Nl::Async::Future[Messages::DoGetReply]
|
|
554
|
+
# @param [Hash] args
|
|
555
|
+
# @option args [Integer] addr_ipv4
|
|
556
|
+
# @option args [String] addr_ipv6
|
|
557
|
+
# @option args [Integer] saddr_ipv4
|
|
558
|
+
# @option args [String] saddr_ipv6
|
|
559
|
+
# @return [Nl::Async::Future<Messages::DoGetReply>]
|
|
560
|
+
# @see Messages::DoGetRequest
|
|
348
561
|
def do_get(**args)
|
|
349
562
|
@exchange.call(:"do", Messages::DoGetRequest, Messages::DoGetReply, args)
|
|
350
563
|
end
|
|
351
564
|
# Retrieve metrics.
|
|
352
|
-
#--
|
|
353
565
|
# @rbs () -> ::Nl::Async::Stream[Messages::DumpGetReply]
|
|
566
|
+
# @param [Hash] args
|
|
567
|
+
# @return [Nl::Async::Stream<Messages::DumpGetReply>]
|
|
568
|
+
# @see Messages::DumpGetRequest
|
|
354
569
|
def dump_get(**args)
|
|
355
570
|
@exchange.call(:"dump", Messages::DumpGetRequest, Messages::DumpGetReply, args)
|
|
356
571
|
end
|
|
357
572
|
# Delete metrics.
|
|
358
573
|
#
|
|
359
574
|
# Requires CAP_NET_ADMIN in the initial user namespace.
|
|
360
|
-
#--
|
|
361
575
|
# @rbs (?addr_ipv4: ::Integer, ?addr_ipv6: ::String, ?saddr_ipv4: ::Integer, ?saddr_ipv6: ::String) -> ::Nl::Async::Future[void]
|
|
576
|
+
# @param [Hash] args
|
|
577
|
+
# @option args [Integer] addr_ipv4
|
|
578
|
+
# @option args [String] addr_ipv6
|
|
579
|
+
# @option args [Integer] saddr_ipv4
|
|
580
|
+
# @option args [String] saddr_ipv6
|
|
581
|
+
# @return [Nl::Async::Future<void>]
|
|
582
|
+
# @see Messages::DoDelRequest
|
|
362
583
|
def do_del(**args)
|
|
363
584
|
@exchange.call(:"do", Messages::DoDelRequest, nil, args)
|
|
364
585
|
end
|
|
365
586
|
end
|
|
366
587
|
# Returns the asynchronous operation facade for this family.
|
|
367
|
-
#--
|
|
368
588
|
# @rbs (?stream_capacity: ::Integer?) -> AsyncOperations
|
|
589
|
+
# @param [::Integer, nil] stream_capacity
|
|
590
|
+
# @return [AsyncOperations]
|
|
369
591
|
def async(stream_capacity: nil)
|
|
370
592
|
return @async_operations ||= build_async_facade(AsyncOperations) if stream_capacity.nil?
|
|
371
593
|
build_async_facade(AsyncOperations, stream_capacity:)
|