NVMe: decode Set Features command.
This commit is contained in:
parent
6755309958
commit
f0b83585c1
|
@ -104,6 +104,8 @@ static int hf_nvme_get_logpage_numd = -1;
|
|||
static int hf_nvme_get_logpage_dword11[3] = { NEG_LST_3 };
|
||||
static int hf_nvme_get_logpage_lpo = -1;
|
||||
static int hf_nvme_get_logpage_dword14[3] = { NEG_LST_3 };
|
||||
static int hf_nvme_set_features_dword10[4] = { NEG_LST_4 };
|
||||
static int hf_nvme_set_features_dword14[3] = { NEG_LST_3 };
|
||||
static int hf_nvme_identify_ns_nsze = -1;
|
||||
static int hf_nvme_identify_ns_ncap = -1;
|
||||
static int hf_nvme_identify_ns_nuse = -1;
|
||||
|
@ -2594,6 +2596,51 @@ static void dissect_nvme_get_logpage_cmd(tvbuff_t *cmd_tvb, proto_tree *cmd_tree
|
|||
proto_tree_add_item(cmd_tree, hf_nvme_cmd_dword15, cmd_tvb, 60, 4, ENC_LITTLE_ENDIAN);
|
||||
}
|
||||
|
||||
static const value_string fid_table[] = {
|
||||
{ 0x01, "Arbitration" },
|
||||
{ 0x02, "Power Management" },
|
||||
{ 0x03, "LBA Range Type" },
|
||||
{ 0x04, "Temperature Threshold" },
|
||||
{ 0x05, "Error Recovery" },
|
||||
{ 0x06, "Volatile Write Cache" },
|
||||
{ 0x07, "Number of Queues" },
|
||||
{ 0x08, "Interrupt Coalescing" },
|
||||
{ 0x09, "Interrupt Vector Configuration" },
|
||||
{ 0x0A, "Write Atomicity Normal" },
|
||||
{ 0x0B, "Asynchronous Event Configuration" },
|
||||
{ 0x0C, "Autonomous Power State Transition" },
|
||||
{ 0x0D, "Host Memory Buffer" },
|
||||
{ 0x0E, "Timestamp" },
|
||||
{ 0x0F, "Keep Alive Timer" },
|
||||
{ 0x10, "Host Controlled Thermal Management" },
|
||||
{ 0x11, "Non-Operational Power State Config" },
|
||||
{ 0x12, "Read Recovery Level Config" },
|
||||
{ 0x13, "Predictable Latency Mode Config" },
|
||||
{ 0x14, "Predictable Latency Mode Window" },
|
||||
{ 0x15, "LBA Status Information Report Interval" },
|
||||
{ 0x16, "Host Behavior Support" },
|
||||
{ 0x17, "Sanitize Config" },
|
||||
{ 0x18, "Endurance Group Event Configuration" },
|
||||
{ 0x80, "Software Progress Marker" },
|
||||
{ 0x81, "Host Identifier" },
|
||||
{ 0x82, "Reservation Notification Mask" },
|
||||
{ 0x83, "Reservation Persistence" },
|
||||
{ 0x84, "Namespace Write Protection Config" },
|
||||
{ 0, NULL },
|
||||
};
|
||||
|
||||
static void dissect_nvme_set_features_cmd(tvbuff_t *cmd_tvb, proto_tree *cmd_tree,
|
||||
struct nvme_cmd_ctx *cmd_ctx)
|
||||
{
|
||||
cmd_ctx->cmd_ctx.set_features.fid = tvb_get_guint8(cmd_tvb, 40);
|
||||
add_group_mask_entry(cmd_tvb, cmd_tree, 40, 4, ASPEC(hf_nvme_set_features_dword10));
|
||||
proto_tree_add_item(cmd_tree, hf_nvme_cmd_dword11, cmd_tvb, 44, 4, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(cmd_tree, hf_nvme_cmd_dword12, cmd_tvb, 48, 4, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(cmd_tree, hf_nvme_cmd_dword13, cmd_tvb, 52, 4, ENC_LITTLE_ENDIAN);
|
||||
add_group_mask_entry(cmd_tvb, cmd_tree, 56, 4, ASPEC(hf_nvme_set_features_dword14));
|
||||
proto_tree_add_item(cmd_tree, hf_nvme_cmd_dword15, cmd_tvb, 60, 4, ENC_LITTLE_ENDIAN);
|
||||
}
|
||||
|
||||
static void dissect_nvme_rw_cmd(tvbuff_t *cmd_tvb, proto_tree *cmd_tree)
|
||||
{
|
||||
proto_item *ti, *dsm_tree, *item;
|
||||
|
@ -2741,6 +2788,9 @@ dissect_nvme_cmd(tvbuff_t *nvme_tvb, packet_info *pinfo, proto_tree *root_tree,
|
|||
case NVME_AQ_OPC_GET_LOG_PAGE:
|
||||
dissect_nvme_get_logpage_cmd(nvme_tvb, cmd_tree, cmd_ctx);
|
||||
break;
|
||||
case NVME_AQ_OPC_SET_FEATURES:
|
||||
dissect_nvme_set_features_cmd(nvme_tvb, cmd_tree, cmd_ctx);
|
||||
break;
|
||||
default:
|
||||
dissect_nvme_unhandled_cmd(nvme_tvb, cmd_tree);
|
||||
break;
|
||||
|
@ -3018,51 +3068,51 @@ proto_register_nvme(void)
|
|||
},
|
||||
/* get log page */
|
||||
{ &hf_nvme_get_logpage_dword10[0],
|
||||
{ "DWORD 10", "nvme.cmd.identify.get_logpage.dword10",
|
||||
{ "DWORD 10", "nvme.cmd.get_logpage.dword10",
|
||||
FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}
|
||||
},
|
||||
{ &hf_nvme_get_logpage_dword10[1],
|
||||
{ "Log Page Identifier (LID)", "nvme.cmd.identify.get_logpage.dword10.id",
|
||||
{ "Log Page Identifier (LID)", "nvme.cmd.get_logpage.dword10.id",
|
||||
FT_UINT32, BASE_CUSTOM, CF_FUNC(add_logpage_lid), 0xff, NULL, HFILL}
|
||||
},
|
||||
{ &hf_nvme_get_logpage_dword10[2],
|
||||
{ "Log Specific Field (LSP)", "nvme.cmd.identify.get_logpage.dword10.lsp",
|
||||
{ "Log Specific Field (LSP)", "nvme.cmd.get_logpage.dword10.lsp",
|
||||
FT_UINT32, BASE_HEX, NULL, 0x1f00, NULL, HFILL}
|
||||
},
|
||||
{ &hf_nvme_get_logpage_dword10[3],
|
||||
{ "Reserved", "nvme.cmd.identify.get_logpage.dword10.rsvd",
|
||||
{ "Reserved", "nvme.cmd.get_logpage.dword10.rsvd",
|
||||
FT_UINT32, BASE_HEX, NULL, 0x6000, NULL, HFILL}
|
||||
},
|
||||
{ &hf_nvme_get_logpage_dword10[4],
|
||||
{ "Retain Asynchronous Event (RAE)", "nvme.cmd.identify.get_logpage.dword10.rae",
|
||||
{ "Retain Asynchronous Event (RAE)", "nvme.cmd.get_logpage.dword10.rae",
|
||||
FT_BOOLEAN, 32, NULL, 0x8000, NULL, HFILL}
|
||||
},
|
||||
{ &hf_nvme_get_logpage_dword10[5],
|
||||
{ "Number of Dwords Lower (NUMDL)", "nvme.cmd.identify.get_logpage.dword10.numdl",
|
||||
{ "Number of Dwords Lower (NUMDL)", "nvme.cmd.get_logpage.dword10.numdl",
|
||||
FT_UINT32, BASE_HEX, NULL, 0xffff0000, NULL, HFILL}
|
||||
},
|
||||
{ &hf_nvme_get_logpage_numd,
|
||||
{ "Number of Dwords", "nvme.cmd.identify.get_logpage.numd",
|
||||
{ "Number of Dwords", "nvme.cmd.get_logpage.numd",
|
||||
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}
|
||||
},
|
||||
{ &hf_nvme_get_logpage_dword11[0],
|
||||
{ "DWORD 11", "nvme.cmd.identify.get_logpage.dword11",
|
||||
{ "DWORD 11", "nvme.cmd.get_logpage.dword11",
|
||||
FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}
|
||||
},
|
||||
{ &hf_nvme_get_logpage_dword11[1],
|
||||
{ "Number of Dwords Upper (NUMDU)", "nvme.cmd.identify.get_logpage.dword11.numdu",
|
||||
{ "Number of Dwords Upper (NUMDU)", "nvme.cmd.get_logpage.dword11.numdu",
|
||||
FT_UINT32, BASE_HEX, NULL, 0xffff, NULL, HFILL}
|
||||
},
|
||||
{ &hf_nvme_get_logpage_dword11[2],
|
||||
{ "Log Specific Identifier", "nvme.cmd.identify.get_logpage.dword11.lsi",
|
||||
{ "Log Specific Identifier", "nvme.cmd.get_logpage.dword11.lsi",
|
||||
FT_UINT32, BASE_HEX, NULL, 0xffff0000, NULL, HFILL}
|
||||
},
|
||||
{ &hf_nvme_get_logpage_lpo,
|
||||
{ "Log Page Offset (DWORD 12 and DWORD 13)", "nvme.cmd.identify.get_logpage.lpo",
|
||||
{ "Log Page Offset (DWORD 12 and DWORD 13)", "nvme.cmd.get_logpage.lpo",
|
||||
FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL}
|
||||
},
|
||||
{ &hf_nvme_get_logpage_dword14[0],
|
||||
{ "DWORD 14", "nvme.cmd.identify.get_logpage.dword14",
|
||||
{ "DWORD 14", "nvme.cmd.get_logpage.dword14",
|
||||
FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}
|
||||
},
|
||||
{ &hf_nvme_get_logpage_dword14[1],
|
||||
|
@ -3073,6 +3123,35 @@ proto_register_nvme(void)
|
|||
{ "Reserved", "nvme.cmd.identify.get_logpage.dword14.rsvd",
|
||||
FT_UINT32, BASE_HEX, NULL, 0xffffffc0, NULL, HFILL}
|
||||
},
|
||||
/* Set Features */
|
||||
{ &hf_nvme_set_features_dword10[0],
|
||||
{ "DWORD 10", "nvme.cmd.set_features.dword10",
|
||||
FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}
|
||||
},
|
||||
{ &hf_nvme_set_features_dword10[1],
|
||||
{ "Feature Identifier", "nvme.cmd.set_features.dword10.fid",
|
||||
FT_UINT32, BASE_HEX, VALS(fid_table), 0xff, NULL, HFILL}
|
||||
},
|
||||
{ &hf_nvme_set_features_dword10[2],
|
||||
{ "Reserved", "nvme.cmd.set_features.dword10.rsvd",
|
||||
FT_UINT32, BASE_HEX, NULL, 0x7fffff00, NULL, HFILL}
|
||||
},
|
||||
{ &hf_nvme_set_features_dword10[3],
|
||||
{ "Save", "nvme.cmd.set_features.dword10.sv",
|
||||
FT_UINT32, BASE_HEX, NULL, 0x80000000, NULL, HFILL}
|
||||
},
|
||||
{ &hf_nvme_set_features_dword14[0],
|
||||
{ "DWORD 14", "nvme.cmd.set_features.dword14",
|
||||
FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}
|
||||
},
|
||||
{ &hf_nvme_set_features_dword14[1],
|
||||
{ "UUID Index", "nvme.cmd.set_features.dword14.uuid",
|
||||
FT_UINT32, BASE_HEX, NULL, 0x7f, NULL, HFILL}
|
||||
},
|
||||
{ &hf_nvme_set_features_dword14[2],
|
||||
{ "Reserved", "nvme.cmd.set_features.dword14.rsvd",
|
||||
FT_UINT32, BASE_HEX, NULL, 0xffffff80, NULL, HFILL}
|
||||
},
|
||||
/* Identify NS response */
|
||||
{ &hf_nvme_identify_ns_nsze,
|
||||
{ "Namespace Size (NSZE)", "nvme.cmd.identify.ns.nsze",
|
||||
|
|
|
@ -45,6 +45,9 @@ struct nvme_cmd_ctx {
|
|||
guint64 off;
|
||||
guint8 uid_idx;
|
||||
} get_logpage;
|
||||
struct {
|
||||
guint8 fid;
|
||||
} set_features;
|
||||
} cmd_ctx;
|
||||
guint8 opcode;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue