aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-nfs.c
diff options
context:
space:
mode:
authorBenjamin Coddington <bcodding@redhat.com>2016-06-23 05:57:03 -0400
committerAnders Broman <a.broman58@gmail.com>2016-06-23 14:20:28 +0000
commit45db2fbe1e00eff087b01b4b69450d3e7d013185 (patch)
tree66ad3cf9601bb8d9a7060256f8b39318b2ac4137 /epan/dissectors/packet-nfs.c
parent738b3e895fed42d12cd8e6ca3909c211a80e52fb (diff)
packet-nfs: add extent decoding for SCSI layouts
Decode extents sent within the response to a LAYOUTGET operation on SCSI layout types. Change-Id: I1fc0a5e3d4782f078f96866dc63f2ec43b6d62b1 Signed-off-by: Benjamin Coddington <bcodding@redhat.com> Reviewed-on: https://code.wireshark.org/review/16097 Petri-Dish: Anders Broman <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-nfs.c')
-rw-r--r--epan/dissectors/packet-nfs.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/epan/dissectors/packet-nfs.c b/epan/dissectors/packet-nfs.c
index 07bc25b4cd..5c67b61a7b 100644
--- a/epan/dissectors/packet-nfs.c
+++ b/epan/dissectors/packet-nfs.c
@@ -515,6 +515,10 @@ static int hf_nfs4_devaddr_scsi_vpd_code_set = -1;
static int hf_nfs4_devaddr_scsi_vpd_designator_type = -1;
static int hf_nfs4_devaddr_scsi_vpd_designator = -1;
static int hf_nfs4_devaddr_scsi_private_key = -1;
+static int hf_nfs4_scsil_ext_file_offset = -1;
+static int hf_nfs4_scsil_ext_length = -1;
+static int hf_nfs4_scsil_ext_vol_offset = -1;
+static int hf_nfs4_scsil_ext_state = -1;
static int hf_nfs4_return_on_close = -1;
static int hf_nfs4_slotid = -1;
static int hf_nfs4_high_slotid = -1;
@@ -8758,6 +8762,18 @@ static const value_string scsi_vpd_code_set_names[] = {
{ 0, NULL }
};
+static const value_string scsi_extent_state_names[] = {
+#define PNFS_SCSI_EXT_READ_WRITE_DATA 0
+ { PNFS_SCSI_EXT_READ_WRITE_DATA, "READ_WRITE_DATA"},
+#define PNFS_SCSI_EXT_READ_DATA 1
+ { PNFS_SCSI_EXT_READ_DATA, "READ_DATA" },
+#define PNFS_SCSI_EXT_INVALID_DATA 2
+ { PNFS_SCSI_EXT_INVALID_DATA, "INVALID_DATA" },
+#define PNFS_SCSI_EXT_NONE_DATA 3
+ { PNFS_SCSI_EXT_NONE_DATA, "NONE_DATA" },
+ { 0, NULL }
+};
+
static int
dissect_nfs4_devices_scsi_base_volume(tvbuff_t *tvb, int offset, proto_tree *tree)
{
@@ -9245,6 +9261,32 @@ dissect_nfs4_layoutget(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree
offset = dissect_rpc_uint32(tvb, newtree,
hf_nfs4_ff_stats_collect_hint,
offset);
+ } else if (layout_type == LAYOUT4_SCSI) {
+ guint ext_count;
+ proto_tree *ext_tree;
+
+ offset += 4; /* Skip past opaque count */
+
+ ext_count = tvb_get_ntohl(tvb, offset);
+
+ subtree = proto_tree_add_subtree_format(newtree, tvb, offset, 4,
+ ett_nfs4_layoutseg_sub, NULL, "SCSI Extents (count: %u)",
+ ext_count);
+ offset +=4;
+
+ for (i = 0; i < ext_count; i++) {
+ ext_tree = proto_tree_add_subtree_format(subtree, tvb, offset, 4,
+ ett_nfs4_layoutseg_sub, NULL, "extent %u", i);
+ offset = dissect_nfs4_deviceid(tvb, offset, ext_tree);
+ offset = dissect_rpc_uint64(tvb, ext_tree,
+ hf_nfs4_scsil_ext_file_offset, offset);
+ offset = dissect_rpc_uint64(tvb, ext_tree,
+ hf_nfs4_scsil_ext_length, offset);
+ offset = dissect_rpc_uint64(tvb, ext_tree,
+ hf_nfs4_scsil_ext_vol_offset, offset);
+ offset = dissect_rpc_uint32(tvb, ext_tree,
+ hf_nfs4_scsil_ext_state, offset);
+ }
} else {
offset = dissect_nfsdata(tvb, offset, newtree, hf_nfs4_layout);
continue;
@@ -12871,6 +12913,22 @@ proto_register_nfs(void)
"private key", "nfs.devaddr.scsi_private_key",
FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+ { &hf_nfs4_scsil_ext_file_offset, {
+ "file offset", "nfs.scsil_ext_file_offset", FT_UINT64, BASE_DEC,
+ NULL, 0, NULL, HFILL }},
+
+ { &hf_nfs4_scsil_ext_length, {
+ "length", "nfs.scsil_ext_length", FT_UINT64, BASE_DEC,
+ NULL, 0, NULL, HFILL }},
+
+ { &hf_nfs4_scsil_ext_vol_offset, {
+ "volume offset", "nfs.scsill_ext_vol_offset", FT_UINT64, BASE_DEC,
+ NULL, 0, NULL, HFILL }},
+
+ { &hf_nfs4_scsil_ext_state, {
+ "extent state", "nfs.scsil_ext_state", FT_UINT32, BASE_DEC,
+ VALS(scsi_extent_state_names), 0, NULL, HFILL }},
+
{ &hf_nfs4_return_on_close, {
"return on close?", "nfs.retclose4", FT_BOOLEAN, BASE_NONE,
TFS(&tfs_yes_no), 0x0, NULL, HFILL }},