[pnfs] [PATCH 2/2] more nfs4.1 draft-19 updates for layout{get, commit, return}
Benny Halevy
bhalevy at panasas.com
Mon Feb 11 10:38:29 EST 2008
Signed-off-by: Benny Halevy <bhalevy at panasas.com>
---
epan/dissectors/packet-nfs.c | 40 +++++++++++++++++++++++++++++++++-------
1 files changed, 33 insertions(+), 7 deletions(-)
diff --git a/epan/dissectors/packet-nfs.c b/epan/dissectors/packet-nfs.c
index 1d7f9f0..ffaef77 100644
--- a/epan/dissectors/packet-nfs.c
+++ b/epan/dissectors/packet-nfs.c
@@ -407,7 +407,7 @@ static int hf_nfs_first_stripe_idx4 = -1;
static int hf_nfs_layout_count = -1;
static int hf_nfs_pattern_offset = -1;
static int hf_nfs_notification_bitmap4 = -1;
-
+static int hf_nfs_lrs_present = -1;
/* Hidden field for v2, v3, and v4 status */
int hf_nfs_nfsstat = -1;
@@ -7718,6 +7718,23 @@ dissect_nfs_layoutreturn4(tvbuff_t *tvb, int offset, proto_tree *tree)
if (returntype == 1) { /* RETURN_FILE */
offset = dissect_rpc_uint64(tvb, tree, hf_nfs_offset4, offset);
offset = dissect_rpc_uint64(tvb, tree, hf_nfs_length4, offset);
+ offset = dissect_nfs_stateid4(tvb, offset, tree);
+ offset = dissect_nfsdata(tvb, offset, tree, hf_nfs_data);
+ }
+
+ return offset;
+}
+
+static int
+dissect_nfs_layoutreturn_stateid(tvbuff_t *tvb, proto_tree *tree, int offset)
+{
+ guint lrs_present;
+
+ lrs_present = tvb_get_ntohl(tvb, offset);
+ offset = dissect_rpc_bool(tvb, tree, hf_nfs_lrs_present, offset);
+
+ if (lrs_present) {
+ offset = dissect_nfs_stateid4(tvb, offset, tree);
}
return offset;
@@ -8304,6 +8321,7 @@ dissect_nfs_argop4(tvbuff_t *tvb, int offset, packet_info *pinfo,
offset = dissect_rpc_uint64(tvb, newftree, hf_nfs_length4, offset);
offset = dissect_rpc_uint64(tvb, newftree,
hf_nfs_length4_minlength, offset);
+ offset = dissect_nfs_stateid4(tvb, offset, newftree);
offset = dissect_rpc_uint32(tvb, newftree, hf_nfs_count4_maxcount,
offset);
break;
@@ -8312,9 +8330,9 @@ dissect_nfs_argop4(tvbuff_t *tvb, int offset, packet_info *pinfo,
offset = dissect_rpc_uint64(tvb, newftree, hf_nfs_offset4, offset);
offset = dissect_rpc_uint64(tvb, newftree, hf_nfs_length4, offset);
offset = dissect_rpc_bool(tvb, newftree, hf_nfs_reclaim4, offset);
+ offset = dissect_nfs_stateid4(tvb, offset, newftree);
offset = dissect_nfs_newoffset4(tvb, offset, newftree);
offset = dissect_nfs_newtime4(tvb, offset, newftree);
- offset = dissect_nfs_newtime4(tvb, offset, newftree);
offset = dissect_rpc_uint32(tvb, newftree, hf_nfs_layouttype4,
offset);
offset = dissect_nfsdata(tvb, offset, newftree,
@@ -8433,7 +8451,7 @@ static int
dissect_nfs_resop4(tvbuff_t *tvb, int offset, packet_info *pinfo,
proto_tree *tree)
{
- guint32 ops, ops_counter;
+ guint32 ops, ops_counter, count;
guint32 opcode;
proto_item *fitem;
proto_tree *ftree = NULL;
@@ -8646,11 +8664,14 @@ dissect_nfs_resop4(tvbuff_t *tvb, int offset, packet_info *pinfo,
offset = dissect_rpc_bool(tvb, newftree, hf_nfs_return_on_close4,
offset);
offset = dissect_nfs_stateid4(tvb, offset, newftree);
+ count = tvb_get_ntohl(tvb, offset);
offset = dissect_rpc_uint32(tvb, newftree, hf_nfs_layout_count, offset);
- offset = dissect_rpc_uint64(tvb, newftree, hf_nfs_offset4, offset);
- offset = dissect_rpc_uint64(tvb, newftree, hf_nfs_length4, offset);
- offset = dissect_rpc_uint32(tvb, newftree, hf_nfs_iomode4, offset);
- offset = dissect_nfs_layout(tvb, offset, pinfo, newftree);
+ while (count-- > 0) {
+ offset = dissect_rpc_uint64(tvb, newftree, hf_nfs_offset4, offset);
+ offset = dissect_rpc_uint64(tvb, newftree, hf_nfs_length4, offset);
+ offset = dissect_rpc_uint32(tvb, newftree, hf_nfs_iomode4, offset);
+ offset = dissect_nfs_layout(tvb, offset, pinfo, newftree);
+ }
break;
case NFS4_OP_LAYOUTCOMMIT:
@@ -8658,6 +8679,7 @@ dissect_nfs_resop4(tvbuff_t *tvb, int offset, packet_info *pinfo,
break;
case NFS4_OP_LAYOUTRETURN:
+ offset = dissect_nfs_layoutreturn_stateid(tvb, newftree, offset);
break;
case NFS4_OP_GETDEVINFO:
@@ -10259,6 +10281,10 @@ proto_register_nfs(void)
"Cache this?", "nfs.cachethis4", FT_BOOLEAN, BASE_NONE,
TFS(&tfs_yes_no), 0, NULL, HFILL }},
+ { &hf_nfs_lrs_present, {
+ "Stateid present?", "nfs.lrs_present", FT_BOOLEAN, BASE_NONE,
+ TFS(&tfs_yes_no), 0, NULL, HFILL }},
+
/* Hidden field for v2, v3, and v4 status */
{ &hf_nfs_nfsstat, {
"Status", "nfs.status", FT_UINT32, BASE_DEC,
--
1.5.3.3
More information about the pNFS
mailing list