summaryrefslogtreecommitdiffstats
path: root/doc/rst
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--doc/rst/fabrics.rst117
-rw-r--r--doc/rst/ioctl.rst48
-rw-r--r--doc/rst/linux.rst37
-rw-r--r--doc/rst/log.rst31
-rw-r--r--doc/rst/meson.build6
-rw-r--r--doc/rst/mi.rst42
-rw-r--r--doc/rst/tree.rst66
-rw-r--r--doc/rst/types.rst94
8 files changed, 418 insertions, 23 deletions
diff --git a/doc/rst/fabrics.rst b/doc/rst/fabrics.rst
index 141c486..218084c 100644
--- a/doc/rst/fabrics.rst
+++ b/doc/rst/fabrics.rst
@@ -98,6 +98,55 @@ Fabrics-specific definitions.
+
+
+.. c:struct:: nvme_fabrics_uri
+
+ Parsed URI structure
+
+**Definition**
+
+::
+
+ struct nvme_fabrics_uri {
+ char *scheme;
+ char *protocol;
+ char *userinfo;
+ char *host;
+ int port;
+ char **path_segments;
+ char *query;
+ char *fragment;
+ };
+
+**Members**
+
+``scheme``
+ Scheme name (typically 'nvme')
+
+``protocol``
+ Optional protocol/transport (e.g. 'tcp')
+
+``userinfo``
+ Optional user information component of the URI authority
+
+``host``
+ Host transport address
+
+``port``
+ The port subcomponent or 0 if not specified
+
+``path_segments``
+ NULL-terminated array of path segments
+
+``query``
+ Optional query string component (separated by '?')
+
+``fragment``
+ Optional fragment identifier component (separated by '#')
+
+
+
.. c:function:: const char * nvmf_trtype_str (__u8 trtype)
Decode TRTYPE field
@@ -434,6 +483,38 @@ An nvm namespace qualified name string based on the machine
identifier, or NULL if not successful.
+.. c:function:: char * nvmf_hostnqn_generate_from_hostid (char *hostid)
+
+ Generate a host nqn from host identifier
+
+**Parameters**
+
+``char *hostid``
+ Host identifier
+
+**Description**
+
+If **hostid** is NULL, the function generates it based on the machine
+identifier.
+
+**Return**
+
+On success, an NVMe Qualified Name for host identification. This
+name is based on the given host identifier. On failure, NULL.
+
+
+.. c:function:: char * nvmf_hostid_generate ()
+
+ Generate a machine specific host identifier
+
+**Parameters**
+
+**Return**
+
+On success, an identifier string based on the machine identifier to
+be used as NVMe Host Identifier, or NULL on failure.
+
+
.. c:function:: char * nvmf_hostnqn_from_file ()
Reads the host nvm qualified name from the config default location
@@ -543,3 +624,39 @@ tasks are supported: register, deregister, and registration update.
0 on success; on failure -1 is returned and errno is set
+.. c:function:: struct nvme_fabrics_uri * nvme_parse_uri (const char *str)
+
+ Parse the URI string
+
+**Parameters**
+
+``const char *str``
+ URI string
+
+**Description**
+
+Parse the URI string as defined in the NVM Express Boot Specification.
+Supported URI elements looks as follows:
+
+ nvme+tcp://user**host**:port/subsys_nqn/nid?query=val#fragment
+
+**Return**
+
+:c:type:`nvme_fabrics_uri` structure on success; NULL on failure with errno
+set.
+
+
+.. c:function:: void nvme_free_uri (struct nvme_fabrics_uri *uri)
+
+ Free the URI structure
+
+**Parameters**
+
+``struct nvme_fabrics_uri *uri``
+ :c:type:`nvme_fabrics_uri` structure
+
+**Description**
+
+Free an :c:type:`nvme_fabrics_uri` structure.
+
+
diff --git a/doc/rst/ioctl.rst b/doc/rst/ioctl.rst
index 7b2003d..050bf99 100644
--- a/doc/rst/ioctl.rst
+++ b/doc/rst/ioctl.rst
@@ -2022,7 +2022,7 @@ This log consists of a header describing the log and descriptors containing
the asymmetric namespace access information for ANA Groups that contain
namespaces that are attached to the controller processing the command.
-See :c:type:`struct nvme_ana_rsp_hdr <nvme_ana_rsp_hdr>` for the definition of the returned structure.
+See :c:type:`struct nvme_ana_log <nvme_ana_log>` for the definition of the returned structure.
**Return**
@@ -2030,7 +2030,7 @@ The nvme command status if a response was received (see
:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
-.. c:function:: int nvme_get_log_ana_groups (int fd, bool rae, __u32 len, struct nvme_ana_group_desc *log)
+.. c:function:: int nvme_get_log_ana_groups (int fd, bool rae, __u32 len, struct nvme_ana_log *log)
Retrieve Asymmetric Namespace Access groups only log page
@@ -2045,12 +2045,12 @@ The nvme command status if a response was received (see
``__u32 len``
The allocated length of the log page
-``struct nvme_ana_group_desc *log``
+``struct nvme_ana_log *log``
User address to store the ana group log
**Description**
-See :c:type:`struct nvme_ana_group_desc <nvme_ana_group_desc>` for the definition of the returned structure.
+See :c:type:`struct nvme_ana_log <nvme_ana_log>` for the definition of the returned structure.
**Return**
@@ -2058,6 +2058,46 @@ The nvme command status if a response was received (see
:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
+.. c:function:: int nvme_get_ana_log_atomic (int fd, bool rgo, bool rae, unsigned int retries, struct nvme_ana_log *log, __u32 *len)
+
+ Retrieve Asymmetric Namespace Access log page atomically
+
+**Parameters**
+
+``int fd``
+ File descriptor of nvme device
+
+``bool rgo``
+ Whether to retrieve ANA groups only (no NSIDs)
+
+``bool rae``
+ Whether to retain asynchronous events
+
+``unsigned int retries``
+ The maximum number of times to retry on log page changes
+
+``struct nvme_ana_log *log``
+ Pointer to a buffer to receive the ANA log page
+
+``__u32 *len``
+ Input: the length of the log page buffer.
+ Output: the actual length of the ANA log page.
+
+**Description**
+
+See :c:type:`struct nvme_ana_log <nvme_ana_log>` for the definition of the returned structure.
+
+**Return**
+
+If successful, returns 0 and sets *len to the actual log page length.
+If unsuccessful, returns the nvme command status if a response was received
+(see :c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
+Sets errno = EINVAL if retries == 0.
+Sets errno = EAGAIN if unable to read the log page atomically
+because chgcnt changed during each of the retries attempts.
+Sets errno = ENOSPC if the full log page does not fit in the provided buffer.
+
+
.. c:function:: int nvme_get_log_lba_status (int fd, bool rae, __u64 offset, __u32 len, void *log)
Retrieve LBA Status
diff --git a/doc/rst/linux.rst b/doc/rst/linux.rst
index cf49851..05d1418 100644
--- a/doc/rst/linux.rst
+++ b/doc/rst/linux.rst
@@ -205,6 +205,23 @@ The nvme command status if a response was received (see
:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
+.. c:function:: size_t nvme_get_ana_log_len_from_id_ctrl (const struct nvme_id_ctrl *id_ctrl, bool rgo)
+
+ Retrieve maximum possible ANA log size
+
+**Parameters**
+
+``const struct nvme_id_ctrl *id_ctrl``
+ Controller identify data
+
+``bool rgo``
+ If true, return maximum log page size without NSIDs
+
+**Return**
+
+A byte limit on the size of the controller's ANA log page
+
+
.. c:function:: int nvme_get_ana_log_len (int fd, size_t *analen)
Retrieve size of the current ANA log
@@ -699,6 +716,26 @@ The string containing the TLS identity. It is the responsibility
of the caller to free the returned string.
+.. c:function:: long nvme_revoke_tls_key (const char *keyring, const char *key_type, const char *identity)
+
+ Revoke TLS key from keyring
+
+**Parameters**
+
+``const char *keyring``
+ Keyring to use
+
+``const char *key_type``
+ Type of the key to revoke
+
+``const char *identity``
+ Key identity string
+
+**Return**
+
+0 on success or on failure -1 with errno set.
+
+
.. c:function:: char * nvme_export_tls_key (const unsigned char *key_data, int key_len)
Export a TLS key
diff --git a/doc/rst/log.rst b/doc/rst/log.rst
index edbb330..76e616f 100644
--- a/doc/rst/log.rst
+++ b/doc/rst/log.rst
@@ -28,6 +28,30 @@ logging functions
Sets the default logging variables for the library.
+.. c:function:: void nvme_init_default_logging (FILE *fp, int lvl, bool log_pid, bool log_tstamp)
+
+ Initialize default (fallback) logging
+
+**Parameters**
+
+``FILE *fp``
+ File descriptor for logging messages
+
+``int lvl``
+ Logging level to set
+
+``bool log_pid``
+ Boolean to enable logging of the PID
+
+``bool log_tstamp``
+ Boolean to enable logging of the timestamp
+
+**Description**
+
+Sets the default logging settings for the library in case the root object
+is absent.
+
+
.. c:function:: int nvme_get_logging_level (nvme_root_t r, bool *log_pid, bool *log_tstamp)
Get current logging level
@@ -72,6 +96,9 @@ will be set as well. This means the global root object is always pointing to
the latest created root object. Note the first **nvme_free_tree** call will reset
the global root object.
+This function is deprecated. Use nvme_init_default_logging or/and
+nvme_init_logging instead.
+
.. c:function:: void nvme_set_debug (bool debug)
@@ -84,7 +111,7 @@ the global root object.
**Description**
-Don't use it, it's debricated.
+This function is deprecated. Use nvme_init_default_logging instead.
.. c:function:: bool nvme_get_debug (void)
@@ -99,7 +126,7 @@ Don't use it, it's debricated.
**Description**
-Don't use it, it's debricated.
+This function is deprecated. Use nvme_get_logging_level instead.
**Return**
diff --git a/doc/rst/meson.build b/doc/rst/meson.build
index e54c381..25d68ca 100644
--- a/doc/rst/meson.build
+++ b/doc/rst/meson.build
@@ -8,8 +8,8 @@ if want_docs != 'false'
if want_docs_build
kernel_doc = find_program(top_source_dir + 'scripts/kernel-doc')
- conf = configuration_data()
- conf.set('SYSCONFDIR', sysconfdir)
+ rst_conf = configuration_data()
+ rst_conf.set('SYSCONFDIR', sysconfdir)
if want_docs == 'all' or want_docs == 'rst' or want_docs == 'html'
foreach apif : api_files
@@ -17,7 +17,7 @@ if want_docs != 'false'
subst = configure_file(
input: afile,
output: '@BASENAME@.subst',
- configuration: conf)
+ configuration: rst_conf)
rst = custom_target(
apif.underscorify() + '_rst',
input: subst,
diff --git a/doc/rst/mi.rst b/doc/rst/mi.rst
index 2aa7438..e5c2bd1 100644
--- a/doc/rst/mi.rst
+++ b/doc/rst/mi.rst
@@ -2459,7 +2459,7 @@ This log consists of a header describing the log and descriptors containing
the asymmetric namespace access information for ANA Groups that contain
namespaces that are attached to the controller processing the command.
-See :c:type:`struct nvme_ana_rsp_hdr <nvme_ana_rsp_hdr>` for the definition of the returned structure.
+See :c:type:`struct nvme_ana_log <nvme_ana_log>` for the definition of the returned structure.
**Return**
@@ -2495,6 +2495,46 @@ The nvme command status if a response was received (see
:c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
+.. c:function:: int nvme_mi_admin_get_ana_log_atomic (nvme_mi_ctrl_t ctrl, bool rgo, bool rae, unsigned int retries, struct nvme_ana_log *log, __u32 *len)
+
+ Retrieve Asymmetric Namespace Access log page atomically
+
+**Parameters**
+
+``nvme_mi_ctrl_t ctrl``
+ Controller to query
+
+``bool rgo``
+ Whether to retrieve ANA groups only (no NSIDs)
+
+``bool rae``
+ Whether to retain asynchronous events
+
+``unsigned int retries``
+ The maximum number of times to retry on log page changes
+
+``struct nvme_ana_log *log``
+ Pointer to a buffer to receive the ANA log page
+
+``__u32 *len``
+ Input: the length of the log page buffer.
+ Output: the actual length of the ANA log page.
+
+**Description**
+
+See :c:type:`struct nvme_ana_log <nvme_ana_log>` for the definition of the returned structure.
+
+**Return**
+
+If successful, returns 0 and sets *len to the actual log page length.
+If unsuccessful, returns the nvme command status if a response was received
+(see :c:type:`enum nvme_status_field <nvme_status_field>`) or -1 with errno set otherwise.
+Sets errno = EINVAL if retries == 0.
+Sets errno = EAGAIN if unable to read the log page atomically
+because chgcnt changed during each of the retries attempts.
+Sets errno = ENOSPC if the full log page does not fit in the provided buffer.
+
+
.. c:function:: int nvme_mi_admin_get_log_lba_status (nvme_mi_ctrl_t ctrl, bool rae, __u64 offset, __u32 len, void *log)
Retrieve LBA Status
diff --git a/doc/rst/tree.rst b/doc/rst/tree.rst
index 6f79703..ee46d11 100644
--- a/doc/rst/tree.rst
+++ b/doc/rst/tree.rst
@@ -53,6 +53,20 @@ Sets the managing application string for **r**.
Returns the managing application string for **r** or NULL if not set.
+.. c:function:: void nvme_root_skip_namespaces (nvme_root_t r)
+
+ Skip namespace scanning
+
+**Parameters**
+
+``nvme_root_t r``
+ :c:type:`nvme_root_t` object
+
+**Description**
+
+Sets a flag to skip namespaces during scanning.
+
+
.. c:function:: void nvme_root_release_fds (nvme_root_t r)
Close all opened file descriptors in the tree
@@ -229,14 +243,62 @@ true if PDC is enabled for **h**, else false
**Description**
-Initializes the default host object based on the values in
-/etc/nvme/hostnqn and /etc/nvme/hostid and attaches it to **r**.
+Initializes the default host object based on the hostnqn/hostid
+values returned by nvme_host_get_ids() and attaches it to **r**.
**Return**
:c:type:`nvme_host_t` object
+.. c:function:: int nvme_host_get_ids (nvme_root_t r, char *hostnqn_arg, char *hostid_arg, char **hostnqn, char **hostid)
+
+ Retrieve host ids from various sources
+
+**Parameters**
+
+``nvme_root_t r``
+ :c:type:`nvme_root_t` object
+
+``char *hostnqn_arg``
+ Input hostnqn (command line) argument
+
+``char *hostid_arg``
+ Input hostid (command line) argument
+
+``char **hostnqn``
+ Output hostnqn
+
+``char **hostid``
+ Output hostid
+
+**Description**
+
+nvme_host_get_ids figures out which hostnqn/hostid is to be used.
+There are several sources where this information can be retrieved.
+
+The order is:
+
+ - Start with informartion from DMI or device-tree
+ - Override hostnqn and hostid from /etc/nvme files
+ - Override hostnqn or hostid with values from JSON
+ configuration file. The first host entry in the file is
+ considered the default host.
+ - Override hostnqn or hostid with values from the command line
+ (**hostnqn_arg**, **hostid_arg**).
+
+ If the IDs are still NULL after the lookup algorithm, the function
+ will generate random IDs.
+
+ The function also verifies that hostnqn and hostid matches. The Linux
+ NVMe implementation expects a 1:1 matching between the IDs.
+
+**Return**
+
+0 on success (**hostnqn** and **hostid** contain valid strings
+ which the caller needs to free), -1 otherwise and errno is set.
+
+
.. c:function:: nvme_subsystem_t nvme_first_subsystem (nvme_host_t h)
Start subsystem iterator
diff --git a/doc/rst/types.rst b/doc/rst/types.rst
index 1d6ad5a..7236642 100644
--- a/doc/rst/types.rst
+++ b/doc/rst/types.rst
@@ -2148,6 +2148,12 @@ power scale value
``NVME_CTRL_CTRATT_ELBAS``
Extended LBA Formats supported
+``NVME_CTRL_CTRATT_MEM``
+ MDTS and Size Limits Exclude Metadata supported
+
+``NVME_CTRL_CTRATT_HMBR``
+ HMB Restrict Non-Operational Power State Access
+
``NVME_CTRL_CTRATT_FDPS``
Flexible Data Placement supported
@@ -3162,6 +3168,34 @@ power scale value
Mask to get the protection information format for
the extended LBA format.
+``NVME_NVM_ELBAF_QPIF_MASK``
+ Mask to get the Qualified Protection Information
+ Format.
+
+
+
+
+.. c:enum:: nvme_nvm_id_ns_pif
+
+ This field indicates the type of the Protection Information Format
+
+**Constants**
+
+``NVME_NVM_PIF_16B_GUARD``
+ 16-bit Guard Protection Information Format
+
+``NVME_NVM_PIF_32B_GUARD``
+ 32-bit Guard Protection Information Format
+
+``NVME_NVM_PIF_64B_GUARD``
+ 64-bit Guard Protection Information Format
+
+``NVME_NVM_PIF_QTYPE``
+ If Qualified Protection Information Format Supports
+ and Protection Information Format is set to 3, then
+ protection information format is taken from Qualified
+ Protection Information Format field.
+
@@ -3759,7 +3793,9 @@ power scale value
__u8 dmrl;
__le32 dmrsl;
__le64 dmsl;
- __u8 rsvd16[4080];
+ __u8 rsvd16[2];
+ __le16 aocs;
+ __u8 rsvd20[4076];
};
**Members**
@@ -3783,7 +3819,13 @@ power scale value
Dataset Management Size Limit
``rsvd16``
- reserved
+ Reserved
+
+``aocs``
+ Admin Optional Command Support
+
+``rsvd20``
+ Reserved
@@ -3800,9 +3842,13 @@ power scale value
struct nvme_nvm_id_ns {
__le64 lbstm;
__u8 pic;
- __u8 rsvd9[3];
+ __u8 pifa;
+ __u8 rsvd10[2];
__le32 elbaf[64];
- __u8 rsvd268[3828];
+ __le32 npdgl;
+ __u8 rsvd272[20];
+ __le32 tlbaag;
+ __u8 rsvd296[3800];
};
**Members**
@@ -3813,13 +3859,25 @@ power scale value
``pic``
Protection Information Capabilities
-``rsvd9``
+``pifa``
+ Protection Information Format Attribute
+
+``rsvd10``
Reserved
``elbaf``
List of Extended LBA Format Support
-``rsvd268``
+``npdgl``
+ Namespace Preferred Deallocate Granularity Large
+
+``rsvd272``
+ Reserved
+
+``tlbaag``
+ Tracked LBA Allocation Granularity
+
+``rsvd296``
Reserved
@@ -5821,6 +5879,12 @@ bytes, in size. This log captures the controller’s internal state.
``NVME_PEL_THERMAL_EXCURSION_EVENT``
Thermal Excursion Event
+``NVME_PEL_VENDOR_SPECIFIC_EVENT``
+ Vendor Specific Event
+
+``NVME_PEL_TCG_DEFINED_EVENT``
+ TCG Defined Event
+
@@ -6395,16 +6459,21 @@ bytes, in size. This log captures the controller’s internal state.
.. c:enum:: nvme_lba_status_atype
- Potentially Unrecoverable LBAs
+ Action type the controller uses to return LBA status
**Constants**
+``NVME_LBA_STATUS_ATYPE_ALLOCATED``
+ Return tracked allocated LBAs status
+
``NVME_LBA_STATUS_ATYPE_SCAN_UNTRACKED``
- Potentially Unrecoverable LBAs
+ Perform scan and return Untracked and
+ Tracked Potentially Unrecoverable LBAs
+ status
-``NVME_LBA_STATUS_ATYPE_SCAN_TRACKED``
- Potentially Unrecoverable LBAs
- associated with physical storage
+``NVME_LBA_STATUS_ATYPE_TRACKED``
+ Return Tracked Potentially Unrecoverable
+ LBAs associated with physical storage
@@ -13061,6 +13130,9 @@ true if **status** is of the specified type and value
``nvme_cmd_resv_release``
Reservation Release
+``nvme_cmd_cancel``
+ Cancel
+
``nvme_cmd_copy``
Copy