From: Tokunori Ikegami Date: Fri, 17 Dec 2021 17:01:02 +0000 (+0900) Subject: Print device name on connect X-Git-Tag: v2.0-rc0~19^2 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=b17f3b56f4050bf854c84977617190e4406cb293;p=users%2Fsagi%2Fnvme-cli.git Print device name on connect Commit 0ad49ad ("Print device name on connect") Signed-off-by: Tokunori Ikegami --- diff --git a/Documentation/nvme-connect.txt b/Documentation/nvme-connect.txt index d8ed378f..300c7262 100644 --- a/Documentation/nvme-connect.txt +++ b/Documentation/nvme-connect.txt @@ -32,6 +32,7 @@ SYNOPSIS [--hdr-digest | -g] [--data-digest | -G] [--dump-config | -O] + [--output-format= | -o ] DESCRIPTION ----------- @@ -171,6 +172,12 @@ OPTIONS --dump-config:: Print out resulting JSON configuration file to stdout. +-o :: +--output-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 diff --git a/fabrics.c b/fabrics.c index 176b5093..3aec761c 100644 --- 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);