From: Johannes Thumshirn Date: Tue, 20 Jun 2017 12:42:26 +0000 (+0200) Subject: fabrics: add hostid option to connect command X-Git-Tag: v1.4~47 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=9fcf19a9ecbfb46d3beee42d31205fefa9ab3ca2;p=users%2Fsagi%2Fnvme-cli.git fabrics: add hostid option to connect command Add an option to pass in the hostid either via command line or a new config file /etc/nvme/hostid. Signed-off-by: Johannes Thumshirn Reviewed-by: Christoph Hellwig Reviewed-by: Sagi Grimberg Signed-off-by: Keith Busch --- diff --git a/fabrics.c b/fabrics.c index bbcca470..87cdba28 100644 --- a/fabrics.c +++ b/fabrics.c @@ -51,6 +51,7 @@ static struct config { char *trsvcid; char *host_traddr; char *hostnqn; + char *hostid; char *nr_io_queues; char *queue_size; char *keep_alive_tmo; @@ -63,6 +64,7 @@ static struct config { #define PATH_NVME_FABRICS "/dev/nvme-fabrics" #define PATH_NVMF_DISC "/etc/nvme/discovery.conf" #define PATH_NVMF_HOSTNQN "/etc/nvme/hostnqn" +#define PATH_NVMF_HOSTID "/etc/nvme/hostid" #define SYS_NVME "/sys/class/nvme" #define MAX_DISC_ARGS 10 @@ -456,6 +458,29 @@ out: return ret; } +static int nvmf_hostid_file(void) +{ + FILE *f; + char hostid[NVMF_HOSTID_SIZE]; + int ret = false; + + f = fopen(PATH_NVMF_HOSTID, "r"); + if (f == NULL) + return false; + + if (fgets(hostid, sizeof(hostid), f) == NULL) + goto out; + + cfg.hostid = strdup(hostid); + if (!cfg.hostid) + goto out; + + ret = true; +out: + fclose(f); + return ret; +} + static int build_options(char *argstr, int max_len) { int len; @@ -516,6 +541,14 @@ static int build_options(char *argstr, int max_len) max_len -= len; } + if (cfg.hostid || nvmf_hostid_file()) { + len = snprintf(argstr, max_len, ",hostid=%s", cfg.hostid); + if (len < 0) + return -EINVAL; + argstr += len; + max_len -= len; + } + if (cfg.nr_io_queues) { len = snprintf(argstr, max_len, ",nr_io_queues=%s", cfg.nr_io_queues); @@ -582,6 +615,13 @@ static int connect_ctrl(struct nvmf_disc_rsp_page_entry *e) p += len; } + if (cfg.hostid) { + len = sprintf(p, ",hostid=%s", cfg.hostid); + if (len < 0) + return -EINVAL; + p += len; + } + switch (e->trtype) { case NVMF_TRTYPE_LOOP: /* loop */ len = sprintf(p, ",transport=loop"); @@ -782,6 +822,7 @@ int discover(const char *desc, int argc, char **argv, bool connect) {"trsvcid", 's', "LIST", CFG_STRING, &cfg.trsvcid, required_argument, "transport service id (e.g. IP port)" }, {"host-traddr", 'w', "LIST", CFG_STRING, &cfg.host_traddr, required_argument, "host traddr (e.g. FC WWN's)" }, {"hostnqn", 'q', "LIST", CFG_STRING, &cfg.hostnqn, required_argument, "user-defined hostnqn (if default not used)" }, + {"hostid", 'I', "LIST", CFG_STRING, &cfg.hostid, required_argument, "user-defined hostid (if default not used)"}, {"queue-size", 'Q', "LIST", CFG_STRING, &cfg.queue_size, required_argument, "number of io queue elements to use (default 128)" }, {"raw", 'r', "LIST", CFG_STRING, &cfg.raw, required_argument, "raw output file" }, {NULL}, @@ -815,6 +856,7 @@ int connect(const char *desc, int argc, char **argv) {"trsvcid", 's', "LIST", CFG_STRING, &cfg.trsvcid, required_argument, "transport service id (e.g. IP port)" }, {"host-traddr", 'w', "LIST", CFG_STRING, &cfg.host_traddr, required_argument, "host traddr (e.g. FC WWN's)" }, {"hostnqn", 'q', "LIST", CFG_STRING, &cfg.hostnqn, required_argument, "user-defined hostnqn" }, + {"hostid", 'I', "LIST", CFG_STRING, &cfg.hostid, required_argument, "user-defined hostid (if default not used)"}, {"nr-io-queues", 'i', "LIST", CFG_STRING, &cfg.nr_io_queues, required_argument, "number of io queues to use (default is core count)" }, {"queue-size", 'Q', "LIST", CFG_STRING, &cfg.queue_size, required_argument, "number of io queue elements to use (default 128)" }, {"keep-alive-tmo", 'k', "LIST", CFG_STRING, &cfg.keep_alive_tmo, required_argument, "keep alive timeout period in seconds" }, diff --git a/linux/nvme.h b/linux/nvme.h index b2c8dbb2..08bf0b13 100644 --- a/linux/nvme.h +++ b/linux/nvme.h @@ -23,6 +23,7 @@ /* However the max length of a qualified name is another size */ #define NVMF_NQN_SIZE 223 +#define NVMF_HOSTID_SIZE 36 #define NVMF_TRSVCID_SIZE 32 #define NVMF_TRADDR_SIZE 256 #define NVMF_TSAS_SIZE 256 diff --git a/nvme.spec.in b/nvme.spec.in index c14b3f0f..0be61e39 100644 --- a/nvme.spec.in +++ b/nvme.spec.in @@ -7,6 +7,7 @@ Group: Development/Tools URL: https://github.com/linux-nvme/nvme-cli/ Source: nvme-@@VERSION@@.tar.gz Provides: nvme +Requires(post): uuidgen BuildRoot: %{_tmppath}/%{name}-%{version}-root %description @@ -39,6 +40,9 @@ if [ $1 = 1 ]; then # 1 : This package is being installed for the first time install -D /dev/null /etc/nvme/hostnqn echo $(nvme gen-hostnqn) > /etc/nvme/hostnqn fi + if [ ! -f /etc/nvme/hostid ]; then + uuidgen > /etc/nvme/hostid + fi fi %preun