[PATCH 07/13] do not re-use v3 createmode

Tigran Mkrtchyan tigran.mkrtchyan at desy.de
Mon Jun 16 15:20:44 EDT 2008


---
 epan/dissectors/packet-nfs.c |   27 ++++++++++++++++++++++-----
 epan/dissectors/packet-nfs.h |    6 ++++++
 2 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/epan/dissectors/packet-nfs.c b/epan/dissectors/packet-nfs.c
index 5f95826..0ed2ad8 100644
--- a/epan/dissectors/packet-nfs.c
+++ b/epan/dissectors/packet-nfs.c
@@ -347,6 +347,7 @@ static int hf_nfs_callback_ident = -1;
 static int hf_nfs_r_netid = -1;
 static int hf_nfs_gsshandle4 = -1;
 static int hf_nfs_r_addr = -1;
+static int hf_nfs_createmode4 = -1;
 
 /* NFSv4.1 */
 static int hf_nfs_length4_minlength = -1;
@@ -6964,26 +6965,38 @@ dissect_nfs_open_claim4(tvbuff_t *tvb, int offset,
 	return offset;
 }
 
+static const value_string names_createmode4[] = {
+	{	UNCHECKED4, "UNCHECKED4" },
+	{	GUARDED4,   "GUARDED4" },
+	{	EXCLUSIVE4, "EXCLUSIVE4" },
+	{	EXCLUSIVE4_1, "EXCLUSIVE4_1" },
+	{	0, NULL }
+};
+
 static int
 dissect_nfs_createhow4(tvbuff_t *tvb, int offset, packet_info *pinfo,
 	proto_tree *tree)
 {
 	guint mode;
 
-	/* This is intentional; we're using the same flags as NFSv3 */
 	mode = tvb_get_ntohl(tvb, offset);
-	proto_tree_add_uint(tree, hf_nfs_createmode3, tvb, offset, 4, mode);
+	proto_tree_add_uint(tree, hf_nfs_createmode4, tvb, offset, 4, mode);
 	offset += 4;
 
 	switch(mode)
 	{
-	case UNCHECKED:		/* UNCHECKED4 */
-	case GUARDED:		/* GUARDED4 */
+	case UNCHECKED4:
+	case GUARDED4:
 		offset = dissect_nfs_fattr4(tvb, offset, pinfo, tree);
 		break;
 
-	case EXCLUSIVE:		/* EXCLUSIVE4 */
+	case EXCLUSIVE4:
+		offset = dissect_rpc_uint64(tvb, tree, hf_nfs_verifier4, offset);
+		break;
+
+	case EXCLUSIVE4_1:
 		offset = dissect_rpc_uint64(tvb, tree, hf_nfs_verifier4, offset);
+		offset = dissect_nfs_fattr4(tvb, offset, pinfo, tree);
 		break;
 
 	default:
@@ -9894,6 +9907,10 @@ proto_register_nfs(void)
 			"owner", "nfs.lock_owner4", FT_BYTES, BASE_DEC,
 			NULL, 0, NULL, HFILL }},
 
+		{ &hf_nfs_createmode4, {
+			"Create Mode", "nfs.createmode4", FT_UINT32, BASE_DEC,
+			VALS(names_createmode4), 0, NULL, HFILL }},
+
 		{ &hf_nfs_secinfo_rpcsec_gss_info_service, {
 			"service", "nfs.secinfo.rpcsec_gss_info.service", FT_UINT32, BASE_DEC,
 			VALS(rpc_authgss_svc), 0, NULL, HFILL }},
diff --git a/epan/dissectors/packet-nfs.h b/epan/dissectors/packet-nfs.h
index f72ae57..8d2fb47 100644
--- a/epan/dissectors/packet-nfs.h
+++ b/epan/dissectors/packet-nfs.h
@@ -137,6 +137,12 @@
 #define GUARDED 1
 #define EXCLUSIVE 2
 
+/* for create4 */
+#define UNCHECKED4 0
+#define GUARDED4 1
+#define EXCLUSIVE4 2
+#define EXCLUSIVE4_1 3
+
 extern gboolean nfs_file_name_snooping;
 
 extern int dissect_fhandle(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree,
-- 
1.5.4.5


--------------090206040200030309000502
Content-Type: text/x-patch;
 name="0008-complete-list-of-nfsv4.1-ops.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="0008-complete-list-of-nfsv4.1-ops.patch"



More information about the pNFS mailing list