char *trsvcid;
char *host_traddr;
char *hostnqn;
+ char *hostid;
char *nr_io_queues;
char *queue_size;
char *keep_alive_tmo;
#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
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;
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);
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");
{"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},
{"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" },