1
0
Fork 0
libnvme/doc/rst/nbft.rst
Daniel Baumann bd2208f611
Merging upstream version 1.11.1.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-02-16 10:51:37 +01:00

1889 lines
50 KiB
ReStructuredText

.. _nbft.h:
**nbft.h**
NVM Express Boot Specification, Revision 1.0
Note: this API is currently unstable, subject to further additions.
.. c:type:: enum nbft_desc_type
NBFT Elements - Descriptor Types (Figure 5)
**Constants**
``NBFT_DESC_HEADER``
Header: an ACPI structure header with some additional
NBFT specific info.
``NBFT_DESC_CONTROL``
Control Descriptor: indicates the location of host,
HFI, SSNS, security, and discovery descriptors.
``NBFT_DESC_HOST``
Host Descriptor: host information.
``NBFT_DESC_HFI``
HFI Descriptor: an indexable table of HFI Descriptors,
one for each fabric interface on the host.
``NBFT_DESC_SSNS``
Subsystem Namespace Descriptor: an indexable table
of SSNS Descriptors.
``NBFT_DESC_SECURITY``
Security Descriptor: an indexable table of Security
descriptors.
``NBFT_DESC_DISCOVERY``
Discovery Descriptor: an indexable table of Discovery
Descriptors.
``NBFT_DESC_HFI_TRINFO``
HFI Transport Descriptor: indicated by an HFI Descriptor,
corresponds to a specific transport for a single HFI.
``NBFT_DESC_RESERVED_8``
Reserved.
``NBFT_DESC_SSNS_EXT_INFO``
SSNS Extended Info Descriptor: indicated by an SSNS
Descriptor if required.
.. c:type:: enum nbft_trtype
NBFT Interface Transport Types (Figure 7)
**Constants**
``NBFT_TRTYPE_TCP``
NVMe/TCP (802.3 + TCP/IP). String Designator "tcp".
.. c:type:: struct nbft_heap_obj
NBFT Header Driver Signature
**Definition**
::
struct nbft_heap_obj {
__le32 offset;
__le16 length;
};
**Members**
``offset``
Offset in bytes of the heap object, if any, from byte offset 0h
of the NBFT Table Header.
``length``
Length in bytes of the heap object, if any.
.. c:type:: struct nbft_header
NBFT Table - Header (Figure 8)
**Definition**
::
struct nbft_header {
char signature[4];
__le32 length;
__u8 major_revision;
__u8 checksum;
char oem_id[6];
char oem_table_id[8];
__le32 oem_revision;
__le32 creator_id;
__le32 creator_revision;
__le32 heap_offset;
__le32 heap_length;
struct nbft_heap_obj driver_dev_path_sig;
__u8 minor_revision;
__u8 reserved[13];
};
**Members**
``signature``
Signature: An ASCII string representation of the table
identifier. This field shall be set to the value 4E424654h
(i.e. "NBFT", see #NBFT_HEADER_SIG).
``length``
Length: The length of the table, in bytes, including the
header, starting from offset 0h. This field is used to record
the size of the entire table.
``major_revision``
Major Revision: The major revision of the structure
corresponding to the Signature field. Larger major revision
numbers should not be assumed backward compatible to lower
major revision numbers with the same signature.
``checksum``
Checksum: The entire table, including the Checksum field,
shall sum to 0h to be considered valid.
``oem_id``
OEMID shall be populated by the NBFT driver writer by
an OEM-supplied string that identifies the OEM. All
trailing bytes shall be NULL.
``oem_table_id``
OEM Table ID: This field shall be populated by the NBFT
driver writer with an OEM-supplied string that the OEM
uses to identify the particular data table. This field is
particularly useful when defining a definition block to
distinguish definition block functions. The OEM assigns
each dissimilar table a new OEM Table ID.
``oem_revision``
OEM Revision: An OEM-supplied revision number. Larger
numbers are assumed to be newer revisions.
``creator_id``
Creator ID: Vendor ID of utility that created the table.
For instance, this may be the ID for the ASL Compiler.
``creator_revision``
Creator Revision: Revision of utility that created the
table. For instance, this may be the ID for the ASL Compiler.
``heap_offset``
Heap Offset (HO): This field indicates the offset in bytes
of the heap, if any, from byte offset 0h of the NBFT
Table Header.
``heap_length``
Heap Length (HL): The length of the heap, if any.
``driver_dev_path_sig``
Driver Signature Heap Object Reference: This field indicates
the offset in bytes of a heap object containing the Driver
Signature, if any, from byte offset 0h of the NBFT Table
Header.
``minor_revision``
Minor Revision: The minor revision of the structure
corresponding to the Signature field. If the major revision
numbers are the same, any minor revision number differences
shall be backwards compatible with the same signature.
``reserved``
Reserved.
.. c:type:: struct nbft_control
NBFT Table - Control Descriptor (Figure 8)
**Definition**
::
struct nbft_control {
__u8 structure_id;
__u8 major_revision;
__u8 minor_revision;
__u8 reserved1;
__le16 csl;
__u8 flags;
__u8 reserved2;
struct nbft_heap_obj hdesc;
__u8 hsv;
__u8 reserved3;
__le32 hfio;
__le16 hfil;
__u8 hfiv;
__u8 num_hfi;
__le32 ssnso;
__le16 ssnsl;
__u8 ssnsv;
__u8 num_ssns;
__le32 seco;
__le16 secl;
__u8 secv;
__u8 num_sec;
__le32 disco;
__le16 discl;
__u8 discv;
__u8 num_disc;
__u8 reserved4[16];
};
**Members**
``structure_id``
Structure ID: This field specifies the element (refer to
:c:type:`enum nbft_desc_type <nbft_desc_type>`). This field shall be set to 1h (i.e.,
Control, #NBFT_DESC_CONTROL).
``major_revision``
Major Revision: The major revision of the structure corresponding
to the Signature field. Larger major revision numbers should
not be assumed backward compatible to lower major revision
numbers with the same signature.
``minor_revision``
Minor Revision: The minor revision of the structure corresponding
to the signature field. If the major revision numbers are
the same, any minor revision number differences shall be backwards
compatible with the same signature.
``reserved1``
Reserved.
``csl``
Control Structure Length (CSL): This field indicates the length
in bytes of the Control Descriptor.
``flags``
Flags, see :c:type:`enum nbft_control_flags <nbft_control_flags>`.
``reserved2``
Reserved.
``hdesc``
Host Descriptor (HDESC): This field indicates the location
and length of the Host Descriptor (see :c:type:`struct nbft_host <nbft_host>`).
``hsv``
Host Descriptor Version (HSV): This field indicates the version
of the Host Descriptor.
``reserved3``
Reserved.
``hfio``
HFI Descriptor List Offset (HFIO): If this field is set to
a non-zero value, then this field indicates the offset in bytes
of the HFI Descriptor List, if any, from byte offset 0h of the
NBFT Table Header. If the **num_hfi** field is cleared to 0h,
then this field is reserved.
``hfil``
HFI Descriptor Length (HFIL): This field indicates the length
in bytes of each HFI Descriptor, if any. If the **num_hfi** field
is cleared to 0h, then this field is reserved.
``hfiv``
HFI Descriptor Version (HFIV): This field indicates the version
of each HFI Descriptor.
``num_hfi``
Number of Host Fabric Interface Descriptors (NumHFI): This field
indicates the number of HFI Descriptors (see :c:type:`struct nbft_hfi <nbft_hfi>`)
in the HFI Descriptor List, if any. If no interfaces have been
configured, then this field shall be cleared to 0h.
``ssnso``
SSNS Descriptor List Offset (SSNSO):: This field indicates
the offset in bytes of the SSNS Descriptor List, if any, from
byte offset 0h of the NBFT Table Header. If the **num_ssns** field
is cleared to 0h, then this field is reserved.
``ssnsl``
SSNS Descriptor Length (SSNSL): This field indicates the length
in bytes of each SSNS Descriptor, if any. If the **num_ssns**
field is cleared to 0h, then this field is reserved.
``ssnsv``
SSNS Descriptor Version (SSNSV): This field indicates the version
of the SSNS Descriptor.
``num_ssns``
Number of Subsystem and Namespace Descriptors (NumSSNS): This
field indicates the number of Subsystem Namespace (SSNS)
Descriptors (see :c:type:`struct nbft_ssns <nbft_ssns>`) in the SSNS Descriptor List,
if any.
``seco``
Security Profile Descriptor List Offset (SECO): This field
indicates the offset in bytes of the Security Profile Descriptor
List, if any, from byte offset 0h of the NBFT Table Header.
If the **num_sec** field is cleared to 0h, then this field
is reserved.
``secl``
Security Profile Descriptor Length (SECL): This field indicates
the length in bytes of each Security Profile Descriptor, if any.
If the **num_sec** field is cleared to 0h, then this field
is reserved.
``secv``
Security Profile Descriptor Version (SECV): This field indicates
the version of the Security Profile Descriptor.
``num_sec``
Number of Security Profile Descriptors (NumSec): This field
indicates the number of Security Profile Descriptors
(see :c:type:`struct nbft_security <nbft_security>`), if any, in the Security Profile
Descriptor List.
``disco``
Discovery Descriptor Offset (DISCO): This field indicates
the offset in bytes of the Discovery Descriptor List, if any,
from byte offset 0h of the NBFT Table Header. If the **num_disc**
field is cleared to 0h, then this field is reserved.
``discl``
Discovery Descriptor Length (DISCL): This field indicates
the length in bytes of each Discovery Descriptor, if any.
If the **num_disc** field is cleared to 0h, then this field
is reserved.
``discv``
Discovery Descriptor Version (DISCV): This field indicates
the version of the Discovery Descriptor.
``num_disc``
Number of Discovery Descriptors (NumDisc): This field indicates
the number of Discovery Descriptors (see :c:type:`struct nbft_discovery <nbft_discovery>`),
if any, in the Discovery Descriptor List, if any.
``reserved4``
Reserved.
.. c:type:: enum nbft_control_flags
Control Descriptor Flags
**Constants**
``NBFT_CONTROL_VALID``
Block Valid: indicates that the structure is valid.
.. c:type:: struct nbft_host
Host Descriptor (Figure 9)
**Definition**
::
struct nbft_host {
__u8 structure_id;
__u8 flags;
__u8 host_id[16];
struct nbft_heap_obj host_nqn_obj;
__u8 reserved[8];
};
**Members**
``structure_id``
Structure ID: This field shall be set to 2h (i.e.,
Host Descriptor; #NBFT_DESC_HOST).
``flags``
Host Flags, see :c:type:`enum nbft_host_flags <nbft_host_flags>`.
``host_id``
Host ID: This field shall be set to the Host Identifier. This
field shall not be empty if the NBFT and NVMe Boot are supported
by the Platform.
``host_nqn_obj``
Host NQN Heap Object Reference: this field indicates a heap
object containing a Host NQN. This object shall not be empty
if the NBFT and NVMe Boot are supported by the Platform.
``reserved``
Reserved.
.. c:type:: enum nbft_host_flags
Host Flags
**Constants**
``NBFT_HOST_VALID``
Descriptor Valid: If set to 1h, then this
descriptor is valid. If cleared to 0h, then
this descriptor is reserved.
``NBFT_HOST_HOSTID_CONFIGURED``
HostID Configured: If set to 1h, then the
Host ID field contains an administratively-configured
value. If cleared to 0h, then the Host ID
field contains a driver default value.
``NBFT_HOST_HOSTNQN_CONFIGURED``
Host NQN Configured: If set to 1h, then the
Host NQN indicated by the Host NQN Heap Object
Reference field (:c:type:`struct nbft_host <nbft_host>`.host_nqn)
contains an administratively-configured value.
If cleared to 0h, then the Host NQN indicated
by the Host NQN Offset field contains a driver
default value.
``NBFT_HOST_PRIMARY_ADMIN_MASK``
Mask to get Primary Administrative Host Descriptor:
indicates whether the Host Descriptor in this
NBFT was selected as the primary NBFT for
administrative purposes of platform identity
as a hint to the OS. If multiple NBFT tables
are present, only one NBFT should be administratively
selected. There is no enforcement mechanism
for this to be coordinated between multiple NBFT
tables, but this field should be set to Selected
(#NBFT_HOST_PRIMARY_ADMIN_SELECTED) if
more than one NBFT is present.
``NBFT_HOST_PRIMARY_ADMIN_NOT_INDICATED``
Not Indicated by Driver: The driver that created
this NBFT provided no administrative priority
hint for this NBFT.
``NBFT_HOST_PRIMARY_ADMIN_UNSELECTED``
Unselected: The driver that created this NBFT
explicitly indicated that this NBFT should
not be prioritized over any other NBFT.
``NBFT_HOST_PRIMARY_ADMIN_SELECTED``
Selected: The driver that created this NBFT
explicitly indicated that this NBFT should
be prioritized over any other NBFT.
.. c:type:: struct nbft_hfi
Host Fabric Interface (HFI) Descriptor (Figure 11)
**Definition**
::
struct nbft_hfi {
__u8 structure_id;
__u8 index;
__u8 flags;
__u8 trtype;
__u8 reserved1[12];
struct nbft_heap_obj trinfo_obj;
__u8 reserved2[10];
};
**Members**
``structure_id``
Structure ID: This field shall be set to 3h (i.e., Host Fabric
Interface Descriptor; #NBFT_DESC_HFI).
``index``
HFI Descriptor Index: This field indicates the number of this
HFI Descriptor in the Host Fabric Interface Descriptor List.
``flags``
HFI Descriptor Flags, see :c:type:`enum nbft_hfi_flags <nbft_hfi_flags>`.
``trtype``
HFI Transport Type, see :c:type:`enum nbft_trtype <nbft_trtype>`.
``reserved1``
Reserved.
``trinfo_obj``
HFI Transport Info Descriptor Heap Object Reference: If this
field is set to a non-zero value, then this field indicates
the location and size of a heap object containing
a HFI Transport Info.
``reserved2``
Reserved.
.. c:type:: enum nbft_hfi_flags
HFI Descriptor Flags
**Constants**
``NBFT_HFI_VALID``
Descriptor Valid: If set to 1h, then this descriptor is valid.
If cleared to 0h, then this descriptor is reserved.
.. c:type:: struct nbft_hfi_info_tcp
HFI Transport Info Descriptor - NVMe/TCP (Figure 13)
**Definition**
::
struct nbft_hfi_info_tcp {
__u8 structure_id;
__u8 version;
__u8 trtype;
__u8 trinfo_version;
__le16 hfi_index;
__u8 flags;
__le32 pci_sbdf;
__u8 mac_addr[6];
__le16 vlan;
__u8 ip_origin;
__u8 ip_address[16];
__u8 subnet_mask_prefix;
__u8 ip_gateway[16];
__u8 reserved1;
__le16 route_metric;
__u8 primary_dns[16];
__u8 secondary_dns[16];
__u8 dhcp_server[16];
struct nbft_heap_obj host_name_obj;
__u8 reserved2[18];
};
**Members**
``structure_id``
Structure ID: This field shall be set to 7h (i.e.,
HFI Transport Info; #NBFT_DESC_HFI_TRINFO).
``version``
Version: This field shall be set to 1h.
``trtype``
HFI Transport Type, see :c:type:`enum nbft_trtype <nbft_trtype>`: This field
shall be set to 03h (i.e., NVMe/TCP; #NBFT_TRTYPE_TCP).
``trinfo_version``
Transport Info Version: Implementations compliant to this
specification shall set this field to 1h.
``hfi_index``
HFI Descriptor Index: The value of the HFI Descriptor Index
field of the HFI Descriptor (see :c:type:`struct nbft_hfi <nbft_hfi>`.index)
whose HFI Transport Info Descriptor Heap Object Reference
field indicates this HFI Transport Info Descriptor.
``flags``
HFI Transport Flags, see :c:type:`enum nbft_hfi_info_tcp_flags <nbft_hfi_info_tcp_flags>`.
``pci_sbdf``
PCI Express Routing ID for the HFI Transport Function:
This field indicates the PCI Express Routing ID as specified
in the PCI Express Base Specification.
``mac_addr``
MAC Address: The MAC address of this HFI, in EUI-48TM format,
as defined in the IEEE Guidelines for Use of Extended Unique
Identifiers. This field shall be set to a non-zero value.
``vlan``
VLAN: If this field is set to a non-zero value, then this
field contains the VLAN identifier if the VLAN associated
with this HFI, as defined in IEEE 802.1q-2018. If no VLAN
is associated with this HFI, then this field shall be cleared
to 0h.
``ip_origin``
IP Origin: If this field is set to a non-zero value, then
this field indicates the source of Ethernet L3 configuration
information used by the driver for this interface. Valid
values are defined in the Win 32 API: NL_PREFIX_ORIGIN
enumeration specification. This field should be cleared
to 0h if the IP Origin field is unused by driver.
``ip_address``
IP Address: This field indicates the IPv4 or IPv6 address
of this HFI. This field shall be set to a non-zero value.
``subnet_mask_prefix``
Subnet Mask Prefix: This field indicates the IPv4 or IPv6
subnet mask in CIDR routing prefix notation.
``ip_gateway``
IP Gateway: If this field is set to a non-zero value, this
field indicates the IPv4 or IPv6 address of the IP gateway
for this HFI. If this field is cleared to 0h, then
no IP gateway is specified.
``reserved1``
Reserved.
``route_metric``
Route Metric: If this field is set to a non-zero value,
this field indicates the cost value for the route indicated
by this HF. This field contains the value utilized by the
pre-OS driver when chosing among all available routes. Lower
values relate to higher priority. Refer to IETF RFC 4249.
If the pre-OS driver supports routing and did not configure
a specific route metric for this interface, then the pre-OS
driver should set this value to 500. If the pre-OS driver
does not support routing, then this field should be cleared
to 0h.
``primary_dns``
Primary DNS: If this field is set to a non-zero value,
this field indicates the IPv4 or IPv6 address of the
Primary DNS server for this HFI, if any, from byte offset
0h of the NBFT Table Header. If this field is cleared to 0h,
then no Primary DNS is specified.
``secondary_dns``
Secondary DNS: If this field is set to a non-zero value,
this field indicates the IPv4 or IPv6 address of
the Secondary DNS server for this HFI, if any, from byte
offset 0h of the NBFT Table Header. If this field is
cleared to 0h, then no Secondary DNS is specified.
``dhcp_server``
DHCP Server: If the DHCP Override bit is set to 1h, then
this field indicates the IPv4 or IPv6 address of the DHCP
server used to assign this HFI address. If that bit is
cleared to 0h, then this field is reserved.
``host_name_obj``
Host Name Heap Object Reference: If this field is set
to a non-zero value, then this field indicates the location
and size of a heap object containing a Host Name string.
``reserved2``
Reserved.
.. c:type:: enum nbft_hfi_info_tcp_flags
HFI Transport Flags
**Constants**
``NBFT_HFI_INFO_TCP_VALID``
Descriptor Valid: if set to 1h, then this
descriptor is valid. If cleared to 0h, then
this descriptor is reserved.
``NBFT_HFI_INFO_TCP_GLOBAL_ROUTE``
Global Route vs. Link Local Override Flag:
if set to 1h, then the BIOS utilized this
interface described by HFI to be the default
route with highest priority. If cleared to 0h,
then routes are local to their own scope.
``NBFT_HFI_INFO_TCP_DHCP_OVERRIDE``
DHCP Override: if set to 1, then HFI information
was populated by consuming the DHCP on this
interface. If cleared to 0h, then the HFI
information was set administratively by
a configuration interface to the driver and
pre-OS envrionment.
.. c:type:: struct nbft_ssns
Subsystem Namespace (SSNS) Descriptor (Figure 15)
**Definition**
::
struct nbft_ssns {
__u8 structure_id;
__le16 index;
__le16 flags;
__u8 trtype;
__le16 trflags;
__u8 primary_discovery_ctrl_index;
__u8 reserved1;
struct nbft_heap_obj subsys_traddr_obj;
struct nbft_heap_obj subsys_trsvcid_obj;
__le16 subsys_port_id;
__le32 nsid;
__u8 nidt;
__u8 nid[16];
__u8 security_desc_index;
__u8 primary_hfi_desc_index;
__u8 reserved2;
struct nbft_heap_obj secondary_hfi_assoc_obj;
struct nbft_heap_obj subsys_ns_nqn_obj;
struct nbft_heap_obj ssns_extended_info_desc_obj;
__u8 reserved3[62];
};
**Members**
``structure_id``
Structure ID: This field shall be set to 4h
(i.e., SSNS; #NBFT_DESC_SSNS).
``index``
SSNS Descriptor Index: This field indicates the number
of this Subsystem Namespace Descriptor in the
Subsystem Namespace Descriptor List.
``flags``
SSNS Flags, see :c:type:`enum nbft_ssns_flags <nbft_ssns_flags>`.
``trtype``
Transport Type, see :c:type:`enum nbft_trtype <nbft_trtype>`.
``trflags``
Transport Specific Flags, see :c:type:`enum nbft_ssns_trflags <nbft_ssns_trflags>`.
``primary_discovery_ctrl_index``
Primary Discovery Controller Index: The Discovery
Descriptor Index field of the Discovery Descriptor
(see :c:type:`struct nbft_discovery <nbft_discovery>`) that is associated with
this SSNS Descriptor. If a Discovery controller was
used to establish this record this value shall
be set to a non-zero value. If this namespace was
associated with multiple Discovery controllers,
those Discovery controllers shall have records
in the Discovery Descriptor to facilitate multi-path
rediscovery as required. If no Discovery controller
was utilized to inform this namespace record,
this field shall be cleared to 0h.
``reserved1``
Reserved.
``subsys_traddr_obj``
Subsystem Transport Address Heap Object Reference:
This field indicates the location and size of a heap
object containing the Subsystem Transport Address.
For IP based transports types, shall be an IP Address.
``subsys_trsvcid_obj``
Subsystem Transport Service Identifier Heap Object Reference:
This field indicates the location and size of a heap
object containing an array of bytes indicating
the Subsystem Transport Service Identifier.
See :c:type:`enum nbft_trtype <nbft_trtype>`.
``subsys_port_id``
Subsystem Port ID: Port in the NVM subsystem
associated with this transport address used by
the pre-OS driver.
``nsid``
Namespace ID: This field indicates the namespace
identifier (NSID) of the namespace indicated by
this descriptor. This field shall be cleared to 0h
if not specified by the user. If this value is cleared
to 0h, then consumers of the NBFT shall rely
on the NID.
``nidt``
Namespace Identifier Type (NIDT): This field
contains the value of the Namespace Identifier Type (NIDT)
field in the Namespace Identification Descriptor
for the namespace indicated by this descriptor.
If a namespace supports multiple NIDT entries
for uniqueness, the order of preference is NIDT field
value of 3h (i.e., UUID) before 2h (i.e., NSGUID),
and 2h before 1h (i.e., EUI-64).
``nid``
Namespace Identifier (NID): This field contains
the value of the Namespace Identifier (NID) field
in the Namespace Identification Descriptor for
the namespace indicated by this descriptor.
``security_desc_index``
Security Profile Descriptor Index: If the Use Security
Flag bit in the SSNS Flags field is set to 1h, then
this field indicates the value of the Security Profile
Descriptor Index field of the Security Profile
Descriptor (see :c:type:`struct nbft_security <nbft_security>`) associated
with this namespace. If the Use Security Flag bit
is cleared to 0h, then no Security Profile Descriptor
is associated with this namespace and this field
is reserved.
``primary_hfi_desc_index``
Primary HFI Descriptor Index: This field indicates
the value of the HFI Descriptor Index field of the
HFI Descriptor (see :c:type:`struct nbft_hfi <nbft_hfi>`) for the
interface associated with this namespace. If multiple
HFIs are associated with this record, subsequent
interfaces should be populated in the Secondary
HFI Associations field.
``reserved2``
Reserved.
``secondary_hfi_assoc_obj``
Secondary HFI Associations Heap Object Reference:
If this field is set to a non-zero value, then
this field indicates an array of bytes, in which
each byte contains the value of the HFI Descriptor
Index field of an HFI Descriptor in the HFI Descriptor
List. If this field is cleared to 0h, then no
secondary HFI associations are specified.
``subsys_ns_nqn_obj``
Subsystem and Namespace NQN Heap Object Reference:
This field indicates the location and size of
a heap object containing the Subsystem and Namespace NQN.
``ssns_extended_info_desc_obj``
SSNS Extended Information Descriptor Heap Object
Reference: If the SSNS Extended Info In-use Flag
bit is set to 1h, then this field indicates the
offset in bytes of a heap object containing an
SSNS Extended Information Descriptor
(see :c:type:`struct nbft_ssns_ext_info <nbft_ssns_ext_info>`) heap object
from byte offset 0h of the NBFT Table Header.
If the SSNS Extended Info In-use Flag bit is cleared
to 0h, then this field is reserved.
``reserved3``
Reserved.
.. c:type:: enum nbft_ssns_flags
Subsystem and Namespace Specific Flags Field (Figure 16)
**Constants**
``NBFT_SSNS_VALID``
Descriptor Valid: If set to 1h, then this descriptor
is valid. If cleared to 0h, then this descriptor
is not valid. A host that supports NVMe-oF Boot,
but does not currently have a remote Subsystem
and Namespace assigned may clear this bit to 0h.
``NBFT_SSNS_NON_BOOTABLE_ENTRY``
Non-bootable Entry Flag: If set to 1h, this flag
indicates that this SSNS Descriptor contains
a namespace of administrative purpose to the boot
process, but the pre-OS may not have established
connectivity to or evaluated the contents of this
Descriptor. Such namespaces may contain supplemental
data deemed relevant by the Administrator as part
of the pre-OS to OS hand off. This may include
properties such as a UEFI device path that may
not have been created for this namespace. This means
an OS runtime may still require the contents
of such a namespace to complete later stages
of boot. If cleared to 0h, then this namespace did
not have any special administrative intent.
``NBFT_SSNS_USE_SECURITY_FIELD``
Use Security Flag: If set to 1h, then there is
a Security Profile Descriptor associated with this
SSNS record and the Security Profile Descriptor Index
field is valid. If cleared to 0h, then there is
no Security Profile Descriptor associated with this
SSNS record and the Security Profile Descriptor Index
field is not valid.
``NBFT_SSNS_DHCP_ROOT_PATH_OVERRIDE``
DHCP Root-Path Override Flag: If set to 1h, then
this SSNS descriptor was populated by consuming
the DHCP Root-Path on this interface. If cleared
to 0h, then the DHCP Root-Path was not used
in populating the SSNS descriptor.
``NBFT_SSNS_EXTENDED_INFO_IN_USE``
SSNS Extended Info In-use Flag: If set to 1h,
then the SSNS Extended Information Offset field
and the SSNS Extended Information Length field
are valid. This flag, if set to 1h, indicates
that a Subsystem and Namespace Extended Information
Descriptor corresponding to this descriptor is present.
``NBFT_SSNS_SEPARATE_DISCOVERY_CTRL``
Separate Discovery Controller Flag: If set to 1h,
then the Discovery controller associated with
this volume is on a different transport address
than the specified in the Subsystem Transport
Address Heap Object Reference. If cleared to 0h,
then the Discovery controller is the same as the
Subsystem Transport Address Heap Object Reference.
``NBFT_SSNS_DISCOVERED_NAMESPACE``
Discovered Namespace Flag: If set to 1h, then
this namespace was acquired through discovery.
If cleared to 0h, then this namespace was
explicitly configured in the system.
``NBFT_SSNS_UNAVAIL_NAMESPACE_MASK``
Mask to get Unavailable Namespace Flag: This
field indicates the availability of the namespace
at a specific point in time. Such use is only
a hint and its use does not guarantee the availability
of that referenced namespace at any future point in time.
``NBFT_SSNS_UNAVAIL_NAMESPACE_NOTIND``
Not Indicated by Driver: No information is provided.
``NBFT_SSNS_UNAVAIL_NAMESPACE_AVAIL``
Available: A referenced namespace described by this
flag was previously accessible by the pre-OS driver.
``NBFT_SSNS_UNAVAIL_NAMESPACE_UNAVAIL``
Unavailable: This namespace was administratively
configured but unattempted, unavailable or
inaccessible when establishing connectivity
by the pre-OS driver.
.. c:type:: enum nbft_ssns_trflags
SSNS Transport Specific Flags Field (Figure 17)
**Constants**
``NBFT_SSNS_TRFLAG_VALID``
Transport Specific Flags in Use: If set to 1h, then
this descriptor is valid. If cleared to 0h, then
this descriptor is not valid.
``NBFT_SSNS_PDU_HEADER_DIGEST``
PDU Header Digest (HDGST) Flag: If set to 1h, then
the host or administrator required the connection
described by this Subsystem and Namespace Descriptor
to use the NVM Header Digest Enabled. A consumer
of this information should attempt to use NVM Header
Digest when recreating this connection if enabled.
If cleared to 0h, then the host or administrator
did not require the connection described by this
Subsystem and Namespace Descriptor to use the
NVM Header Digest Enabled.
``NBFT_SSNS_DATA_DIGEST``
Data Digest (DDGST) Flag: If set to 1h, then
the host or administrator required the connection
described by this Subsystem and Namespace Descriptor
to use the NVM Data Digest Enabled. If cleared
to 0h, then the host or administrator did not
require the connection described by this Subsystem
and Namespace Descriptor to use the NVM Data Digest
Enabled. A consumer of this field should attempt
to use NVM Data Digest when recreating this
connection if enabled.
.. c:type:: struct nbft_ssns_ext_info
Subsystem and Namespace Extended Information Descriptor (Figure 19)
**Definition**
::
struct nbft_ssns_ext_info {
__u8 structure_id;
__u8 version;
__le16 ssns_index;
__le32 flags;
__le16 cntlid;
__le16 asqsz;
struct nbft_heap_obj dhcp_root_path_str_obj;
};
**Members**
``structure_id``
Structure ID: This field shall be set to 9h
(i.e., SSNS Extended Info; #NBFT_DESC_SSNS_EXT_INFO).
``version``
Version: This field shall be set to 1h.
``ssns_index``
SSNS Descriptor Index: This field indicates the value
of the SSNS Descriptor Index field of the Subsystem
and Namespace Descriptor (see :c:type:`struct nbft_ssns <nbft_ssns>`) whose
SSNS Extended Information Descriptor Heap Object
Reference field indicates this descriptor.
``flags``
Flags, see :c:type:`enum nbft_ssns_ext_info_flags <nbft_ssns_ext_info_flags>`.
``cntlid``
Controller ID: The controller identifier of the first
controller associated with the Admin Queue by the driver.
If a controller identifier is not administratively
specified or direct configuration is not supported
by the driver, then this field shall be cleared to 0h.
``asqsz``
Admin Submission Queue Size (ASQSZ): The Admin Submission
Queue Size utilized for the respective SSNS by the driver.
``dhcp_root_path_str_obj``
DHCP Root Path String Heap Object Reference: If the
SSNS DHCP Root Path Override (#NBFT_SSNS_DHCP_ROOT_PATH_OVERRIDE)
flag bit is set to 1h, then this field indicates
the offset in bytes of a heap object containing
an DHCP Root Path String used by the driver. If the
SNSS DHCP Root Path Override flag bit is cleared to 0h,
then this field is reserved.
.. c:type:: enum nbft_ssns_ext_info_flags
Subsystem and Namespace Extended Information Descriptor Flags
**Constants**
``NBFT_SSNS_EXT_INFO_VALID``
Descriptor Valid: If set to 1h, then this descriptor
is valid. If cleared to 0h, then this descriptor
is reserved.
``NBFT_SSNS_EXT_INFO_ADMIN_ASQSZ``
Administrative ASQSZ: If set to 1h, then the value
of the ASQSZ field was provided by administrative
configuration for this SSNS record. If cleared
to 0h, then the value of the ASQSZ field was
either obtained by discovery or assumed
by the driver.
.. c:type:: struct nbft_security
Security Profile Descriptor (Figure 21)
**Definition**
::
struct nbft_security {
__u8 structure_id;
__u8 index;
__le16 flags;
__u8 secret_type;
__u8 reserved1;
struct nbft_heap_obj sec_chan_alg_obj;
struct nbft_heap_obj auth_proto_obj;
struct nbft_heap_obj cipher_suite_obj;
struct nbft_heap_obj dh_grp_obj;
struct nbft_heap_obj sec_hash_func_obj;
struct nbft_heap_obj sec_keypath_obj;
__u8 reserved2[22];
};
**Members**
``structure_id``
Structure ID: This field shall be set to 5h
(i.e., Security; #NBFT_DESC_SECURITY).
``index``
Security Profile Descriptor Index: This field indicates
the number of this Security Profile Descriptor in the
Security Profile Descriptor List.
``flags``
Security Profile Descriptor Flags, see :c:type:`enum nbft_security_flags <nbft_security_flags>`.
``secret_type``
Secret Type, see :c:type:`enum nbft_security_secret_type <nbft_security_secret_type>`.
``reserved1``
Reserved.
``sec_chan_alg_obj``
Secure Channel Algorithm Heap Object Reference: If the
Security Policy List field is set to 1h, then this field
indicates the location and size of a heap object containing
a list of secure channel algorithms. The list is an array
of bytes and the values are defined in the Security Type
(SECTYPE) field in the Transport Specific Address Subtype
Definition in the NVMe TCP Transport Specification.
If the Security Policy List field is cleared to 0h, then
this field is reserved.
``auth_proto_obj``
Authentication Protocols Heap Object Reference: If the
Authentication Policy List field is set to 1h, then this
field indicates the location and size of a heap object
containing a list of authentication protocol identifiers.
If the Authentication Policy List field is cleared to 0h,
then this field is reserved.
``cipher_suite_obj``
Cipher Suite Offset Heap Object Reference: If the Cipher
Suites Restricted by Policy bit is set to 1h, then this
field indicates the location and size of a heap object
containing a list of cipher suite identifiers. The list,
if any, is an array of bytes and the values are defined
in the IANA TLS Parameters Registry. If the Cipher Suites
Restricted by Policy bit is cleared to 0h, then this field
is reserved.
``dh_grp_obj``
DH Groups Heap Object Reference: If the Authentication DH Groups
Restricted by Policy List bit is set to 1h, then this field
indicates the location and size of a heap object containing
a list of DH-HMAC-CHAP Diffie-Hellman (DH) group identifiers.
If the Authentication DH Groups Restricted by Policy List
bit is cleared to 0h, then this field is reserved.
``sec_hash_func_obj``
Secure Hash Functions Offset Heap Object Reference: If the
Secure Hash Functions Policy List bit is set to 1h, then
this field indicates the offset in bytes of a heap object
containing a list of DH-HMAC-CHAP hash function identifiers.
The list is an array of bytes and the values are defined
in the NVM Express Base Specification. If the Secure Hash
Functions Policy List bit is cleared to 0h, then this
field is reserved.
``sec_keypath_obj``
Secret Keypath Offset Heap Object Reference: if this field
is set to a non-zero value, then this field indicates
the location and size of a heap object containing a URI.
The type of the URI is specified in the Secret Type field.
If this field is cleared to 0h, then this field is reserved.
``reserved2``
Reserved.
.. c:type:: enum nbft_security_flags
Security Profile Descriptor Flags (Figure 22)
**Constants**
``NBFT_SECURITY_VALID``
Descriptor Valid: If set to 1h, then
this descriptor is valid. If cleared
to 0h, then this descriptor is not valid.
``NBFT_SECURITY_IN_BAND_AUTH_MASK``
Mask to get the In-Band Authentication
Required field.
``NBFT_SECURITY_IN_BAND_AUTH_NOT_SUPPORTED``
In-band authentication is not supported
by the NVM subsystem.
``NBFT_SECURITY_IN_BAND_AUTH_NOT_REQUIRED``
In-band authentication is supported by
the NVM subsystem and is not required.
``NBFT_SECURITY_IN_BAND_AUTH_REQUIRED``
In-band authentication is supported by
the NVM subsystem and is required.
``NBFT_SECURITY_AUTH_POLICY_LIST_MASK``
Mask to get the Authentication Policy List
flag: This field indicates whether
authentication protocols were indicated
by policy from driver defaults or
administrative configuration.
``NBFT_SECURITY_AUTH_POLICY_LIST_NOT_SUPPORTED``
Authentication Protocols Heap Object Reference
field Offset and Length are reserved.
``NBFT_SECURITY_AUTH_POLICY_LIST_DRIVER``
Authentication Protocols Offset field and
the Authentication Protocols Length field
indicate a list of authentication protocols
used by the driver.
``NBFT_SECURITY_AUTH_POLICY_LIST_ADMIN``
Authentication Protocols Offset field and
the Authentication Protocols Length field
indicate a list of authentication protocols
that were administratively set and used
by the driver.
``NBFT_SECURITY_SEC_CHAN_NEG_MASK``
Mask to get the Secure Channel Negotiation
Required flag: This field indicates whether
secure channel negotiation (e.g. TLS)
is required.
``NBFT_SECURITY_SEC_CHAN_NEG_NOT_SUPPORTED``
Secure channel negotiation is not supported
by the NVM subsystem.
``NBFT_SECURITY_SEC_CHAN_NEG_NOT_REQUIRED``
Secure channel negotiation is supported
by the NVM subsystem and is not required.
``NBFT_SECURITY_SEC_CHAN_NEG_REQUIRED``
Secure channel negotiation is supported
by the NVM subsystem and is required.
``NBFT_SECURITY_SEC_POLICY_LIST_MASK``
Mask to get the Security Policy List flag:
This field indicates whether secure channel
protocols were indicated by policy from driver
defaults or administrative configuration.
``NBFT_SECURITY_SEC_POLICY_LIST_NOT_SUPPORTED``
The Offset field and Length field in the
Secure Channel Algorithm Heap Object Reference
field are reserved.
``NBFT_SECURITY_SEC_POLICY_LIST_DRIVER``
The Heap Object specified by the Secure Channel
Algorithm Heap Object Reference field indicates
a list of authentication protocols used
by the driver.
``NBFT_SECURITY_SEC_POLICY_LIST_ADMIN``
The Heap Object specified by the Secure Channel
Algorithm Heap Object Reference field indicates
a list of authentication protocols that were
administratively set and used by the driver.
``NBFT_SECURITY_CIPHER_RESTRICTED``
Cipher Suites Restricted by Policy: If set to 1h,
then the Cipher Suite Offset field and the
Ciper Suite Length field indicate a list
of supported cipher suites by the driver.
If cleared to 0h, then the Cipher Suite Offset
field and the Cipher Suite Length field
are reserved.
``NBFT_SECURITY_AUTH_DH_GROUPS_RESTRICTED``
Authentication DH Groups Restricted
by Policy List: If set to 1h, then connections
shall use one of the authentication DH groups
in the Authentication DH Groups List is required.
If cleared to 0h, then no Authentication DH Groups
List is indicated and use of an authentication
DH Group is not required.
``NBFT_SECURITY_SEC_HASH_FUNC_POLICY_LIST``
Secure Hash Functions Policy List: If set to 1h,
then connections shall use one of the secure
hash functions in the Secure Hash Functions
Policy List is required. If cleared to 0h,
then no Secure Hash Functions Policy
List is indicated and use of a secure
hash function is not required.
.. c:type:: enum nbft_security_secret_type
Security Profile Descriptor Secret Type
**Constants**
``NBFT_SECURITY_SECRET_REDFISH_HOST_IFACE_URI``
Redfish Host Interface URI:
If set to 1h, then the Secret Keypath
Object Reference is a URI pointing
to a Redfish Key Collection Object
that contains the PSK.
.. c:type:: struct nbft_discovery
Discovery Descriptor (Figure 24)
**Definition**
::
struct nbft_discovery {
__u8 structure_id;
__u8 flags;
__u8 index;
__u8 hfi_index;
__u8 sec_index;
__u8 reserved1;
struct nbft_heap_obj discovery_ctrl_addr_obj;
struct nbft_heap_obj discovery_ctrl_nqn_obj;
__u8 reserved2[14];
};
**Members**
``structure_id``
Structure ID: This field shall be set to 6h
(i.e., Discovery Descriptor; #NBFT_DESC_DISCOVERY).
``flags``
Discovery Descriptor Flags, see :c:type:`enum nbft_discovery_flags <nbft_discovery_flags>`.
``index``
Discovery Descriptor Index: This field indicates
the number of this Discovery Descriptor in
the Discovery Descriptor List.
``hfi_index``
HFI Descriptor Index: This field indicates the value
of the HFI Descriptor Index field of the HFI Descriptor
associated with this Discovery Descriptor. If multiple
HFIs share a common Discovery controller, there shall
be multiple Discovery Descriptor entries with one per HFI.
``sec_index``
Security Profile Descriptor Index: This field indicates
the value of the Security Profile Descriptor Index
field of the Security Descriptor associated with
this Discovery Descriptor.
``reserved1``
Reserved.
``discovery_ctrl_addr_obj``
Discovery Controller Address Heap Object Reference:
This field indicates the location and size of a heap
object containing a URI which indicates an NVMe Discovery
controller associated with this Discovery Descriptor.
If this field is cleared to 0h, then no URI is specified.
``discovery_ctrl_nqn_obj``
Discovery Controller NQN Heap Object Reference:
If set to a non-zero value, this field indicates
the location and size of a heap object containing
an NVMe Discovery controller NQN. If the NVMe Discovery
controller referenced by this record requires secure
authentication with a well known Subsystem NQN, this
field indicates the unique NQN for that NVMe Discovery
controller. This record is involved formatted as an NQN
string. If this field is cleared to 0h, then this
field is reserved and the OS shall use the well
known discovery NQN for this record.
``reserved2``
Reserved.
.. c:type:: enum nbft_discovery_flags
Discovery Descriptor Flags
**Constants**
``NBFT_DISCOVERY_VALID``
Descriptor Valid: if set to 1h, then this descriptor
is valid. If cleared to 0h, then this descriptor
is reserved.
.. c:type:: enum nbft_info_primary_admin_host_flag
Primary Administrative Host Descriptor Flags
**Constants**
``NBFT_INFO_PRIMARY_ADMIN_HOST_FLAG_NOT_INDICATED``
Not Indicated by Driver: The driver
that created this NBFT provided no
administrative priority hint for
this NBFT.
``NBFT_INFO_PRIMARY_ADMIN_HOST_FLAG_UNSELECTED``
Unselected: The driver that created
this NBFT explicitly indicated that
this NBFT should not be prioritized
over any other NBFT.
``NBFT_INFO_PRIMARY_ADMIN_HOST_FLAG_SELECTED``
Selected: The driver that created
this NBFT explicitly indicated that
this NBFT should be prioritized over
any other NBFT.
``NBFT_INFO_PRIMARY_ADMIN_HOST_FLAG_RESERVED``
Reserved.
.. c:type:: struct nbft_info_host
Host Descriptor
**Definition**
::
struct nbft_info_host {
unsigned char *id;
char *nqn;
bool host_id_configured;
bool host_nqn_configured;
enum nbft_info_primary_admin_host_flag primary;
};
**Members**
``id``
Host ID (raw UUID, length = 16 bytes).
``nqn``
Host NQN.
``host_id_configured``
HostID Configured Flag: value of True indicates that **id**
contains administratively-configured value, or driver
default value if False.
``host_nqn_configured``
Host NQN Configured Flag: value of True indicates that
**nqn** contains administratively-configured value,
or driver default value if False.
``primary``
Primary Administrative Host Descriptor, see
:c:type:`enum nbft_info_primary_admin_host_flag <nbft_info_primary_admin_host_flag>`.
.. c:type:: struct nbft_info_hfi_info_tcp
HFI Transport Info Descriptor - NVMe/TCP
**Definition**
::
struct nbft_info_hfi_info_tcp {
__u32 pci_sbdf;
__u8 mac_addr[6];
__u16 vlan;
__u8 ip_origin;
char ipaddr[40];
__u8 subnet_mask_prefix;
char gateway_ipaddr[40];
__u16 route_metric;
char primary_dns_ipaddr[40];
char secondary_dns_ipaddr[40];
char dhcp_server_ipaddr[40];
char *host_name;
bool this_hfi_is_default_route;
bool dhcp_override;
};
**Members**
``pci_sbdf``
PCI Express Routing ID for the HFI Transport Function.
``mac_addr``
MAC Address: The MAC address of this HFI,
in EUI-48TM format.
``vlan``
The VLAN identifier if the VLAN is associated with
this HFI, as defined in IEEE 802.1q-2018 or zeroes
if no VLAN is associated with this HFI.
``ip_origin``
The source of Ethernet L3 configuration information
used by the driver or 0 if not used.
``ipaddr``
The IPv4 or IPv6 address of this HFI.
``subnet_mask_prefix``
The IPv4 or IPv6 subnet mask in CIDR routing prefix
notation.
``gateway_ipaddr``
The IPv4 or IPv6 address of the IP gateway for this
HFI or zeroes if no IP gateway is specified.
``route_metric``
The cost value for the route indicated by this HFI.
``primary_dns_ipaddr``
The IPv4 or IPv6 address of the Primary DNS server
for this HFI.
``secondary_dns_ipaddr``
The IPv4 or IPv6 address of the Secondary DNS server
for this HFI.
``dhcp_server_ipaddr``
The IPv4 or IPv6 address of the DHCP server used
to assign this HFI address.
``host_name``
The Host Name string.
``this_hfi_is_default_route``
If True, then the BIOS utilized this interface
described by HFI to be the default route with highest
priority. If False, then routes are local to their
own scope.
``dhcp_override``
If True, then HFI information was populated
by consuming the DHCP on this interface. If False,
then the HFI information was set administratively
by a configuration interface to the driver and
pre-OS envrionment.
.. c:type:: struct nbft_info_hfi
Host Fabric Interface (HFI) Descriptor
**Definition**
::
struct nbft_info_hfi {
int index;
char transport[8];
struct nbft_info_hfi_info_tcp tcp_info;
};
**Members**
``index``
HFI Descriptor Index: indicates the number of this HFI Descriptor
in the Host Fabric Interface Descriptor List.
``transport``
Transport Type string (e.g. 'tcp').
``tcp_info``
The HFI Transport Info Descriptor, see :c:type:`struct nbft_info_hfi_info_tcp <nbft_info_hfi_info_tcp>`.
.. c:type:: struct nbft_info_discovery
Discovery Descriptor
**Definition**
::
struct nbft_info_discovery {
int index;
struct nbft_info_security *security;
struct nbft_info_hfi *hfi;
char *uri;
char *nqn;
};
**Members**
``index``
The number of this Discovery Descriptor in the Discovery
Descriptor List.
``security``
The Security Profile Descriptor, see :c:type:`struct nbft_info_security <nbft_info_security>`.
``hfi``
The HFI Descriptor associated with this Discovery Descriptor.
See :c:type:`struct nbft_info_hfi <nbft_info_hfi>`.
``uri``
A URI which indicates an NVMe Discovery controller associated
with this Discovery Descriptor.
``nqn``
An NVMe Discovery controller NQN.
.. c:type:: struct nbft_info_security
Security Profile Descriptor
**Definition**
::
struct nbft_info_security {
int index;
};
**Members**
``index``
The number of this Security Profile Descriptor in the Security
Profile Descriptor List.
.. c:type:: enum nbft_info_nid_type
Namespace Identifier Type (NIDT)
**Constants**
``NBFT_INFO_NID_TYPE_NONE``
No identifier available.
``NBFT_INFO_NID_TYPE_EUI64``
The EUI-64 identifier.
``NBFT_INFO_NID_TYPE_NGUID``
The NSGUID identifier.
``NBFT_INFO_NID_TYPE_NS_UUID``
The UUID identifier.
.. c:type:: struct nbft_info_subsystem_ns
Subsystem Namespace (SSNS) info
**Definition**
::
struct nbft_info_subsystem_ns {
int index;
struct nbft_info_discovery *discovery;
struct nbft_info_security *security;
int num_hfis;
struct nbft_info_hfi **hfis;
char transport[8];
char traddr[40];
char *trsvcid;
__u16 subsys_port_id;
__u32 nsid;
enum nbft_info_nid_type nid_type;
__u8 *nid;
char *subsys_nqn;
bool pdu_header_digest_required;
bool data_digest_required;
int controller_id;
int asqsz;
char *dhcp_root_path_string;
bool discovered;
bool unavailable;
};
**Members**
``index``
SSNS Descriptor Index in the descriptor list.
``discovery``
Primary Discovery Controller associated with
this SSNS Descriptor.
``security``
Security Profile Descriptor associated with
this namespace.
``num_hfis``
Number of HFIs.
``hfis``
List of HFIs associated with this namespace.
Includes the primary HFI at the first position
and all secondary HFIs. This array is null-terminated.
``transport``
Transport Type string (e.g. 'tcp').
``traddr``
Subsystem Transport Address.
``trsvcid``
Subsystem Transport Service Identifier.
``subsys_port_id``
The Subsystem Port ID.
``nsid``
The Namespace ID of this descriptor or when **nid**
should be used instead.
``nid_type``
Namespace Identifier Type, see :c:type:`enum nbft_info_nid_type <nbft_info_nid_type>`.
``nid``
The Namespace Identifier value.
``subsys_nqn``
Subsystem and Namespace NQN.
``pdu_header_digest_required``
PDU Header Digest (HDGST) Flag: the use of NVM Header
Digest Enabled is required.
``data_digest_required``
Data Digest (DDGST) Flag: the use of NVM Data Digest
Enabled is required.
``controller_id``
Controller ID (SSNS Extended Information Descriptor):
The controller ID associated with the Admin Queue
or 0 if not supported.
``asqsz``
Admin Submission Queue Size (SSNS Extended Information
Descriptor) or 0 if not supported.
``dhcp_root_path_string``
DHCP Root Path Override string (SSNS Extended
Information Descriptor).
``discovered``
Indicates that this namespace was acquired
through discovery.
``unavailable``
Namespace is unavailable as indicated by
the pre-OS driver.
.. c:type:: struct nbft_info
The parsed NBFT table data.
**Definition**
::
struct nbft_info {
char *filename;
__u8 *raw_nbft;
ssize_t raw_nbft_size;
struct nbft_info_host host;
struct nbft_info_hfi **hfi_list;
struct nbft_info_security **security_list;
struct nbft_info_discovery **discovery_list;
struct nbft_info_subsystem_ns **subsystem_ns_list;
};
**Members**
``filename``
Path to the NBFT table.
``raw_nbft``
The original NBFT table contents.
``raw_nbft_size``
Size of **raw_nbft**.
``host``
The Host Descriptor (should match other NBFTs).
``hfi_list``
The HFI Descriptor List (null-terminated array).
``security_list``
The Security Profile Descriptor List (null-terminated array).
``discovery_list``
The Discovery Descriptor List (null-terminated array).
``subsystem_ns_list``
The SSNS Descriptor List (null-terminated array).
.. c:function:: int nvme_nbft_read (struct nbft_info **nbft, const char *filename)
Read and parse contents of an ACPI NBFT table
**Parameters**
``struct nbft_info **nbft``
Parsed NBFT table data.
``const char *filename``
Filename of the raw NBFT table to read.
**Description**
Read and parse the specified NBFT file into a struct nbft_info.
Free with nvme_nbft_free().
**Return**
0 on success, errno otherwise.
.. c:function:: void nvme_nbft_free (struct nbft_info *nbft)
Free the struct nbft_info and its contents
**Parameters**
``struct nbft_info *nbft``
Parsed NBFT table data.