From a6105a30a39a04ac844c59004c8ff57e87b5af0f Mon Sep 17 00:00:00 2001 From: Israel Rukshin Date: Thu, 19 Sep 2019 18:35:40 +0300 Subject: [PATCH] nvme-cli/fabrics: Add tos param to connect cmd Added 'tos' to 'connect' command so users can specify the type of service. usage examples: nvme connect --tos=0 --transport=rdma --traddr=10.0.1.1 --nqn=test-nvme nvme connect -T 0 -t rdma -a 10.0.1.1 -n test_nvme Signed-off-by: Israel Rukshin Reviewed-by: Max Gurtovoy --- fabrics.c | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/fabrics.c b/fabrics.c index 36361337..85f53714 100644 --- a/fabrics.c +++ b/fabrics.c @@ -60,6 +60,7 @@ static struct config { int keep_alive_tmo; int reconnect_delay; int ctrl_loss_tmo; + int tos; char *raw; char *device; int duplicate_connect; @@ -625,11 +626,12 @@ add_bool_argument(char **argstr, int *max_len, char *arg_str, bool arg) } static int -add_int_argument(char **argstr, int *max_len, char *arg_str, int arg) +add_int_argument(char **argstr, int *max_len, char *arg_str, int arg, + bool allow_zero) { int len; - if (arg) { + if ((arg && !allow_zero) || (arg != -1 && allow_zero)) { len = snprintf(*argstr, *max_len, ",%s=%d", arg_str, arg); if (len < 0) return -EINVAL; @@ -689,21 +691,23 @@ static int build_options(char *argstr, int max_len, bool discover) add_argument(&argstr, &max_len, "hostid", cfg.hostid)) || (!discover && add_int_argument(&argstr, &max_len, "nr_io_queues", - cfg.nr_io_queues)) || + cfg.nr_io_queues, false)) || add_int_argument(&argstr, &max_len, "nr_write_queues", - cfg.nr_write_queues) || + cfg.nr_write_queues, false) || add_int_argument(&argstr, &max_len, "nr_poll_queues", - cfg.nr_poll_queues) || + cfg.nr_poll_queues, false) || (!discover && add_int_argument(&argstr, &max_len, "queue_size", - cfg.queue_size)) || + cfg.queue_size, false)) || (!discover && add_int_argument(&argstr, &max_len, "keep_alive_tmo", - cfg.keep_alive_tmo)) || + cfg.keep_alive_tmo, false)) || add_int_argument(&argstr, &max_len, "reconnect_delay", - cfg.reconnect_delay) || + cfg.reconnect_delay, false) || add_int_argument(&argstr, &max_len, "ctrl_loss_tmo", - cfg.ctrl_loss_tmo) || + cfg.ctrl_loss_tmo, false) || + add_int_argument(&argstr, &max_len, "tos", + cfg.tos, true) || add_bool_argument(&argstr, &max_len, "duplicate_connect", cfg.duplicate_connect) || add_bool_argument(&argstr, &max_len, "disable_sqflow", @@ -798,6 +802,13 @@ retry: p += len; } + if (cfg.tos != -1) { + len = sprintf(p, ",tos=%d", cfg.tos); + if (len < 0) + return -EINVAL; + p += len; + } + if (cfg.keep_alive_tmo && !discover) { len = sprintf(p, ",keep_alive_tmo=%d", cfg.keep_alive_tmo); if (len < 0) @@ -1114,6 +1125,7 @@ int discover(const char *desc, int argc, char **argv, bool connect) OPT_INT("keep-alive-tmo", 'k', &cfg.keep_alive_tmo, "keep alive timeout period in seconds"), OPT_INT("reconnect-delay", 'c', &cfg.reconnect_delay, "reconnect timeout period in seconds"), OPT_INT("ctrl-loss-tmo", 'l', &cfg.ctrl_loss_tmo, "controller loss timeout period in seconds"), + OPT_INT("tos", 'T', &cfg.tos, "type of service"), OPT_FLAG("hdr_digest", 'g', &cfg.hdr_digest, "enable transport protocol header digest (TCP transport)"), OPT_FLAG("data_digest", 'G', &cfg.data_digest, "enable transport protocol data digest (TCP transport)"), OPT_INT("nr-io-queues", 'i', &cfg.nr_io_queues, "number of io queues to use (default is core count)"), @@ -1125,6 +1137,7 @@ int discover(const char *desc, int argc, char **argv, bool connect) OPT_END() }; + cfg.tos = -1; ret = argconfig_parse(argc, argv, desc, opts, &cfg, sizeof(cfg)); if (ret) goto out; @@ -1170,6 +1183,7 @@ int connect(const char *desc, int argc, char **argv) OPT_INT("keep-alive-tmo", 'k', &cfg.keep_alive_tmo, "keep alive timeout period in seconds"), OPT_INT("reconnect-delay", 'c', &cfg.reconnect_delay, "reconnect timeout period in seconds"), OPT_INT("ctrl-loss-tmo", 'l', &cfg.ctrl_loss_tmo, "controller loss timeout period in seconds"), + OPT_INT("tos", 'T', &cfg.tos, "type of service"), OPT_FLAG("duplicate-connect", 'D', &cfg.duplicate_connect, "allow duplicate connections between same transport host and subsystem port"), OPT_FLAG("disable-sqflow", 'd', &cfg.disable_sqflow, "disable controller sq flow control (default false)"), OPT_FLAG("hdr-digest", 'g', &cfg.hdr_digest, "enable transport protocol header digest (TCP transport)"), @@ -1177,6 +1191,7 @@ int connect(const char *desc, int argc, char **argv) OPT_END() }; + cfg.tos = -1; ret = argconfig_parse(argc, argv, desc, opts, &cfg, sizeof(cfg)); if (ret) goto out; -- 2.50.1