NVME dissector: fix parsing of NVME Identify command.

This commit is contained in:
Constantine Gavrilov 2021-02-07 21:31:21 +02:00 committed by Wireshark GitLab Utility
parent 54abb56b1d
commit 5160fc895e
1 changed files with 47 additions and 5 deletions

View File

@ -69,6 +69,9 @@ static int hf_nvme_cmd_rsvd3 = -1;
static int hf_nvme_identify_cntid = -1;
static int hf_nvme_identify_rsvd = -1;
static int hf_nvme_identify_cns = -1;
static int hf_nvme_identify_nvmesetid = -1;
static int hf_nvme_identify_rsvd1 = -1;
static int hf_nvme_identify_uuid_index = -1;
static int hf_nvme_identify_ns_nsze = -1;
static int hf_nvme_identify_ns_ncap = -1;
static int hf_nvme_identify_ns_nuse = -1;
@ -254,6 +257,23 @@ static const value_string sgl_sub_type_tbl[] = {
};
static const value_string cns_table[] = {
{ 0, "Identify Namespace"},
{ 1, "Identify Controller"},
{ 2, "Active Namespace List"},
{ 3, "Namespace Identification Descriptor"},
{4, "NVM Set List"},
{0x10, "Allocated Namespace ID List"},
{0x11, "Identify Namespace Data Structure"},
{0x12, "Controller List Attached to NSID"},
{0x13, "Existing Controllers List"},
{0x14, "Primary Controller Capabilities"},
{0x15, "Secondary Controller List"},
{0x16, "Namespace Granularity List"},
{0x17, "UUID List"},
{0, NULL}
};
static const value_string dsm_acc_freq_tbl[] = {
{ 0, "No frequency"},
{ 1, "Typical"},
@ -747,13 +767,23 @@ static void dissect_nvme_identify_resp(tvbuff_t *cmd_tvb, proto_tree *cmd_tree,
static void dissect_nvme_identify_cmd(tvbuff_t *cmd_tvb, proto_tree *cmd_tree,
struct nvme_cmd_ctx *cmd_ctx)
{
guint32 val;
proto_item *item;
cmd_ctx->resp_type = tvb_get_guint16(cmd_tvb, 40, ENC_LITTLE_ENDIAN);
proto_tree_add_item(cmd_tree, hf_nvme_identify_cns, cmd_tvb,
40, 2, ENC_LITTLE_ENDIAN);
item = proto_tree_add_item_ret_uint(cmd_tree, hf_nvme_identify_cns, cmd_tvb,
40, 1, ENC_LITTLE_ENDIAN, &val);
proto_item_append_text(item, " %s", val_to_str(val, cns_table, "Reserved"));
proto_tree_add_item(cmd_tree, hf_nvme_identify_rsvd, cmd_tvb,
42, 2, ENC_NA);
41, 1, ENC_NA);
proto_tree_add_item(cmd_tree, hf_nvme_identify_cntid, cmd_tvb,
44, 4, ENC_NA);
42, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item(cmd_tree, hf_nvme_identify_nvmesetid, cmd_tvb,
44, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item(cmd_tree, hf_nvme_identify_rsvd1, cmd_tvb,
46, 2, ENC_NA);
proto_tree_add_item(cmd_tree, hf_nvme_identify_uuid_index, cmd_tvb,
56, 1, ENC_LITTLE_ENDIAN);
}
static void dissect_nvme_rw_cmd(tvbuff_t *cmd_tvb, proto_tree *cmd_tree)
@ -1098,7 +1128,7 @@ proto_register_nvme(void)
},
{ &hf_nvme_identify_cntid,
{ "Controller Identifier (CNTID)", "nvme.cmd.identify.cntid",
FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL}
FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}
},
{ &hf_nvme_identify_rsvd,
{ "Reserved", "nvme.cmd.identify.rsvd",
@ -1106,8 +1136,20 @@ proto_register_nvme(void)
},
{ &hf_nvme_identify_cns,
{ "Controller or Namespace Structure (CNS)", "nvme.cmd.identify.cns",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}
},
{ &hf_nvme_identify_nvmesetid,
{ "NVM Set Identifier (NVMSETID)", "nvme.cmd.identify.nvmesetid",
FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}
},
{ &hf_nvme_identify_rsvd1,
{ "Reserved", "nvme.cmd.identify.rsvd1",
FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL}
},
{ &hf_nvme_identify_uuid_index,
{ "UUID Index", "nvme.cmd.identify.uuid_index",
FT_UINT8, BASE_HEX, NULL, 0x7f, NULL, HFILL}
},
/* Identify NS response */
{ &hf_nvme_identify_ns_nsze,