]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
Print device name on connect
authorTokunori Ikegami <ikegami.t@gmail.com>
Fri, 17 Dec 2021 17:01:02 +0000 (02:01 +0900)
committerTokunori Ikegami <ikegami.t@gmail.com>
Fri, 17 Dec 2021 17:01:02 +0000 (02:01 +0900)
Commit 0ad49ad ("Print device name on connect")
Signed-off-by: Tokunori Ikegami <ikegami.t@gmail.com>
Documentation/nvme-connect.txt
fabrics.c

index d8ed378fdbabd06bff3759aca1986a55ea5d9b79..300c72620ad8814bd5dd9d14bd907e1f3f2e79f5 100644 (file)
@@ -32,6 +32,7 @@ SYNOPSIS
                [--hdr-digest             | -g]
                [--data-digest            | -G]
                [--dump-config            | -O]
+               [--output-format=<fmt>    | -o <fmt>]
 
 DESCRIPTION
 -----------
@@ -171,6 +172,12 @@ OPTIONS
 --dump-config::
        Print out resulting JSON configuration file to stdout.
 
+-o <format>::
+--output-format=<format>::
+       Set the reporting format to 'normal' or 'json'. Only one output format can
+       be used at a time. When this option is specified, the device associated with
+       the connection will be printed. Nothing is printed otherwise.
+
 EXAMPLES
 --------
 * Connect to a subsystem named nqn.2014-08.com.example:nvme:nvm-subsystem-sn-d78432
index 176b5093eab4b4269322936ee2b12b18fb5ca654..3aec761c1f400175a53cf47bda0b1f5ddf067e5f 100644 (file)
--- a/fabrics.c
+++ b/fabrics.c
@@ -101,7 +101,6 @@ static const char *nvmf_config_file = "Use specified JSON configuration file or
        OPT_FLAG("hdr-digest",        'g', &c.hdr_digest,         nvmf_hdr_digest),     \
        OPT_FLAG("data-digest",       'G', &c.data_digest,        nvmf_data_digest)     \
 
-
 static void space_strip_len(int max, char *str)
 {
        int i;
@@ -241,6 +240,23 @@ static void save_discovery_log(char *raw, struct nvmf_discovery_log *log)
        close(fd);
 }
 
+static void print_connect_msg(nvme_ctrl_t c)
+{
+       printf("device: %s\n", nvme_ctrl_get_name(c));
+}
+
+static void json_connect_msg(nvme_ctrl_t c)
+{
+       struct json_object *root;
+
+       root = json_create_object();
+       json_object_add_value_string(root, "device", nvme_ctrl_get_name(c));
+
+       json_print_object(root, NULL);
+       printf("\n");
+       json_free_object(root);
+}
+
 static int __discover(nvme_ctrl_t c, const struct nvme_fabrics_config *defcfg,
                      char *raw, bool connect, bool persistent,
                      enum nvme_print_flags flags)
@@ -574,12 +590,15 @@ int nvmf_connect(const char *desc, int argc, char **argv)
        nvme_ctrl_t c;
        int ret;
        struct nvme_fabrics_config cfg;
+       enum nvme_print_flags flags = -1;
+       char *format = "";
 
        OPT_ARGS(opts) = {
                NVMF_OPTS(cfg),
                OPT_STRING("config", 'J', "FILE", &config_file, nvmf_config_file),
                OPT_INCR("verbose", 'v', &verbose, "Increase logging verbosity"),
                OPT_FLAG("dump-config", 'O', &dump_config, "Dump JSON configuration to stdout"),
+               OPT_FMT("output-format", 'o', &format, "Output format: normal|json"),
                OPT_END()
        };
 
@@ -589,6 +608,16 @@ int nvmf_connect(const char *desc, int argc, char **argv)
        if (ret)
                return ret;
 
+       if (!strcmp(format, ""))
+               flags = -1;
+       else if (!strcmp(format, "normal"))
+               flags = NORMAL;
+       else if (!strcmp(format, "json"))
+               flags = JSON;
+       else {
+               return EINVAL;
+       }
+
        switch (verbose) {
        case 0:
                nvme_log_level = LOG_WARNING;
@@ -653,6 +682,13 @@ int nvmf_connect(const char *desc, int argc, char **argv)
        ret = nvmf_add_ctrl(h, c, &cfg, cfg.disable_sqflow);
        if (ret)
                nvme_msg(LOG_ERR, "no controller found\n");
+       else {
+               if (flags == NORMAL)
+                       print_connect_msg(c);
+               else if (flags == JSON)
+                       json_connect_msg(c);
+       }
+
 out_free:
        if (hnqn)
                free(hnqn);