1
0
Fork 0
libnvme/doc/rst/linux.rst

504 lines
11 KiB
ReStructuredText
Raw Normal View History

.. _linux.h:
**linux.h**
linux-specific utility functions
.. c:function:: int nvme_fw_download_seq (int fd, __u32 size, __u32 xfer, __u32 offset, void *buf)
Firmware download sequence
**Parameters**
``int fd``
File descriptor of nvme device
``__u32 size``
Total size of the firmware image to transfer
``__u32 xfer``
Maximum size to send with each partial transfer
``__u32 offset``
Starting offset to send with this firmware download
``void *buf``
Address of buffer containing all or part of the firmware image.
**Return**
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:enum:: nvme_telemetry_da
Telemetry Log Data Area
**Constants**
``NVME_TELEMETRY_DA_1``
Data Area 1
``NVME_TELEMETRY_DA_2``
Data Area 2
``NVME_TELEMETRY_DA_3``
Data Area 3
``NVME_TELEMETRY_DA_4``
Data Area 4
.. c:function:: int nvme_get_telemetry_max (int fd, enum nvme_telemetry_da *da, size_t *max_data_tx)
Get telemetry limits
**Parameters**
``int fd``
File descriptor of nvme device
``enum nvme_telemetry_da *da``
On success return max supported data area
``size_t *max_data_tx``
On success set to max transfer chunk supported by the controller
**Return**
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_telemetry_log (int fd, bool create, bool ctrl, bool rae, size_t max_data_tx, enum nvme_telemetry_da da, struct nvme_telemetry_log **log, size_t *size)
Get specified telemetry log
**Parameters**
``int fd``
File descriptor of nvme device
``bool create``
Generate new host initated telemetry capture
``bool ctrl``
Get controller Initiated log
``bool rae``
Retain asynchronous events
``size_t max_data_tx``
Set the max data transfer size to be used retrieving telemetry.
``enum nvme_telemetry_da da``
Log page data area, valid values: :c:type:`enum nvme_telemetry_da <nvme_telemetry_da>`.
``struct nvme_telemetry_log **log``
On success, set to the value of the allocated and retrieved log.
``size_t *size``
Ptr to the telemetry log size, so it can be returned
**Description**
The total size allocated can be calculated as:
(nvme_telemetry_log da size + 1) * NVME_LOG_TELEM_BLOCK_SIZE.
**Return**
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_ctrl_telemetry (int fd, bool rae, struct nvme_telemetry_log **log, enum nvme_telemetry_da da, size_t *size)
Get controller telemetry log
**Parameters**
``int fd``
File descriptor of nvme device
``bool rae``
Retain asynchronous events
``struct nvme_telemetry_log **log``
On success, set to the value of the allocated and retrieved log.
``enum nvme_telemetry_da da``
Log page data area, valid values: :c:type:`enum nvme_telemetry_da <nvme_telemetry_da>`
``size_t *size``
Ptr to the telemetry log size, so it can be returned
**Description**
The total size allocated can be calculated as:
(nvme_telemetry_log da size + 1) * NVME_LOG_TELEM_BLOCK_SIZE.
**Return**
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_host_telemetry (int fd, struct nvme_telemetry_log **log, enum nvme_telemetry_da da, size_t *size)
Get host telemetry log
**Parameters**
``int fd``
File descriptor of nvme device
``struct nvme_telemetry_log **log``
On success, set to the value of the allocated and retrieved log.
``enum nvme_telemetry_da da``
Log page data area, valid values: :c:type:`enum nvme_telemetry_da <nvme_telemetry_da>`
``size_t *size``
Ptr to the telemetry log size, so it can be returned
**Description**
The total size allocated can be calculated as:
(nvme_telemetry_log da size + 1) * NVME_LOG_TELEM_BLOCK_SIZE.
**Return**
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_new_host_telemetry (int fd, struct nvme_telemetry_log **log, enum nvme_telemetry_da da, size_t *size)
Get new host telemetry log
**Parameters**
``int fd``
File descriptor of nvme device
``struct nvme_telemetry_log **log``
On success, set to the value of the allocated and retrieved log.
``enum nvme_telemetry_da da``
Log page data area, valid values: :c:type:`enum nvme_telemetry_da <nvme_telemetry_da>`
``size_t *size``
Ptr to the telemetry log size, so it can be returned
**Description**
The total size allocated can be calculated as:
(nvme_telemetry_log da size + 1) * NVME_LOG_TELEM_BLOCK_SIZE.
**Return**
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_len (int fd, size_t *analen)
Retrieve size of the current ANA log
**Parameters**
``int fd``
File descriptor of nvme device
``size_t *analen``
Pointer to where the length will be set on success
**Return**
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_logical_block_size (int fd, __u32 nsid, int *blksize)
Retrieve block size
**Parameters**
``int fd``
File descriptor of nvme device
``__u32 nsid``
Namespace id
``int *blksize``
Pointer to where the block size will be set on success
**Return**
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_lba_status_log (int fd, bool rae, struct nvme_lba_status_log **log)
Retrieve the LBA Status log page
**Parameters**
``int fd``
File descriptor of the nvme device
``bool rae``
Retain asynchronous events
``struct nvme_lba_status_log **log``
On success, set to the value of the allocated and retrieved log.
**Return**
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_namespace_attach_ctrls (int fd, __u32 nsid, __u16 num_ctrls, __u16 *ctrlist)
Attach namespace to controller(s)
**Parameters**
``int fd``
File descriptor of nvme device
``__u32 nsid``
Namespace ID to attach
``__u16 num_ctrls``
Number of controllers in ctrlist
``__u16 *ctrlist``
List of controller IDs to perform the attach action
**Return**
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_namespace_detach_ctrls (int fd, __u32 nsid, __u16 num_ctrls, __u16 *ctrlist)
Detach namespace from controller(s)
**Parameters**
``int fd``
File descriptor of nvme device
``__u32 nsid``
Namespace ID to detach
``__u16 num_ctrls``
Number of controllers in ctrlist
``__u16 *ctrlist``
List of controller IDs to perform the detach action
**Return**
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_open (const char *name)
Open an nvme controller or namespace device
**Parameters**
``const char *name``
The basename of the device to open
**Description**
This will look for the handle in /dev/ and validate the name and filetype
match linux conventions.
**Return**
A file descriptor for the device on a successful open, or -1 with
errno set otherwise.
.. c:enum:: nvme_hmac_alg
HMAC algorithm
**Constants**
``NVME_HMAC_ALG_NONE``
No HMAC algorithm
``NVME_HMAC_ALG_SHA2_256``
SHA2-256
``NVME_HMAC_ALG_SHA2_384``
SHA2-384
``NVME_HMAC_ALG_SHA2_512``
SHA2-512
.. c:function:: int nvme_gen_dhchap_key (char *hostnqn, enum nvme_hmac_alg hmac, unsigned int key_len, unsigned char *secret, unsigned char *key)
DH-HMAC-CHAP key generation
**Parameters**
``char *hostnqn``
Host NVMe Qualified Name
``enum nvme_hmac_alg hmac``
HMAC algorithm
``unsigned int key_len``
Output key length
``unsigned char *secret``
Secret to used for digest
``unsigned char *key``
Generated DH-HMAC-CHAP key
**Return**
If key generation was successful the function returns 0 or
-1 with errno set otherwise.
.. c:function:: long nvme_lookup_keyring (const char *keyring)
Lookup keyring serial number
**Parameters**
``const char *keyring``
Keyring name
**Description**
Looks up the serial number of the keyring **keyring**.
**Return**
The key serial number of the keyring
or 0 with errno set otherwise.
.. c:function:: char * nvme_describe_key_serial (long key_id)
Return key description
**Parameters**
``long key_id``
Key serial number
**Description**
Fetches the description of the key or keyring identified
by the serial number **key_id**.
**Return**
The description of **key_id** or NULL on failure.
The returned string needs to be freed by the caller.
.. c:function:: long nvme_lookup_key (const char *type, const char *identity)
Lookup key serial number
**Parameters**
``const char *type``
Key type
``const char *identity``
Key description
**Description**
Looks up the serial number of the key **identity**
with type ``type`` in the current session keyring.
**Return**
The key serial number of the key
or 0 with errno set otherwise.
.. c:function:: int nvme_set_keyring (long keyring_id)
Link keyring for lookup
**Parameters**
``long keyring_id``
Keyring id
**Description**
Links **keyring_id** into the session keyring such that
its keys are available for further key lookups.
**Return**
0 on success, a negative number on error
with errno set.
.. c:function:: long nvme_insert_tls_key (const char *keyring, const char *key_type, const char *hostnqn, const char *subsysnqn, int hmac, unsigned char *configured_key, int key_len)
Derive and insert TLS key
**Parameters**
``const char *keyring``
Keyring to use
``const char *key_type``
Type of the resulting key
``const char *hostnqn``
Host NVMe Qualified Name
``const char *subsysnqn``
Subsystem NVMe Qualified Name
``int hmac``
HMAC algorithm
``unsigned char *configured_key``
Configured key data to derive the key from
``int key_len``
Length of **configured_key**
**Description**
Derives a 'retained' TLS key as specified in NVMe TCP 1.0a and
stores it as type **key_type** in the keyring specified by **keyring**.
**Return**
The key serial number if the key could be inserted into
the keyring or 0 with errno otherwise.