]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
fabrics: add hostid option to connect command
authorJohannes Thumshirn <jthumshirn@suse.de>
Tue, 20 Jun 2017 12:42:26 +0000 (14:42 +0200)
committerKeith Busch <keith.busch@intel.com>
Tue, 20 Jun 2017 20:37:32 +0000 (16:37 -0400)
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 <jthumshirn@suse.de>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Keith Busch <keith.busch@intel.com>
fabrics.c
linux/nvme.h
nvme.spec.in

index bbcca470c72a05149672fc6348725c4cf201f4d5..87cdba2851d1f9e19b69cdd10e881375a4d8bf40 100644 (file)
--- 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" },
index b2c8dbb2244b498e32b6258d56e780f00e5972a5..08bf0b13cf380e5f8d6e38940f0f250106794902 100644 (file)
@@ -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
index c14b3f0f96dc3855e18a61abf8c05f28281e15b9..0be61e398fd0de57c6f790849d112a01009b0d32 100644 (file)
@@ -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