From: Nate Roiger Date: Fri, 2 Apr 2021 14:30:21 +0000 (-0500) Subject: Address PR comments: Remove obsolete format options; Add JSON output. X-Git-Tag: v1.14~24 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=81a0c344f7d2e22e20748e1592c95f38000c19f5;p=users%2Fsagi%2Fnvme-cli.git Address PR comments: Remove obsolete format options; Add JSON output. Signed-off-by: Nate Roiger --- diff --git a/nvme-print.c b/nvme-print.c index 7585914f..1a8f3cde 100755 --- a/nvme-print.c +++ b/nvme-print.c @@ -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 67ddc269..eb491319 100644 --- 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)