1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
|
# Copyright (c) 2021, Dell Inc. or its subsidiaries. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
# See the LICENSE file for details.
#
# This file is part of NVMe STorage Appliance Services (nvme-stas).
# ==============================================================================
# STorage Appliance Connector Daemon (stacd) - configuration file
#
# In this file, options that are commented represent the default values used.
# Uncommented options override the default value.
[Global]
# tron: Trace-ON. Enable additional debug info
# Type: boolean
# Range: [false, true]
#tron=false
# hdr-digest: Protocol Data Unit (PDU) Header Digest. NVMe/TCP facilitates an
# optional PDU Header digest. Digests are calculated using the
# CRC32C algorithm.
# Type: boolean
# Range: [false, true]
#hdr-digest=false
# data-digest: Protocol Data Unit (PDU) Data Digest. NVMe/TCP facilitates an
# optional PDU Data digest. Digests are calculated using the
# CRC32C algorithm.
# Type: boolean
# Range: [false, true]
#data-digest=false
# kato: Keep Alive Timeout (KATO): This field specifies the timeout value
# for the Keep Alive feature in seconds. The default value for this
# field is 120 seconds (2 minutes).
# Type: Unsigned integer
# Range: 0..N
# Unit: Seconds
#kato=120
# nr-io-queues: Overrides the default number of I/O queues create by the
# driver.
# Type: Unsigned integer
# Range: 1..N
# Default: Depends on kernel and other run time
# factors (e.g. number of CPUs).
# nr-write-queues: Adds additional queues that will be used for write I/O.
# Type: Unsigned integer
# Range: 1..N
# Default: Depends on kernel and other run time
# factors (e.g. number of CPUs).
# nr-poll-queues: Adds additional queues that will be used for polling
# latency sensitive I/O.
# Type: Unsigned integer
# Range: 1..N
# Default: Depends on kernel and other run time
# factors (e.g. number of CPUs).
# queue-size: Overrides the default number of elements in the I/O queues
# created by the driver.
# Type: Unsigned integer
# Range: 16..1024
# Default: 128
#queue-size=128
# reconnect-delay: Overrides the default delay, in seconds, before reconnect
# is attempted after a connect loss.
# Type: Unsigned integer
# Range: 1..N
# Unit: Seconds
# Default: 10 (retry to connect every 10 seconds)
#reconnect-delay=10
# ctrl-loss-tmo: Overrides the default controller loss timeout period in
# seconds.
# Type: Unsigned integer
# Range: -1, 0..N where -1 means retry forever
# Unit: Seconds
# Default: 600 (retry to connect for up to 10 minutes)
#ctrl-loss-tmo=600
# disable-sqflow: Disables SQ flow control to omit head doorbell update for
# submission queues when sending nvme completions.
# Type: boolean
# Range: [false, true]
# Default: false
#disable-sqflow=false
# ignore-iface: This option controls whether connections with I/O Controllers
# (IOC) will be forced on a specific interface or will rely on
# the routing tables to determine the interface.
#
# See the man pages for details: man stacd.conf
#
# Type: boolean
# Range: [false, true]
# Default: true
#ignore-iface=false
# ip-family: With this you can specify whether stacd will support IPv4, IPv6,
# or both when connecting to I/O Controllers (IOC).
#
# See the man pages for details: man stacd.conf
#
# Type: String
# Range: [ipv4, ipv6, ipv4+ipv6]
# Default: ipv4+ipv6
#ip-family=ipv4+ipv6
# ==============================================================================
[I/O controller connection management]
# This section contains parameters to manage I/O controller connections.
# For example, parameters are provided to control disconnect policy. In other
# words, whether stacd will disconnect from IOCs on DLPE removal and which
# connections will be affected.
#
# Also, what should stacd do when a DLPE NCC bit (Not Connected to CDC) is
# asserted. Should stacd stop trying to connect to an I/O controller after a
# certain number of unsuccessful attempts.
#
# See the man pages for details: man stacd.conf
# disconnect-scope: Determines which connections, if any, will be the target of
# a potential disconnect on DLPE removal.
#
# Type: String
# Range: [only-stas-connections | all-connections-matching-disconnect-trtypes | no-disconnect]
# Default: only-stas-connections
#disconnect-scope=only-stas-connections
# disconnect-trtypes: Specify which connections should be audited based on the
# transport type. This parameter only applies when
# "disconnect-scope = all-connections-matching-disconnect-trtypes".
#
# Type: String
# Range: [tcp, rdma, fc, tcp+rdma, tcp+fc, rdma+fc, tcp+rdma+fc]
# Default: tcp
#disconnect-trtypes=tcp
# connect-attempts-on-ncc: The NCC bit (Not Connected to CDC) returned in a
# DLPE indicates whether a connection is currently
# established between the CDC and the subsystem listed
# in the DLPE.
#
# When the NCC bit is asserted, it may mean that the
# subsystem is offline or that fabrics connectivity is
# momentarily lost. If the host is also unable to
# connect to the subsystem, then there is no point in
# continuing to try to connect. In fact, the CDC will
# monitor the situation an inform the host (AEN) when
# connectivity is restored.
#
# This field is used to tell stacd how to behave when
# the NCC bit is asserted. How many times should it try
# to connect before give-up, or whether to keep trying
# indefinitely.
#
# Type: Integer
# Range: [0, 2..N], 0 means "Never stop trying". A
# non-0 value indicates the number of attempts
# before giving up. This value should never be
# set to 1. A value of 1 will automatically be
# increased to 2. That's because a single
# failure may be normal and a mimimum of 2
# attempts is required to conclude that a
# connection is not possible.
# Default: 0
#connect-attempts-on-ncc=0
# ==============================================================================
[Controllers]
# controller: I/O Controllers (IOC) are specified with this keyword.
#
# Syntax:
# controller = transport=<trtype>;traddr=<traddr>;trsvcid=<trsvcid>;host-traddr=<traddr>;host-iface=<iface>,nqn=<subnqn>
#
# transport=<trtype> [MANDATORY]
# This field specifies the network fabric being used for a NVMe-over-
# Fabrics network. Current string values include:
#
# Value Definition
# ------- -----------------------------------------------------------
# rdma The network fabric is an rdma network (RoCE, iWARP, Infiniband, basic rdma, etc)
# fc The network fabric is a Fibre Channel network.
# tcp The network fabric is a TCP/IP network.
# loop Connect to a NVMe over Fabrics target on the local host
#
# traddr=<traddr> [MANDATORY]
# This field specifies the network address of the Controller. For
# transports using IP addressing (e.g. rdma) this should be an IP-
# based address (ex. IPv4, IPv6). It could also be a resolvable host
# name (e.g. localhost).
#
# nqn=<subnqn> [MANDATORY]
# This field specifies the Subsystem's NVMe Qualified Name.
#
# trsvcid=<trsvcid> [OPTIONAL]
# This field specifies the transport service id. For transports using
# IP addressing (e.g. rdma) this field is the port number.
#
# Depending on the transport type, this field will default to either
# 8009 or 4420 as follows.
#
# UDP port 4420 and TCP port 4420 have been assigned by IANA
# for use by NVMe over Fabrics. NVMe/RoCEv2 controllers use UDP port
# 4420 by default. NVMe/iWARP controllers use TCP port 4420 by
# default.
#
# TCP port 4420 has been assigned for use by NVMe over Fabrics and TCP
# port 8009 has been assigned by IANA for use by NVMe over Fabrics
# discovery. TCP port 8009 is the default TCP port for NVMe/TCP
# discovery controllers. There is no default TCP port for NVMe/TCP I/O
# controllers, the Transport Service Identifier (TRSVCID) field in the
# Discovery Log Entry indicates the TCP port to use.
#
# The TCP ports that may be used for NVMe/TCP I/O controllers include
# TCP port 4420, and the Dynamic and/or Private TCP ports (i.e., ports
# in the TCP port number range from 49152 to 65535). NVMe/TCP I/O
# controllers should not use TCP port 8009. TCP port 4420 shall not be
# used for both NVMe/iWARP and NVMe/TCP at the same IP address on the
# same network.
#
# host-traddr=<traddr> [OPTIONAL]
# This field specifies the network address used on the host to connect
# to the Controller. For TCP, this sets the source address on the
# socket.
#
# host-iface=<iface> [OPTIONAL]
# This field specifies the network interface used on the host to
# connect to the Controller (e.g. IP eth1, enp2s0, enx78e7d1ea46da).
# This forces the connection to be made on a specific interface
# instead of letting the system decide.
#
# dhchap-ctrl-secret [OPTIONAL]
# NVMe In-band authentication controller secret (i.e. key) for
# bi-directional authentication; needs to be in ASCII format as
# specified in NVMe 2.0 section 8.13.5.8 'Secret representation'.
# Bi-directional authentication will be attempted when present.
#
# hdr-digest [OPTIONAL]
# See definition in [Global] section. This is used to override
# the value specified in the [Global] section.
#
# data-digest [OPTIONAL]
# See definition in [Global] section. This is used to override
# the value specified in the [Global] section.
#
# nr-io-queues [OPTIONAL]
# See definition in [Global] section. This is used to override
# the value specified in the [Global] section.
#
# nr-write-queues [OPTIONAL]
# See definition in [Global] section. This is used to override
# the value specified in the [Global] section.
#
# nr-poll-queues [OPTIONAL]
# See definition in [Global] section. This is used to override
# the value specified in the [Global] section.
#
# queue-size [OPTIONAL]
# See definition in [Global] section. This is used to override
# the value specified in the [Global] section.
#
# kato [OPTIONAL]
# See definition in [Global] section. This is used to override
# the value specified in the [Global] section.
#
# reconnect-delay [OPTIONAL]
# See definition in [Global] section. This is used to override
# the value specified in the [Global] section.
#
# ctrl-loss-tmo [OPTIONAL]
# See definition in [Global] section. This is used to override
# the value specified in the [Global] section.
#
# disable-sqflow [OPTIONAL]
# See definition in [Global] section. This is used to override
# the value specified in the [Global] section.
#
# Multiple DCs may be specified on separate lines like this (this is
# just an example and does not represent default values):
#
# controller = transport=tcp;traddr=localhost;nqn=nqn.1988-11.com.dell:PowerSANxxx:01:20210225100113-454f73093ceb4847a7bdfc6e34ae8e28
# controller = transport=tcp;traddr=2001:db8::370:7334;host-iface=enp0s8;nqn=nqn.starship-enterprise
# controller = transport=fc;traddr=nn-0x204600a098cbcac6:pn-0x204700a098cbcac6;nqn=nqn.romulan-empire
# ...
# Type: String
#
# Default: There is no default controller. STAC will not try to
# connect to a default I/O Controller.
#controller=
# exclude: Excluded controllers. This keyword allows configuring I/O
# controllers that should not be connected to (whatever the
# reason may be).
#
# The syntax is the same as for "controller=", except that the key
# host-traddr does not apply. Multiple "exclude=" keywords may
# appear in the config file to define the exclusion list.
#
# Note 1: A minimal match approach is used to eliminate unwanted
# controllers. That is, you do not need to specify all the
# parameters to identify a controller. Just specifying the
# host-iface, for example, can be used to exclude all controllers
# on an interface.
#
# Note 2: "exclude=" takes precedence over "controller=". A
# controller specified by the "controller=" keyword, can be
# eliminated by the "exclude=" keyword.
#
# Syntax: Same as "controller=" above.
# Type: String
#
# Example:
# exclude = transport=tcp;traddr=fe80::2c6e:dee7:857:26bb # Eliminate a specific address
# exclude = host-iface=enp0s8 # Eliminate everything on this interface
#exclude=
|