]> www.infradead.org Git - users/hch/nvme-cli.git/commitdiff
nvme-cli/fabrics: Add tos param to connect cmd
authorIsrael Rukshin <israelr@mellanox.com>
Thu, 19 Sep 2019 15:35:40 +0000 (18:35 +0300)
committerKeith Busch <keith.busch@gmail.com>
Thu, 19 Sep 2019 15:51:32 +0000 (09:51 -0600)
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 <israelr@mellanox.com>
Reviewed-by: Max Gurtovoy <maxg@mellanox.com>
fabrics.c

index 363613370be6a99cbf476a20ef91709e62bed1ac..85f537142fec07f5fd38847c683ea9a4271b1e83 100644 (file)
--- 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;