From: Sagi Grimberg Date: Thu, 12 Jan 2017 11:13:28 +0000 (+0200) Subject: nvme-cli: Add nvme hostnqn generation option X-Git-Tag: v1.2~35 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=7b088b6773001a4d55d3eb48cf2ece8f81f6cfab;p=users%2Fsagi%2Fnvme-cli.git nvme-cli: Add nvme hostnqn generation option Add option to generate a NVMe qualified name of a given host (in the form of: nqn.2014-08.org.nvmexpress:NVMf:uuid:). This hostnqn will be used for fabrics discovery and connect functions. Signed-off-by: Sagi Grimberg Reviewed-by: Christoph Hellwig Reviewed-by: Jay Freyensee --- diff --git a/Makefile b/Makefile index a8acd3fc..cb83001a 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ CFLAGS ?= -O2 -g -Wall -Werror CFLAGS += -std=gnu99 CPPFLAGS += -D_GNU_SOURCE -D__CHECK_ENDIAN__ +LDFLAGS += -luuid NVME = nvme INSTALL ?= install DESTDIR = diff --git a/nvme-builtin.h b/nvme-builtin.h index 5a26f692..087fc198 100644 --- a/nvme-builtin.h +++ b/nvme-builtin.h @@ -48,6 +48,7 @@ COMMAND_LIST( ENTRY("connect-all", "Discover and Connect to NVMeoF subsystems", connect_all_cmd) ENTRY("connect", "Connect to NVMeoF subsystem", connect_cmd) ENTRY("disconnect", "Disconnect from NVMeoF subsystem", disconnect_cmd) + ENTRY("gen-hostnqn", "Generate NVMeoF host NQN", gen_hostnqn_cmd) ); #endif diff --git a/nvme.c b/nvme.c index b97109b3..24fdce95 100644 --- a/nvme.c +++ b/nvme.c @@ -44,6 +44,7 @@ #include #include #include +#include #include "nvme-print.h" #include "nvme-ioctl.h" @@ -2671,6 +2672,17 @@ static int admin_passthru(int argc, char **argv, struct command *cmd, struct plu return passthru(argc, argv, NVME_IOCTL_ADMIN_CMD, desc, cmd); } +static int gen_hostnqn_cmd(int argc, char **argv, struct command *command, struct plugin *plugin) +{ + uuid_t uuid; + char uuid_str[37]; /* e.g. 1b4e28ba-2fa1-11d2-883f-0016d3cca427 + \0 */ + + uuid_generate_random(uuid); + uuid_unparse_lower(uuid, uuid_str); + printf("nqn.2014-08.org.nvmexpress:NVMf:uuid:%s\n", uuid_str); + return 0; +} + static int discover_cmd(int argc, char **argv, struct command *command, struct plugin *plugin) { const char *desc = "Send Get Log Page request to Discovery Controller.";