# 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 minimum 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=;traddr=;trsvcid=;host-traddr=;host-iface=,nqn= # # transport= [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= [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= [MANDATORY] # This field specifies the Subsystem's NVMe Qualified Name. # # 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= [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= [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=