]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
Address PR comments: Remove obsolete format options; Add JSON output.
authorNate Roiger <nate.roiger@hpe.com>
Fri, 2 Apr 2021 14:30:21 +0000 (09:30 -0500)
committerKeith Busch <kbusch@kernel.org>
Fri, 2 Apr 2021 14:40:05 +0000 (08:40 -0600)
Signed-off-by: Nate Roiger <nate.roiger@hpe.com>
nvme-print.c
nvme.c

index 7585914fae9a5dd9d644d32256f830b673737b09..1a8f3cde05ec8984a7fa0590a8ba43cb699f9e81 100755 (executable)
@@ -4200,6 +4200,35 @@ void nvme_show_id_nvmset(struct nvme_id_nvmset *nvmset, unsigned nvmset_id,
        }
 }
 
+static void json_nvme_primary_ctrl_caps(const struct nvme_primary_ctrl_caps *caps)
+{
+       struct json_object *root;
+
+       root = json_create_object();
+
+       json_object_add_value_uint(root, "cntlid", le16_to_cpu(caps->cntlid));
+       json_object_add_value_uint(root, "portid", le16_to_cpu(caps->portid));
+       json_object_add_value_uint(root, "crt",    caps->crt);
+
+       json_object_add_value_int(root, "vqfrt",  le32_to_cpu(caps->vqfrt));
+       json_object_add_value_int(root, "vqrfa",  le32_to_cpu(caps->vqrfa));
+       json_object_add_value_int(root, "vqrfap", le16_to_cpu(caps->vqrfap));
+       json_object_add_value_int(root, "vqprt",  le16_to_cpu(caps->vqprt));
+       json_object_add_value_int(root, "vqfrsm", le16_to_cpu(caps->vqfrsm));
+       json_object_add_value_int(root, "vqgran", le16_to_cpu(caps->vqgran));
+
+       json_object_add_value_int(root, "vifrt",  le32_to_cpu(caps->vifrt));
+       json_object_add_value_int(root, "virfa",  le32_to_cpu(caps->virfa));
+       json_object_add_value_int(root, "virfap", le16_to_cpu(caps->virfap));
+       json_object_add_value_int(root, "viprt",  le16_to_cpu(caps->viprt));
+       json_object_add_value_int(root, "vifrsm", le16_to_cpu(caps->vifrsm));
+       json_object_add_value_int(root, "vigran", le16_to_cpu(caps->vigran));
+
+       json_print_object(root, NULL);
+       printf("\n");
+       json_free_object(root);
+}
+
 static void nvme_show_primary_ctrl_caps_crt(__u8 crt)
 {
        __u8 rsvd = (crt & 0xFC) >> 2;
@@ -4219,6 +4248,8 @@ void nvme_show_primary_ctrl_caps(const struct nvme_primary_ctrl_caps *caps,
 
        if (flags & BINARY)
                return d_raw((unsigned char *)caps, sizeof(*caps));
+       else if (flags & JSON)
+               return json_nvme_primary_ctrl_caps(caps);
 
        printf("NVME Identify Primary Controller Capabilities:\n");
        printf("cntlid    : %#x\n", le16_to_cpu(caps->cntlid));
diff --git a/nvme.c b/nvme.c
index 67ddc26929deb3bb0962fe0260b0efca33e92840..eb49131926b327f70d2f26135bf66b9d3fbd998f 100644 (file)
--- a/nvme.c
+++ b/nvme.c
@@ -2415,17 +2415,13 @@ static int primary_ctrl_caps(int argc, char **argv, struct command *cmd, struct
 {
        const char *desc = "Send an Identify Primary Controller Capabilities "\
                "command to the given device and report the information in a "\
-               "human-redable or binary format.";
-       const char *raw = "show capabilities in binary format";
-       const char *human_readable = "show capabilities in readable format";
-
-       enum nvme_print_flags flags = NORMAL;
+               "decoded format (default), json or binary.";
        struct nvme_primary_ctrl_caps caps;
+
        int err, fd;
+       enum nvme_print_flags flags;
 
        struct config {
-               int raw_binary;
-               int human_readable;
                char *output_format;
        };
 
@@ -2434,9 +2430,7 @@ static int primary_ctrl_caps(int argc, char **argv, struct command *cmd, struct
        };
 
        OPT_ARGS(opts) = {
-               OPT_FMT("output-format",   'o', &cfg.output_format,  output_format),
-               OPT_FLAG("raw-binary",     'b', &cfg.raw_binary,     raw),
-               OPT_FLAG("human-readable", 'H', &cfg.human_readable, human_readable),
+               OPT_FMT("output-format", 'o', &cfg.output_format, output_format),
                OPT_END()
        };
 
@@ -2447,10 +2441,6 @@ static int primary_ctrl_caps(int argc, char **argv, struct command *cmd, struct
        err = flags = validate_output_format(cfg.output_format);
        if (flags < 0)
                goto close_fd;
-       if (cfg.raw_binary)
-               flags = BINARY;
-       if (cfg.human_readable)
-               flags |= VERBOSE;
 
        err = nvme_identify_primary_ctrl_caps(fd, &caps);
        if (!err)