[PATCH V2] libnvme: Introduce functions to generate host identifier and host NQN
Israel Rukshin
israelr at nvidia.com
Thu Apr 18 07:24:37 PDT 2024
The nvmf_hostid_generate() function generates a machine specific
host identifier. This is useful when the host ID can't be derived
from an NQN that doesn't contain a UUID.
Also, add nvmf_hostnqn_generate_from_hostid() to explicitly set UUID
when hostid is not NULL.
Signed-off-by: Israel Rukshin <israelr at nvidia.com>
Reviewed-by: Max Gurtovoy <mgurtovoy at nvidia.com>
---
Changes from v1:
- Fix comment of Daniel Wagner and update commit message accordingly.
Introduce nvmf_hostnqn_generate_from_hostid().
src/libnvme.map | 2 ++
src/nvme/fabrics.c | 29 ++++++++++++++++++++++-------
src/nvme/fabrics.h | 21 +++++++++++++++++++++
3 files changed, 45 insertions(+), 7 deletions(-)
diff --git a/src/libnvme.map b/src/libnvme.map
index 8710c41f..451ca73c 100644
--- a/src/libnvme.map
+++ b/src/libnvme.map
@@ -10,6 +10,8 @@ LIBNVME_1.9 {
nvme_submit_passthru64;
nvme_update_key;
nvme_ctrl_get_cntlid;
+ nvmf_hostid_generate;
+ nvmf_hostnqn_generate_from_hostid;
};
LIBNVME_1_8 {
diff --git a/src/nvme/fabrics.c b/src/nvme/fabrics.c
index 6738e9dc..d653775b 100644
--- a/src/nvme/fabrics.c
+++ b/src/nvme/fabrics.c
@@ -1342,27 +1342,42 @@ static int uuid_from_dmi(char *system_uuid)
return ret;
}
-char *nvmf_hostnqn_generate()
+char *nvmf_hostid_generate()
{
- char *hostnqn;
int ret;
char uuid_str[NVME_UUID_LEN_STRING];
unsigned char uuid[NVME_UUID_LEN];
ret = uuid_from_dmi(uuid_str);
- if (ret < 0) {
+ if (ret < 0)
ret = uuid_from_device_tree(uuid_str);
- }
if (ret < 0) {
if (nvme_uuid_random(uuid) < 0)
memset(uuid, 0, NVME_UUID_LEN);
nvme_uuid_to_string(uuid, uuid_str);
}
- if (asprintf(&hostnqn, "nqn.2014-08.org.nvmexpress:uuid:%s", uuid_str) < 0)
- return NULL;
+ return strdup(uuid_str);
+}
+
+char *nvmf_hostnqn_generate_from_hostid(char *hostid)
+{
+ char *hid = NULL;
+ char *hostnqn;
+ int ret;
+
+ if (!hostid)
+ hostid = hid = nvmf_hostid_generate();
+
+ ret = asprintf(&hostnqn, "nqn.2014-08.org.nvmexpress:uuid:%s", hostid);
+ free(hid);
- return hostnqn;
+ return (ret < 0) ? NULL : hostnqn;
+}
+
+char *nvmf_hostnqn_generate()
+{
+ return nvmf_hostnqn_generate_from_hostid(NULL);
}
static char *nvmf_read_file(const char *f, int len)
diff --git a/src/nvme/fabrics.h b/src/nvme/fabrics.h
index 4ebeb35e..9dc13754 100644
--- a/src/nvme/fabrics.h
+++ b/src/nvme/fabrics.h
@@ -257,6 +257,27 @@ struct nvmf_discovery_log *nvmf_get_discovery_wargs(struct nvme_get_discovery_ar
*/
char *nvmf_hostnqn_generate();
+/**
+ * nvmf_hostnqn_generate_from_hostid() - Generate a host nqn from host
+ * identifier
+ * @hostid: Host identifier
+ *
+ * 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.
+ */
+char *nvmf_hostnqn_generate_from_hostid(char *hostid);
+
+/**
+ * nvmf_hostid_generate() - Generate a machine specific host identifier
+ *
+ * Return: On success, an identifier string based on the machine identifier to
+ * be used as NVMe Host Identifier, or NULL on failure.
+ */
+char *nvmf_hostid_generate();
+
/**
* nvmf_hostnqn_from_file() - Reads the host nvm qualified name from the config
* default location
--
2.18.2
More information about the Linux-nvme
mailing list