[pnfs] wireshark

J. Bruce Fields bfields at fieldses.org
Wed May 28 15:10:06 EDT 2008


On Mon, May 26, 2008 at 09:13:20AM +0200, Tigran Mkrtchyan wrote:
>
> Hi Bruce et al,
>
>
> finally I got all staff as you  want - one fix per commit.
> The patches itself mostly from Robert Gordon - I did code review and  
> make them 'Bruce complaint' :) .

Yipes, OK, thanks for the work!  On a quick glance they certainly seem
nice.  Could you bug me again if I haven't handled these by next week?

--b.


>
>
> Regards,
> 	Tigran.
>
>
>
> J. Bruce Fields wrote:
>> At Connectathon I think you had a few more patches for wireshark?
>>
>> No rush, I just want to make sure we don't forget forever....  Whenever
>> you've got something I'll take a look, bundle it up with the stuff you
>> and/or Benny sent before, and pass it along to the wireshark people.
>>
>> What I've currently got is in
>>
>> 	git://linux-nfs.org/~bfields/wireshark.git
>>
>> in the branch named "master".
>>
>> Hope all's well there.
>>
>> --b.
>
> -- 
> ________________________________________________________________________
> Tigran Mkrtchyan                               DESY, IT,
> tigran.mkrtchyan at desy.de                       Notkestrasse 85,
> Tel: + 49 40 89983946                          Hamburg 22607,
> Fax: + 49 40 89984429                          Germany.

> >From aa6ab2d4377c3e837eee53f7b2340762629c2792 Mon Sep 17 00:00:00 2001
> From: Tigran Mkrtchyan <tigran.mkrtchyan at desy.de>
> Date: Sat, 24 May 2008 22:47:39 +0200
> Subject: [PATCH 01/12] added definitions for: NFS4_OP_BACKCHANNEL_CTL NFS4_OP_BIND_CONN_TO_SESSION
> 
> ---
>  epan/dissectors/packet-nfs.h |   44 ++++++++++++++++++++++++++---------------
>  1 files changed, 28 insertions(+), 16 deletions(-)
> 
> diff --git a/epan/dissectors/packet-nfs.h b/epan/dissectors/packet-nfs.h
> index b569341..dd0fa71 100644
> --- a/epan/dissectors/packet-nfs.h
> +++ b/epan/dissectors/packet-nfs.h
> @@ -104,20 +104,33 @@
>  #define NFS4_OP_VERIFY						37
>  #define NFS4_OP_WRITE						38
>  #define NFS4_OP_RELEASE_LOCKOWNER		39
> +
>  /* Minor version 1 */
> -#define NFS4_OP_EXCHANGE_ID       42
> -#define NFS4_OP_CREATE_SESSION    43
> -#define NFS4_OP_DESTROY_SESSION   44
> -#define NFS4_OP_GETDEVINFO        47
> -#define NFS4_OP_GETDEVLIST		  48
> -#define NFS4_OP_LAYOUTCOMMIT         49
> -#define NFS4_OP_LAYOUTGET	    	 50
> -#define NFS4_OP_LAYOUTRETURN		 51
> -#define NFS4_OP_SEQUENCE             53
> -#define NFS4_OP_NOTIFYDS             60
> -#define NFS4_OP_PNFS_CREATE          61
> -#define NFS4_OP_PNFS_WRITE           62
> -#define NFS4_OP_PNFS_READ            63
> +#define NFS4_OP_BACKCHANNEL_CTL       40
> +#define NFS4_OP_BIND_CONN_TO_SESSION  41
> +#define NFS4_OP_EXCHANGE_ID           42
> +#define NFS4_OP_CREATE_SESSION        43
> +#define NFS4_OP_DESTROY_SESSION       44
> +#define NFS4_OP_FREE_STATEID          45
> +#define NFS4_OP_GET_DIR_DELEGATION    46
> +#define NFS4_OP_GETDEVINFO            47
> +#define NFS4_OP_GETDEVLIST            48
> +#define NFS4_OP_LAYOUTCOMMIT          49
> +#define NFS4_OP_LAYOUTGET             50
> +#define NFS4_OP_LAYOUTRETURN          51
> +#define NFS4_OP_SECINFO_NO_NAME       52
> +#define NFS4_OP_SEQUENCE              53
> +#define NFS4_OP_SET_SSV               54
> +#define NFS4_OP_TEST_STATEID          55
> +#define NFS4_OP_WANT_DELEGATION       56
> +#define NFS4_OP_DESTROY_CLIENTID      57
> +#define NFS4_OP_RECLAIM_COMPLETE      58
> +
> +/* Not part of the IEFT draft specification */
> +#define NFS4_OP_NOTIFYDS              60
> +#define NFS4_OP_PNFS_CREATE           61
> +#define NFS4_OP_PNFS_WRITE            62
> +#define NFS4_OP_PNFS_READ             63
>  
>  #define NFS4_OP_ILLEGAL						10044
>  
> @@ -138,7 +151,7 @@ extern int dissect_fhandle(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_
>  extern int dissect_nfs_fh3(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree,
>      const char *name, guint32 *hash);
>  
> -int dissect_nfs_post_op_attr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, 
> +int dissect_nfs_post_op_attr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree,
>  		const char* name);
>  
>  void nfs_name_snoop_add_name(int xid, tvbuff_t *tvb, int name_offset, int name_len, int parent_offset, int parent_len, unsigned char *name);
> @@ -155,7 +168,7 @@ void dissect_fhandle_hidden(packet_info *pinfo, proto_tree *tree, int frame);
>  typedef int (diss_p)(tvbuff_t *tvb, int offset, proto_tree *tree, int hf);
>  
>  /* Used in packet-nfsacl.c for NFS_ACL dissection */
> -extern int dissect_fattr(tvbuff_t *tvb, int offset, proto_tree *tree, 
> +extern int dissect_fattr(tvbuff_t *tvb, int offset, proto_tree *tree,
>  	const char* name);
>  
>  extern int dissect_access(tvbuff_t *tvb, int offset, proto_tree *tree,
> @@ -165,4 +178,3 @@ extern gint default_nfs_fhandle_type;
>  extern gint hf_nfs_nfsstat;
>  
>  #endif /* packet-nfs.h */
> -
> -- 
> 1.5.5.1.211.g65ea3
> 

> >From 26b732189a788b735730d8b95ad5eb26df91b1db Mon Sep 17 00:00:00 2001
> From: Tigran Mkrtchyan <tigran.mkrtchyan at desy.de>
> Date: Sat, 24 May 2008 22:51:44 +0200
> Subject: [PATCH 02/12] removed traing spaces
> 
> ---
>  epan/dissectors/packet-nfs.c |  212 +++++++++++++++++++++---------------------
>  1 files changed, 106 insertions(+), 106 deletions(-)
> 
> diff --git a/epan/dissectors/packet-nfs.c b/epan/dissectors/packet-nfs.c
> index ffaef77..a816f55 100644
> --- a/epan/dissectors/packet-nfs.c
> +++ b/epan/dissectors/packet-nfs.c
> @@ -1310,7 +1310,7 @@ dissect_fhandle_data_NETAPP(tvbuff_t* tvb, packet_info *pinfo _U_, proto_tree *t
>  		guint32 fsid = tvb_get_letohl(tvb, offset + 20);
>  		guint32 export = tvb_get_letohl(tvb, offset + 24);
>  		guint32 export_snapgen = tvb_get_letohl(tvb, offset + 28);
> -		
> +
>  		proto_item *item;
>  		proto_tree *subtree;
>  		char *flag_string;
> @@ -1381,7 +1381,7 @@ dissect_fhandle_data_NETAPP_V4(tvbuff_t* tvb, packet_info *pinfo _U_, proto_tree
>  	guint32 fileid, snapgen, generation, fsid;
>  	guint32 handle_type = tvb_get_ntohl(tvb, offset + 24);
>  	guint32 inum = tvb_get_ntohl(tvb, offset + 12);
> -		
> +
>  	const char *handle_string=NULL;
>  	const char *handle_type_strings [] = { "NORMAL",
>  					       "UNEXP",
> @@ -1392,11 +1392,11 @@ dissect_fhandle_data_NETAPP_V4(tvbuff_t* tvb, packet_info *pinfo _U_, proto_tree
>  					     };
>  
>  	char *flag_string;
> -	const char *strings[] = { " MNT_PNT", 
> -				  " SNAPDIR", 
> +	const char *strings[] = { " MNT_PNT",
> +				  " SNAPDIR",
>  				  " SNAPDIR_ENT",
> -				  " EMPTY", 
> -				  " VBN_ACCESS", 
> +				  " EMPTY",
> +				  " VBN_ACCESS",
>  				  " MULTIVOLUME",
>  				  " METADATA",
>  				  " ORPHAN",
> @@ -1449,7 +1449,7 @@ dissect_fhandle_data_NETAPP_V4(tvbuff_t* tvb, packet_info *pinfo _U_, proto_tree
>  		flag_string[512-1] = '\0';
>  		item = proto_tree_add_text(tree, tvb, offset + 0, 8, "export (inode %u)", fileid);
>  		subtree = proto_item_add_subtree(item, ett_nfsv4_fh_export);
> -		
> +
>  		item = proto_tree_add_uint(subtree, hf_nfs_fh_export_fileid,
>  					   tvb, offset + 0, 4, fileid);
>  		item = proto_tree_add_uint(subtree, hf_nfs_fh_export_generation,
> @@ -1523,7 +1523,7 @@ dissect_fhandle_data_NETAPP_GX_v3(tvbuff_t* tvb, packet_info *pinfo _U_, proto_t
>      guint8      utility;
>      guint8      volcnt;
>      guint32	offset = 0;
> -	 
> +
>      if (tree) {
>          /* = utility = */
>          utility = tvb_get_guint8(tvb, offset);
> @@ -1534,47 +1534,47 @@ dissect_fhandle_data_NETAPP_GX_v3(tvbuff_t* tvb, packet_info *pinfo _U_, proto_t
>  
>          field_tree = proto_item_add_subtree(tf, ett_nfs_gxfh3_utlfield);
>          if (utility & NFS3GX_FH_TREE_MASK) {
> -		proto_tree_add_uint(field_tree, hf_gxfh3_utlfield_tree_w, tvb, 
> +		proto_tree_add_uint(field_tree, hf_gxfh3_utlfield_tree_w, tvb,
>  	                            offset, 1, utility);
>  	}
>  	else {
> -		proto_tree_add_uint(field_tree, hf_gxfh3_utlfield_tree_r, tvb, 
> +		proto_tree_add_uint(field_tree, hf_gxfh3_utlfield_tree_r, tvb,
>  	                            offset, 1, utility);
>  	}
>          if (utility & NFS3GX_FH_JUN_MASK) {
> -		proto_tree_add_uint(field_tree, hf_gxfh3_utlfield_jun, tvb, 
> +		proto_tree_add_uint(field_tree, hf_gxfh3_utlfield_jun, tvb,
>  	                            offset, 1, utility);
>  	}
>  	else {
> -		proto_tree_add_uint(field_tree, hf_gxfh3_utlfield_jun_not, tvb, 
> +		proto_tree_add_uint(field_tree, hf_gxfh3_utlfield_jun_not, tvb,
>  	                            offset, 1, utility);
>  	}
> -	proto_tree_add_uint(field_tree, hf_gxfh3_utlfield_ver, tvb, 
> +	proto_tree_add_uint(field_tree, hf_gxfh3_utlfield_ver, tvb,
>  	                            offset, 1, utility);
>  
>          /* = volume count== */
> -        volcnt = tvb_get_guint8(tvb, offset+1);	
> +        volcnt = tvb_get_guint8(tvb, offset+1);
>  	proto_tree_add_uint_format(tree, hf_gxfh3_volcnt, tvb,
>                                     offset+1, 1, volcnt,
>  		                   "  volume count: 0x%02x (%d)", volcnt, volcnt);
>          /* = epoch = */
> -        epoch = tvb_get_letohs(tvb, offset+2);	
> +        epoch = tvb_get_letohs(tvb, offset+2);
>  	proto_tree_add_uint_format(tree, hf_gxfh3_epoch, tvb,
>                                     offset+2, 2, epoch,
>  		                   "  epoch: 0x%04x (%u)", epoch, epoch);
>          /* = spin file handle = */
> -        local_dsid   = tvb_get_letohl(tvb, offset+4); 
> -        cluster_id   = tvb_get_letohs(tvb, offset+8); 
> -        reserved     = tvb_get_guint8(tvb, offset+10);	
> -        flags        = tvb_get_guint8(tvb, offset+11);	
> -        spinfile_id  = tvb_get_letohl(tvb, offset+12); 
> -        spinfile_uid = tvb_get_letohl(tvb, offset+16); 
> -
> -	tf = proto_tree_add_text(tree, tvb, offset+4, 16, 
> +        local_dsid   = tvb_get_letohl(tvb, offset+4);
> +        cluster_id   = tvb_get_letohs(tvb, offset+8);
> +        reserved     = tvb_get_guint8(tvb, offset+10);
> +        flags        = tvb_get_guint8(tvb, offset+11);
> +        spinfile_id  = tvb_get_letohl(tvb, offset+12);
> +        spinfile_uid = tvb_get_letohl(tvb, offset+16);
> +
> +	tf = proto_tree_add_text(tree, tvb, offset+4, 16,
>  	                         "  spin file handle");
>          field_tree = proto_item_add_subtree(tf, ett_nfs_gxfh3_sfhfield);
>  
> -	proto_tree_add_uint_format(field_tree, hf_gxfh3_ldsid, tvb, 
> +	proto_tree_add_uint_format(field_tree, hf_gxfh3_ldsid, tvb,
>  	                           offset+4, 4, local_dsid,
>  	                           " local dsid: 0x%08x (%u)", local_dsid, local_dsid);
>  	proto_tree_add_uint_format(field_tree, hf_gxfh3_cid, tvb,
> @@ -1589,49 +1589,49 @@ dissect_fhandle_data_NETAPP_GX_v3(tvbuff_t* tvb, packet_info *pinfo _U_, proto_t
>                                          offset+11, 1, utility,
>  		                        " flags: 0x%02x", flags);
>          field_tree = proto_item_add_subtree(tf, ett_nfs_gxfh3_sfhflags);
> -	proto_tree_add_uint(field_tree, hf_gxfh3_sfhflags_resv1, tvb, 
> +	proto_tree_add_uint(field_tree, hf_gxfh3_sfhflags_resv1, tvb,
>  	                    offset+11, 1, flags);
> -	proto_tree_add_uint(field_tree, hf_gxfh3_sfhflags_resv2, tvb, 
> +	proto_tree_add_uint(field_tree, hf_gxfh3_sfhflags_resv2, tvb,
>  	                    offset+11, 1, flags);
>  
>          if (flags & SPINNP_FH_FLAG_ONTAP_MASK) {
> -		proto_tree_add_uint(field_tree, hf_gxfh3_sfhflags_ontap7G, tvb, 
> +		proto_tree_add_uint(field_tree, hf_gxfh3_sfhflags_ontap7G, tvb,
>  	                            offset+11, 1, flags);
>  	}
>  	else {
> -		proto_tree_add_uint(field_tree, hf_gxfh3_sfhflags_ontapGX, tvb, 
> +		proto_tree_add_uint(field_tree, hf_gxfh3_sfhflags_ontapGX, tvb,
>  	                            offset+11, 1, flags);
>  	}
> -	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_striped, tvb, 
> +	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_striped, tvb,
>  	                            offset+11, 1, flags);
> -	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_empty, tvb, 
> +	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_empty, tvb,
>  	                            offset+11, 1, flags);
> -	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_snapdirent, tvb, 
> +	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_snapdirent, tvb,
>  	                            offset+11, 1, flags);
> -	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_snapdir, tvb, 
> +	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_snapdir, tvb,
>  	                            offset+11, 1, flags);
> -	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_streamdir, tvb, 
> +	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_streamdir, tvb,
>  	                            offset+11, 1, flags);
> -	proto_tree_add_uint_format(field_tree, hf_gxfh3_spinfid, tvb, 
> +	proto_tree_add_uint_format(field_tree, hf_gxfh3_spinfid, tvb,
>  	                           offset+12, 4, spinfile_id,
>  	                           "spin file id: 0x%08x (%u)", spinfile_id, spinfile_id);
> -	proto_tree_add_uint_format(field_tree, hf_gxfh3_spinfuid, tvb, 
> +	proto_tree_add_uint_format(field_tree, hf_gxfh3_spinfuid, tvb,
>  	                           offset+16, 4, spinfile_id,
>  	                           "spin file unique id: 0x%08x (%u)", spinfile_uid, spinfile_uid);
>  
> -        /* = spin file handle (mount point) = */		 
> -        local_dsid   = tvb_get_letohl(tvb, offset+20); 
> -        cluster_id   = tvb_get_letohs(tvb, offset+24); 
> -        reserved     = tvb_get_guint8(tvb, offset+26);	
> -        flags        = tvb_get_guint8(tvb, offset+27);	
> -        spinfile_id  = tvb_get_letohl(tvb, offset+28); 
> -        spinfile_uid = tvb_get_letohl(tvb, offset+32); 
> +        /* = spin file handle (mount point) = */
> +        local_dsid   = tvb_get_letohl(tvb, offset+20);
> +        cluster_id   = tvb_get_letohs(tvb, offset+24);
> +        reserved     = tvb_get_guint8(tvb, offset+26);
> +        flags        = tvb_get_guint8(tvb, offset+27);
> +        spinfile_id  = tvb_get_letohl(tvb, offset+28);
> +        spinfile_uid = tvb_get_letohl(tvb, offset+32);
>  
> -	tf = proto_tree_add_text(tree, tvb, offset+20, 16, 
> +	tf = proto_tree_add_text(tree, tvb, offset+20, 16,
>  	                         "  spin (mount point) file handle");
>          field_tree = proto_item_add_subtree(tf, ett_nfs_gxfh3_sfhfield);
>  
> -	proto_tree_add_uint_format(field_tree, hf_gxfh3_ldsid, tvb, 
> +	proto_tree_add_uint_format(field_tree, hf_gxfh3_ldsid, tvb,
>  	                           offset+20, 4, local_dsid,
>  	                           " local dsid: 0x%08x (%u)", local_dsid, local_dsid);
>  	proto_tree_add_uint_format(field_tree, hf_gxfh3_cid, tvb,
> @@ -1646,44 +1646,44 @@ dissect_fhandle_data_NETAPP_GX_v3(tvbuff_t* tvb, packet_info *pinfo _U_, proto_t
>                                          offset+27, 1, utility,
>  		                        " flags: 0x%02x", flags);
>          field_tree = proto_item_add_subtree(tf, ett_nfs_gxfh3_sfhflags);
> -	proto_tree_add_uint(field_tree, hf_gxfh3_sfhflags_resv1, tvb, 
> +	proto_tree_add_uint(field_tree, hf_gxfh3_sfhflags_resv1, tvb,
>  	                    offset+27, 1, flags);
> -	proto_tree_add_uint(field_tree, hf_gxfh3_sfhflags_resv2, tvb, 
> +	proto_tree_add_uint(field_tree, hf_gxfh3_sfhflags_resv2, tvb,
>  	                    offset+27, 1, flags);
>  
>          if (flags & SPINNP_FH_FLAG_ONTAP_MASK) {
> -		proto_tree_add_uint(field_tree, hf_gxfh3_sfhflags_ontap7G, tvb, 
> +		proto_tree_add_uint(field_tree, hf_gxfh3_sfhflags_ontap7G, tvb,
>  	                            offset+27, 1, flags);
> -	} 
> +	}
>  	else {
> -		proto_tree_add_uint(field_tree, hf_gxfh3_sfhflags_ontapGX, tvb, 
> +		proto_tree_add_uint(field_tree, hf_gxfh3_sfhflags_ontapGX, tvb,
>  	                            offset+27, 1, flags);
>  	}
> -	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_striped, tvb, 
> +	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_striped, tvb,
>  	                            offset+27, 1, flags);
> -	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_empty, tvb, 
> +	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_empty, tvb,
>  	                            offset+27, 1, flags);
> -	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_snapdirent, tvb, 
> +	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_snapdirent, tvb,
>  	                            offset+27, 1, flags);
> -	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_snapdir, tvb, 
> +	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_snapdir, tvb,
>  	                            offset+27, 1, flags);
> -	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_streamdir, tvb, 
> +	proto_tree_add_boolean(field_tree, hf_gxfh3_sfhflags_streamdir, tvb,
>  	                            offset+27, 1, flags);
> -	proto_tree_add_uint_format(field_tree, hf_gxfh3_spinfid, tvb, 
> +	proto_tree_add_uint_format(field_tree, hf_gxfh3_spinfid, tvb,
>  	                           offset+28, 4, spinfile_id,
>  	                           "spin file id: 0x%08x (%u)", spinfile_id, spinfile_id);
> -	proto_tree_add_uint_format(field_tree, hf_gxfh3_spinfuid, tvb, 
> +	proto_tree_add_uint_format(field_tree, hf_gxfh3_spinfuid, tvb,
>  	                           offset+32, 4, spinfile_id,
> -	                           "spin file unique id: 0x%08x (%u)", spinfile_uid, spinfile_uid);    
> -        /* = export point id  = */		 
> -        export_id  = tvb_get_letohl(tvb, offset+36); 
> -        export_uid = tvb_get_letohl(tvb, offset+40); 
> -	proto_tree_add_uint_format(tree, hf_gxfh3_exportptid, tvb, 
> +	                           "spin file unique id: 0x%08x (%u)", spinfile_uid, spinfile_uid);
> +        /* = export point id  = */
> +        export_id  = tvb_get_letohl(tvb, offset+36);
> +        export_uid = tvb_get_letohl(tvb, offset+40);
> +	proto_tree_add_uint_format(tree, hf_gxfh3_exportptid, tvb,
>  	                           offset+36, 4, spinfile_id,
>  	                           "  export point id: 0x%08x (%u)", export_id, export_id);
> -        /* = export point unique id  = */		 
> -        export_uid = tvb_get_letohl(tvb, offset+40); 
> -	proto_tree_add_uint_format(tree, hf_gxfh3_exportptuid, tvb, 
> +        /* = export point unique id  = */
> +        export_uid = tvb_get_letohl(tvb, offset+40);
> +	proto_tree_add_uint_format(tree, hf_gxfh3_exportptuid, tvb,
>  	                           offset+40, 4, spinfile_id,
>  	                           "  export point unique id: 0x%08x (%u)", export_uid, export_uid);
>  
> @@ -1743,7 +1743,7 @@ dissect_fhandle_data_LINUX_KNFSD_NEW(tvbuff_t* tvb, packet_info *pinfo _U_, prot
>  				{
>  					proto_tree* encoding_tree = proto_item_add_subtree(encoding_item,
>  						ett_nfs_fh_encoding);
> -						
> +
>  					proto_tree_add_uint(encoding_tree, hf_nfs_fh_auth_type,
>  							tvb, offset+1, 1, auth_type);
>  					proto_tree_add_uint(encoding_tree, hf_nfs_fh_fsid_type,
> @@ -1832,7 +1832,7 @@ dissect_fhandle_data_LINUX_KNFSD_NEW(tvbuff_t* tvb, packet_info *pinfo _U_, prot
>  				{
>  					proto_tree* fileid_tree = proto_item_add_subtree(
>  						fileid_item, ett_nfs_fh_fn);
> -				
> +
>  					proto_tree_add_uint(fileid_tree, hf_nfs_fh_fn_inode,
>  						tvb, offset+0, 4, inode);
>  					proto_tree_add_uint(fileid_tree, hf_nfs_fh_fn_generation,
> @@ -3438,7 +3438,7 @@ dissect_specdata3(tvbuff_t *tvb, int offset, proto_tree *tree, const char* name)
>  	if (tree) {
>  		specdata3_item = proto_tree_add_text(tree, tvb, offset, 8,
>  			"%s: %u,%u", name, specdata1, specdata2);
> -		
> +
>  		specdata3_tree = proto_item_add_subtree(specdata3_item,
>  					ett_nfs_specdata3);
>  
> @@ -3472,7 +3472,7 @@ dissect_nfs_fh3(tvbuff_t *tvb, int offset, packet_info *pinfo,
>  	if (tree) {
>  		fitem = proto_tree_add_text(tree, tvb, offset, 4+fh3_len_full,
>  			"%s", name);
> -		
> +
>  		ftree = proto_item_add_subtree(fitem, ett_nfs_fh3);
>  	}
>  
> @@ -3857,7 +3857,7 @@ dissect_set_mode3(tvbuff_t *tvb, int offset, proto_tree *tree, const char* name)
>  
>  	if (tree) {
>  		set_it_name = val_to_str(set_it,value_follows,"Unknown");
> -		
> +
>  		set_mode3_item = proto_tree_add_text(tree, tvb, offset, -1,
>  			"%s: %s", name, set_it_name);
>  		set_mode3_tree = proto_item_add_subtree(set_mode3_item,
> @@ -3989,7 +3989,7 @@ dissect_set_size3(tvbuff_t *tvb, int offset, proto_tree *tree, const char* name)
>  
>  	if (tree) {
>  		set_it_name = val_to_str(set_it,value_follows,"Unknown");
> -		
> +
>  		set_size3_item = proto_tree_add_text(tree, tvb, offset, -1,
>  			"%s: %s", name, set_it_name);
>  		set_size3_tree = proto_item_add_subtree(set_size3_item,
> @@ -4047,7 +4047,7 @@ dissect_set_atime(tvbuff_t *tvb, int offset, proto_tree *tree, const char* name)
>  
>  	if (tree) {
>  		set_it_name = val_to_str(set_it,time_how,"Unknown");
> -		
> +
>  		set_atime_item = proto_tree_add_text(tree, tvb, offset, -1,
>  			"%s: %s", name, set_it_name);
>  		set_atime_tree = proto_item_add_subtree(set_atime_item,
> @@ -5567,7 +5567,7 @@ dissect_nfs3_fsinfo_reply(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
>  
>  				properties_tree = proto_item_add_subtree(properties_item,
>  						ett_nfs_fsinfo_properties);
> -				
> +
>  				proto_tree_add_text(properties_tree, tvb,
>  					offset, 4, "%s",
>  					decode_boolean_bitfield(properties,
> @@ -6210,7 +6210,7 @@ dissect_nfs_fh4(tvbuff_t *tvb, int offset, packet_info *pinfo,
>  }
>  
>  static int
> -dissect_nfs_server4(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree) 
> +dissect_nfs_server4(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
>  {
>  	return dissect_nfs_utf8string(tvb, offset, tree, hf_nfs_server, NULL);
>  }
> @@ -6290,7 +6290,7 @@ dissect_nfs_fattr4_fh_expire_type(tvbuff_t *tvb, int offset, proto_tree *tree)
>  	{
>  		expire_type_item = proto_tree_add_text(tree, tvb, offset, 4,
>  			"fattr4_fh_expire_type: 0x%08x", expire_type);
> -		
> +
>  		expire_type_tree = proto_item_add_subtree(expire_type_item,
>  				ett_nfs_fattr4_fh_expire_type);
>  	}
> @@ -6794,7 +6794,7 @@ dissect_nfs_attributes(tvbuff_t *tvb, int offset, packet_info *pinfo,
>  							attr_vals_offset, attr_newftree, "settime4");
>  						break;
>  					case FATTR4_MOUNTED_ON_FILEID:
> -						attr_vals_offset = dissect_rpc_uint64(tvb, attr_newftree, 
> +						attr_vals_offset = dissect_rpc_uint64(tvb, attr_newftree,
>  							hf_nfs_fattr4_mounted_on_fileid, attr_vals_offset);
>  						break;
>  
> @@ -8010,11 +8010,11 @@ dissect_nfs_argop4(tvbuff_t *tvb, int offset, packet_info *pinfo,
>  	{
>  		opcode = tvb_get_ntohl(tvb, offset);
>  		if (check_col(pinfo->cinfo, COL_INFO)) {
> -			col_append_fstr(pinfo->cinfo, COL_INFO, "%c%s", 
> +			col_append_fstr(pinfo->cinfo, COL_INFO, "%c%s",
>  				ops_counter==0?' ':';',
>  				val_to_str(opcode, names_nfsv4_operation, "Unknown"));
>  		}
> -		
> +
>  
>  		fitem = proto_tree_add_uint(ftree, hf_nfs_argop4, tvb, offset, 4,
>  			opcode);
> @@ -8242,7 +8242,7 @@ dissect_nfs_argop4(tvbuff_t *tvb, int offset, packet_info *pinfo,
>  				proto_tree *callback_tree = NULL;
>  
>  				fitem = proto_tree_add_text(newftree, tvb, offset, 0, "client");
> -				
> +
>  				client_tree = proto_item_add_subtree(fitem, ett_nfs_client_id4);
>  
>  				offset = dissect_nfs_client_id4(tvb, offset, client_tree);
> @@ -8478,7 +8478,7 @@ dissect_nfs_resop4(tvbuff_t *tvb, int offset, packet_info *pinfo,
>  			break;
>  
>  		if (check_col(pinfo->cinfo, COL_INFO)) {
> -			col_append_fstr(pinfo->cinfo, COL_INFO, "%c%s", 
> +			col_append_fstr(pinfo->cinfo, COL_INFO, "%c%s",
>  				ops_counter==0?' ':';',
>  				val_to_str(opcode, names_nfsv4_operation, "Unknown"));
>  		}
> @@ -9596,8 +9596,8 @@ proto_register_nfs(void)
>  			NULL, 0, NULL, HFILL }},
>  
>  		{ &hf_nfs_fslocation4, {
> -			"fs_location4", "nfs.fattr4.fs_location", FT_STRING, BASE_DEC, 
> -			NULL, 0, NULL, HFILL }}, 
> +			"fs_location4", "nfs.fattr4.fs_location", FT_STRING, BASE_DEC,
> +			NULL, 0, NULL, HFILL }},
>  
>  		{ &hf_nfs_fattr4_owner, {
>  			"fattr4_owner", "nfs.fattr4_owner", FT_STRING, BASE_DEC,
> @@ -9782,7 +9782,7 @@ proto_register_nfs(void)
>  		{ &hf_nfs_fattr4_space_used, {
>  			"space_used", "nfs.fattr4.space_used", FT_UINT64, BASE_DEC,
>  			NULL, 0, NULL, HFILL }},
> -			
> +
>  		{ &hf_nfs_fattr4_mounted_on_fileid, {
>  			"fileid", "nfs.fattr4.mounted_on_fileid", FT_UINT64, BASE_HEX,
>  			NULL, 0, NULL, HFILL }},
> @@ -9962,51 +9962,51 @@ proto_register_nfs(void)
>  		{ &hf_gxfh3_utlfield, {
>  			"utility", "nfs.gxfh3.utility", FT_UINT8, BASE_HEX,
>  			NULL, 0, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_utlfield_tree_r, {
>  			"tree R", "nfs.gxfh3.utlfield.treeR", FT_UINT8, BASE_HEX,
>  			NULL, NFS3GX_FH_TREE_MASK, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_utlfield_tree_w, {
>  			"tree W", "nfs.gxfh3.utlfield.treeW", FT_UINT8, BASE_HEX,
>  			NULL, NFS3GX_FH_TREE_MASK, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_utlfield_jun, {
>  			"broken junction", "nfs.gxfh3.utlfield.junction", FT_UINT8, BASE_HEX,
>  			NULL, NFS3GX_FH_JUN_MASK, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_utlfield_jun_not, {
>  			"not broken junction", "nfs.gxfh3.utlfield.notjunction", FT_UINT8, BASE_HEX,
>  			NULL, NFS3GX_FH_JUN_MASK, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_utlfield_ver, {
>  			"file handle version","nfs.gxfh3.utlfield.version", FT_UINT8, BASE_HEX,
>  			NULL, NFS3GX_FH_VER_MASK, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_volcnt, {
>  			"volume count", "nfs.gxfh3.volcnt", FT_UINT8, BASE_HEX,
>  			NULL, 0, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_epoch, {
>  			"epoch", "nfs.gxfh3.epoch", FT_UINT16, BASE_HEX,
>  			NULL, 0, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_ldsid, {
>  			"  local dsid", "nfs.gxfh3.ldsid", FT_UINT32, BASE_HEX,
>  			NULL, 0, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_cid, {
>  			"  cluster id", "nfs.gxfh3.cid", FT_UINT16, BASE_HEX,
>  			NULL, 0, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_resv, {
>  			"  reserved", "nfs.gxfh3.reserved", FT_UINT16, BASE_HEX,
>  			NULL, 0, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_sfhflags, {
>  			"  flags", "nfs.gxfh3.sfhflags", FT_UINT8, BASE_HEX,
>  			NULL, 0, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_sfhflags_resv1, {
>  			"reserved", "nfs.gxfh3.sfhflags.reserve1", FT_UINT8, BASE_HEX,
>  			NULL, SPINNP_FH_FLAG_RESV1, NULL, HFILL }},
> @@ -10018,31 +10018,31 @@ proto_register_nfs(void)
>  		{ &hf_gxfh3_sfhflags_ontap7G, {
>  			"ontap-7g", "nfs.gxfh3.sfhflags.ontap7g", FT_UINT8, BASE_HEX,
>  			NULL, SPINNP_FH_FLAG_ONTAP_MASK, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_sfhflags_ontapGX, {
>  			"ontap-gx", "nfs.gxfh3.sfhflags.ontapgx", FT_UINT8, BASE_HEX,
>  			NULL, SPINNP_FH_FLAG_ONTAP_MASK, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_sfhflags_striped, {
>  			"striped", "nfs.gxfh3.sfhflags.striped", FT_BOOLEAN, 8,
>  			TFS(&flags_set_truth), SPINNP_FH_FLAG_STRIPED_MASK, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_sfhflags_empty, {
> -			"empty", "nfs.gxfh3.sfhflags.empty", FT_BOOLEAN, 8, 
> +			"empty", "nfs.gxfh3.sfhflags.empty", FT_BOOLEAN, 8,
>  			TFS(&flags_set_truth), SPINNP_FH_FLAG_EMPTY_MASK, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_sfhflags_snapdirent, {
>  			"snap dir ent", "nfs.gxfh3.sfhflags.snapdirent", FT_BOOLEAN, 8,
>  			TFS(&flags_set_truth), SPINNP_FH_FLAG_SNAPDIR_ENT_MASK, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_sfhflags_snapdir, {
>  			"snap dir", "nfs.gxfh3.sfhflags.snapdir", FT_BOOLEAN, 8,
>  			TFS(&flags_set_truth), SPINNP_FH_FLAG_SNAPDIR_MASK, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_sfhflags_streamdir, {
>  			"stream dir", "nfs.gxfh3.sfhflags.streamdir", FT_BOOLEAN, 8,
>  			TFS(&flags_set_truth), SPINNP_FH_FLAG_STREAMDIR_MASK, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_spinfid, {
>  			"spin file id", "nfs.gxfh3.spinfid", FT_UINT32, BASE_HEX,
>  			NULL, 0, NULL, HFILL }},
> @@ -10050,7 +10050,7 @@ proto_register_nfs(void)
>  		{ &hf_gxfh3_spinfuid, {
>  			"spin file unique id", "nfs.gxfh3.spinfuid", FT_UINT32, BASE_HEX,
>  			NULL, 0, NULL, HFILL }},
> -			
> +
>  		{ &hf_gxfh3_exportptid, {
>  			"export point id", "nfs.gxfh3.exportptid", FT_UINT32, BASE_HEX,
>  			NULL, 0, NULL, HFILL }},
> @@ -10487,7 +10487,7 @@ proto_reg_handoff_nfs(void)
>  
>  	/* Register the protocol as RPC */
>  	rpc_init_prog(proto_nfs, NFS_PROGRAM, ett_nfs);
> -	
> +
>  	/* Register the procedure tables */
>  	rpc_init_proc_table(NFS_PROGRAM, 2, nfs2_proc, hf_nfs_procedure_v2);
>  	rpc_init_proc_table(NFS_PROGRAM, 3, nfs3_proc, hf_nfs_procedure_v3);
> @@ -10507,13 +10507,13 @@ proto_reg_handoff_nfs(void)
>  
>  	fhandle_handle=create_dissector_handle(dissect_fhandle_data_NETAPP, proto_nfs);
>  	dissector_add("nfs_fhandle.type", FHT_NETAPP, fhandle_handle);
> -	
> +
>  	fhandle_handle=create_dissector_handle(dissect_fhandle_data_NETAPP_V4, proto_nfs);
>  	dissector_add("nfs_fhandle.type", FHT_NETAPP_V4, fhandle_handle);
>  
>  	fhandle_handle=create_dissector_handle(dissect_fhandle_data_NETAPP_GX_v3, proto_nfs);
>  	dissector_add("nfs_fhandle.type", FHT_NETAPP_GX_V3, fhandle_handle);
> -	
> +
>  	fhandle_handle=create_dissector_handle(dissect_fhandle_data_unknown, proto_nfs);
>  	dissector_add("nfs_fhandle.type", FHT_UNKNOWN, fhandle_handle);
>  
> -- 
> 1.5.5.1.211.g65ea3
> 

> >From e2a7414de3c3e8c2a51fbde31bf8ea9751962284 Mon Sep 17 00:00:00 2001
> From: Tigran Mkrtchyan <tigran.mkrtchyan at desy.de>
> Date: Sat, 24 May 2008 22:54:01 +0200
> Subject: [PATCH 03/12] fixed get_device_list according draft >= 19
> 
> ---
>  epan/dissectors/packet-nfs.c |   11 -----------
>  1 files changed, 0 insertions(+), 11 deletions(-)
> 
> diff --git a/epan/dissectors/packet-nfs.c b/epan/dissectors/packet-nfs.c
> index a816f55..da7f994 100644
> --- a/epan/dissectors/packet-nfs.c
> +++ b/epan/dissectors/packet-nfs.c
> @@ -7812,20 +7812,9 @@ dissect_nfs_devicelist4(tvbuff_t *tvb, int offset, proto_tree *tree)
>  	count = tvb_get_ntohl(tvb, offset);
>  	offset = dissect_rpc_uint32(tvb, tree, hf_nfs_devicenum4, offset);
>  	for (i = 0; i < count; i++) {
> -		int opaque_devs, dev_limit;
>  		offset = dissect_rpc_opaque_data(tvb, offset, tree, NULL,
>  						hf_nfs_deviceid4, TRUE, 16,
>  						FALSE, NULL, NULL);
> -
> -
> -		offset = dissect_rpc_uint32(tvb, tree, hf_nfs_layouttype4, offset);
> -
> -		opaque_devs = tvb_get_ntohl(tvb, offset);
> -		offset += 4;
> -		dev_limit = opaque_devs + offset;
> -		while (offset < dev_limit) {
> -			offset = dissect_nfs_devices4(tvb, offset, tree);
> -		}
>  	}
>  	return offset;
>  }
> -- 
> 1.5.5.1.211.g65ea3
> 

> >From 1ee3544d7356fa4b5a72755533335a2cf9679aa9 Mon Sep 17 00:00:00 2001
> From: Tigran Mkrtchyan <tigran.mkrtchyan at desy.de>
> Date: Sat, 24 May 2008 22:57:20 +0200
> Subject: [PATCH 04/12] fixed device_addr4 decoding according draft >= 19
> 
> ---
>  epan/dissectors/packet-nfs.c |    3 +--
>  1 files changed, 1 insertions(+), 2 deletions(-)
> 
> diff --git a/epan/dissectors/packet-nfs.c b/epan/dissectors/packet-nfs.c
> index da7f994..79a94c3 100644
> --- a/epan/dissectors/packet-nfs.c
> +++ b/epan/dissectors/packet-nfs.c
> @@ -7790,9 +7790,8 @@ dissect_nfs_devices4(tvbuff_t *tvb, int offset, proto_tree *tree)
>  static int
>  dissect_nfs_deviceaddr4(tvbuff_t *tvb, int offset, proto_tree *tree)
>  {
> -	/* No layout type - argh */
>  
> -	/* Assume file layout for now */
> +	/* layout type */
>  	offset = dissect_rpc_uint32(tvb, tree, hf_nfs_layouttype4, offset);
>  
>  	/* skip da_addr_body size */
> -- 
> 1.5.5.1.211.g65ea3
> 

> >From 5946406235b4fa12305e4a967747edd83aa3ceb7 Mon Sep 17 00:00:00 2001
> From: Tigran Mkrtchyan <tigran.mkrtchyan at desy.de>
> Date: Sat, 24 May 2008 23:56:52 +0200
> Subject: [PATCH 05/12] fixed layoutget reply decode according to draft >= 19
> 
> ---
>  epan/dissectors/packet-nfs.c |   88 +++++++++++++++++++++++++++++-------------
>  1 files changed, 61 insertions(+), 27 deletions(-)
> 
> diff --git a/epan/dissectors/packet-nfs.c b/epan/dissectors/packet-nfs.c
> index 79a94c3..37f9512 100644
> --- a/epan/dissectors/packet-nfs.c
> +++ b/epan/dissectors/packet-nfs.c
> @@ -408,6 +408,8 @@ 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;
> +static int hf_nfs_nfl_util = -1;
> +static int hf_nfs_nfl_first_stripe_index = -1;
>  
>  /* Hidden field for v2, v3, and v4 status */
>  int hf_nfs_nfsstat = -1;
> @@ -565,6 +567,8 @@ static gint ett_nfs_uid4 = -1;
>  static gint ett_nfs_gid4 = -1;
>  static gint ett_nfs_service4 = -1;
>  static gint ett_nfs_sessionid4 = -1;
> +static gint ett_nfs_layoutseg = -1;
> +static gint ett_nfs_layoutseg_fh = -1;
>  
>  /* what type of fhandles shoudl we dissect as */
>  static dissector_table_t nfs_fhandle_table;
> @@ -7946,31 +7950,58 @@ static int
>  dissect_nfs_layout(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
>  {
>  	guint layout_type;
> +	guint fh_num;
> +	guint lo_seg_count;
> +	guint i, lo_seg;
> +	proto_item *fitem;
> +	proto_item *fh_fitem;
> +	proto_tree *newtree = NULL;
> +	proto_tree *fh_tree = NULL;
>  
> -	layout_type = tvb_get_ntohl(tvb, offset);
> -	offset = dissect_rpc_uint32(tvb, tree, hf_nfs_layouttype4, offset);
> +	lo_seg_count = tvb_get_ntohl(tvb, offset);
> +
> +	fitem = proto_tree_add_text(tree, tvb, offset, 4,
> +			"Layout Segment (count: %u)", lo_seg_count);
> +	offset += 4;
> +
> +	newtree = proto_item_add_subtree(fitem, ett_nfs_layoutseg);
> +
> +	for (lo_seg = 0; lo_seg < lo_seg_count; lo_seg++) {
> +		offset = dissect_rpc_uint64(tvb, newtree, hf_nfs_offset4, offset);
> +		offset = dissect_rpc_uint64(tvb, newtree, hf_nfs_length4, offset);
>  
> -	if (layout_type == 1) { /* NFS Files */
> -		guint num;
> -		guint i;
> +		offset = dissect_rpc_uint32(tvb, newtree, hf_nfs_iomode4, offset);
> +
> +		layout_type = tvb_get_ntohl(tvb, offset);
> +		offset = dissect_rpc_uint32(tvb, newtree, hf_nfs_layouttype4, offset);
> +
> +		/* If not files layout type eat the rest and move on.. */
> +		if (layout_type != 1) {
> +			offset = dissect_nfsdata(tvb, offset, newtree, hf_nfs_layout4);
> +			continue;
> +		}
> +
> +		/* NFS Files */
>  		offset += 4; /* Skip past opaque count */
> -		offset = dissect_rpc_opaque_data(tvb, offset, tree, NULL,
> -						hf_nfs_deviceid4, TRUE, 16,
> -						FALSE, NULL, NULL);
>  
> -		offset = dissect_rpc_uint32(tvb, tree, hf_nfs_util4, offset);
> -		offset = dissect_rpc_uint32(tvb, tree, hf_nfs_first_stripe_idx4, offset);
> -		offset = dissect_rpc_uint64(tvb, tree, hf_nfs_pattern_offset, offset);
> +		offset = dissect_rpc_opaque_data(tvb, offset, newtree, NULL,
> +				hf_nfs_deviceid4, TRUE, 16, FALSE, NULL, NULL);
> +
> +		offset = dissect_rpc_uint32(tvb, newtree, hf_nfs_nfl_util, offset);
> +		offset = dissect_rpc_uint32(tvb, newtree, hf_nfs_nfl_first_stripe_index, offset);
> +		offset = dissect_rpc_uint64(tvb, newtree, hf_nfs_offset4, offset);
> +
> +		fh_num = tvb_get_ntohl(tvb, offset); /* Len of FH list */
>  
> -		num = tvb_get_ntohl(tvb, offset); /* Len of dev list */
> +		fh_fitem = proto_tree_add_text(newtree, tvb, offset, 4,
> +				"File Handles (count: %u)", fh_num);
>  		offset += 4;
> -		for (i = 0; i < num; i++) {
> -			offset = dissect_nfs_fh4(tvb, offset, pinfo, tree, "filehandle");
> +
> +		fh_tree = proto_item_add_subtree(fh_fitem, ett_nfs_layoutseg_fh);
> +		for (i = 0; i < fh_num; i++) {
> +			offset = dissect_nfs_fh4(tvb, offset, pinfo, fh_tree, "lo_filehandle");
>  		}
> -	} else {
> -		offset = dissect_nfsdata(tvb, offset, tree, hf_nfs_layout4);
>  	}
> -
>  	return offset;
>  }
>  
> @@ -8439,7 +8470,7 @@ static int
>  dissect_nfs_resop4(tvbuff_t *tvb, int offset, packet_info *pinfo,
>  	proto_tree *tree)
>  {
> -	guint32 ops, ops_counter, count;
> +	guint32 ops, ops_counter;
>  	guint32 opcode;
>  	proto_item *fitem;
>  	proto_tree *ftree = NULL;
> @@ -8652,14 +8683,7 @@ 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);
> -			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);
> -			}
> +			offset = dissect_nfs_layout(tvb, offset, pinfo, newftree);
>  			break;
>  
>  		case NFS4_OP_LAYOUTCOMMIT:
> @@ -10148,6 +10172,14 @@ proto_register_nfs(void)
>  			"return on close?", "nfs.retclose4", FT_BOOLEAN, BASE_NONE,
>  			TFS(&tfs_yes_no), 0, NULL, HFILL }},
>  
> +		{ &hf_nfs_nfl_util, {
> +			"nfl_util", "nfs.nfl_util", FT_UINT32, BASE_HEX,
> +			NULL, 0, NULL, HFILL }},
> +
> +		{ &hf_nfs_nfl_first_stripe_index, {
> +			"first stripe to use index", "nfs.nfl_first_stripe_index", FT_UINT32, BASE_DEC,
> +			NULL, 0, NULL, HFILL }},
> +
>  		{ &hf_nfs_slotid4, {
>  			"slot ID", "nfs.slotid4", FT_UINT32, BASE_DEC,
>  			NULL, 0, NULL, HFILL }},
> @@ -10429,7 +10461,9 @@ proto_register_nfs(void)
>  		&ett_nfs_uid4,
>  		&ett_nfs_gid4,
>  		&ett_nfs_service4,
> -		&ett_nfs_sessionid4
> +		&ett_nfs_sessionid4,
> +		&ett_nfs_layoutseg,
> +		&ett_nfs_layoutseg_fh
>  	};
>  	module_t *nfs_module;
>  
> -- 
> 1.5.5.1.211.g65ea3
> 

> >From bfe801cb783b8a62788c08b15fbdae2ac2865ae2 Mon Sep 17 00:00:00 2001
> From: Tigran Mkrtchyan <tigran.mkrtchyan at desy.de>
> Date: Sun, 25 May 2008 00:26:36 +0200
> Subject: [PATCH 06/12] show nfs_lrf_body_content as an entity
> 
> ---
>  epan/dissectors/packet-nfs.c |    7 ++++++-
>  1 files changed, 6 insertions(+), 1 deletions(-)
> 
> diff --git a/epan/dissectors/packet-nfs.c b/epan/dissectors/packet-nfs.c
> index 37f9512..af4a9e3 100644
> --- a/epan/dissectors/packet-nfs.c
> +++ b/epan/dissectors/packet-nfs.c
> @@ -410,6 +410,7 @@ static int hf_nfs_notification_bitmap4 = -1;
>  static int hf_nfs_lrs_present = -1;
>  static int hf_nfs_nfl_util = -1;
>  static int hf_nfs_nfl_first_stripe_index = -1;
> +static int hf_nfs_lrf_body_content = -1;
>  
>  /* Hidden field for v2, v3, and v4 status */
>  int hf_nfs_nfsstat = -1;
> @@ -7723,7 +7724,7 @@ dissect_nfs_layoutreturn4(tvbuff_t *tvb, int offset, proto_tree *tree)
>  		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);
> +		offset = dissect_nfsdata(tvb, offset, tree, hf_nfs_lrf_body_content);
>  	}
>  
>  	return offset;
> @@ -10083,6 +10084,10 @@ proto_register_nfs(void)
>  			"return type", "nfs.returntype", FT_UINT32, BASE_DEC,
>  			VALS(layoutreturn_names), 0, NULL, HFILL }},
>  
> +		{ &hf_nfs_lrf_body_content, {
> +			"lrf_body_content", "nfs.lrf_body_content", FT_BYTES, BASE_HEX,
> +			NULL, 0, NULL, HFILL }},
> +
>  		{ &hf_nfs_iomode4, {
>  			"IO mode", "nfs.iomode", FT_UINT32, BASE_DEC,
>  			VALS(iomode_names), 0, NULL, HFILL }},
> -- 
> 1.5.5.1.211.g65ea3
> 

> >From e97937c17aef3541120abfb072fb010b4984b1b9 Mon Sep 17 00:00:00 2001
> From: Tigran Mkrtchyan <tigran.mkrtchyan at desy.de>
> Date: Sun, 25 May 2008 21:04:46 +0200
> Subject: [PATCH 07/12] do not re-use v4 createmode. define a v4.1 specific ones.
> 
> ---
>  epan/dissectors/packet-nfs.c |   27 ++++++++++++++++++++++-----
>  epan/dissectors/packet-nfs.h |   17 +++++++++++++++++
>  2 files changed, 39 insertions(+), 5 deletions(-)
> 
> diff --git a/epan/dissectors/packet-nfs.c b/epan/dissectors/packet-nfs.c
> index af4a9e3..ea4a446 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:
> @@ -9912,6 +9925,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 dd0fa71..ad56014 100644
> --- a/epan/dissectors/packet-nfs.h
> +++ b/epan/dissectors/packet-nfs.h
> @@ -144,6 +144,23 @@
>  #define GUARDED 1
>  #define EXCLUSIVE 2
>  
> +/* for create4 */
> +#define UNCHECKED4 0
> +#define GUARDED4 1
> +/* Deprecated in NFSv4.1. */
> +#define EXCLUSIVE4 2
> +/*
> +* New to NFSv4.1. If session is persistent,
> +* GUARDED4 MUST be used. Otherwise, use
> +* EXCLUSIVE4_1 instead of EXCLUSIVE4.
> +*/
> +#define EXCLUSIVE4_1 3
> +/*
> +* New to NFSv4.1. If session is persistent,
> +* GUARDED4 MUST be used. Otherwise, use
> +* EXCLUSIVE4_1 instead of EXCLUSIVE4.
> +*/
> +
>  extern gboolean nfs_file_name_snooping;
>  
>  extern int dissect_fhandle(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree,
> -- 
> 1.5.5.1.211.g65ea3
> 

> >From 4b289b8b87ce45780c234699097208a87fb048c5 Mon Sep 17 00:00:00 2001
> From: Tigran Mkrtchyan <tigran.mkrtchyan at desy.de>
> Date: Sun, 25 May 2008 21:31:38 +0200
> Subject: [PATCH 08/12] complete list of nfsv4.1 ops
> 
> ---
>  epan/dissectors/packet-nfs.c |   83 ++++++++++++++++++++++++------------------
>  1 files changed, 47 insertions(+), 36 deletions(-)
> 
> diff --git a/epan/dissectors/packet-nfs.c b/epan/dissectors/packet-nfs.c
> index ea4a446..80657fe 100644
> --- a/epan/dissectors/packet-nfs.c
> +++ b/epan/dissectors/packet-nfs.c
> @@ -7101,56 +7101,67 @@ dissect_nfs_stable_how4(tvbuff_t *tvb, int offset,
>  
>  static const value_string names_nfsv4_operation[] = {
>  	{	NFS4_OP_ACCESS,					"ACCESS"	},
> -	{	NFS4_OP_CLOSE,						"CLOSE"	},
> +	{	NFS4_OP_CLOSE,					"CLOSE"	},
>  	{	NFS4_OP_COMMIT,					"COMMIT"	},
>  	{	NFS4_OP_CREATE,					"CREATE"	},
>  	{	NFS4_OP_DELEGPURGE,				"DELEGPURGE"	},
> -	{	NFS4_OP_DELEGRETURN,				"DELEGRETURN"	},
> -	{	NFS4_OP_GETATTR,					"GETATTR"	},
> -	{	NFS4_OP_GETFH,						"GETFH"	},
> -	{	NFS4_OP_LINK,						"LINK"	},
> -	{	NFS4_OP_LOCK,						"LOCK"	},
> -	{	NFS4_OP_LOCKT,						"LOCKT"	},
> -	{	NFS4_OP_LOCKU,						"LOCKU"	},
> +	{	NFS4_OP_DELEGRETURN,			"DELEGRETURN"	},
> +	{	NFS4_OP_GETATTR,				"GETATTR"	},
> +	{	NFS4_OP_GETFH,					"GETFH"	},
> +	{	NFS4_OP_LINK,					"LINK"	},
> +	{	NFS4_OP_LOCK,					"LOCK"	},
> +	{	NFS4_OP_LOCKT,					"LOCKT"	},
> +	{	NFS4_OP_LOCKU,					"LOCKU"	},
>  	{	NFS4_OP_LOOKUP,					"LOOKUP"	},
> -	{	NFS4_OP_LOOKUPP,					"LOOKUPP" },
> -	{	NFS4_OP_NVERIFY,					"NVERIFY"	},
> -	{	NFS4_OP_OPEN,						"OPEN"	},
> -	{	NFS4_OP_OPENATTR,					"OPENATTR"	},
> +	{	NFS4_OP_LOOKUPP,				"LOOKUPP" },
> +	{	NFS4_OP_NVERIFY,				"NVERIFY"	},
> +	{	NFS4_OP_OPEN,					"OPEN"	},
> +	{	NFS4_OP_OPENATTR,				"OPENATTR"	},
>  	{	NFS4_OP_OPEN_CONFIRM,			"OPEN_CONFIRM"	},
>  	{	NFS4_OP_OPEN_DOWNGRADE,			"OPEN_DOWNGRADE"	},
> -	{	NFS4_OP_PUTFH,						"PUTFH"	},
> -	{	NFS4_OP_PUTPUBFH,					"PUTPUBFH"	},
> +	{	NFS4_OP_PUTFH,					"PUTFH"	},
> +	{	NFS4_OP_PUTPUBFH,				"PUTPUBFH"	},
>  	{	NFS4_OP_PUTROOTFH,				"PUTROOTFH"	},
> -	{	NFS4_OP_READ,						"READ"	},
> -	{	NFS4_OP_READDIR,					"READDIR"	},
> -	{	NFS4_OP_READLINK,					"READLINK"	},
> +	{	NFS4_OP_READ,					"READ"	},
> +	{	NFS4_OP_READDIR,				"READDIR"	},
> +	{	NFS4_OP_READLINK,				"READLINK"	},
>  	{	NFS4_OP_REMOVE,					"REMOVE"	},
>  	{	NFS4_OP_RENAME,					"RENAME"	},
> -	{	NFS4_OP_RENEW,						"RENEW"	},
> +	{	NFS4_OP_RENEW,					"RENEW"	},
>  	{	NFS4_OP_RESTOREFH,				"RESTOREFH"	},
>  	{	NFS4_OP_SAVEFH,					"SAVEFH"	},
> -	{	NFS4_OP_SECINFO,					"SECINFO"	},
> -	{	NFS4_OP_SETATTR,					"SETATTR"	},
> -	{	NFS4_OP_SETCLIENTID,				"SETCLIENTID"	},
> +	{	NFS4_OP_SECINFO,				"SECINFO"	},
> +	{	NFS4_OP_SETATTR,				"SETATTR"	},
> +	{	NFS4_OP_SETCLIENTID,			"SETCLIENTID"	},
>  	{	NFS4_OP_SETCLIENTID_CONFIRM,	"SETCLIENTID_CONFIRM"	},
>  	{	NFS4_OP_VERIFY,					"VERIFY"	},
> -	{	NFS4_OP_WRITE,						"WRITE"	},
> +	{	NFS4_OP_WRITE,					"WRITE"	},
>  	{	NFS4_OP_RELEASE_LOCKOWNER,		"RELEASE_LOCKOWNER"	},
> -	{	NFS4_OP_EXCHANGE_ID,		"EXCHANGE_ID" },
> -	{	NFS4_OP_CREATE_SESSION,		"CREATE_SESSION" },
> -	{	NFS4_OP_DESTROY_SESSION,	"DESTROY_SESSION" },
> -	{	NFS4_OP_SEQUENCE,		"SEQUENCE" },
> -	{	NFS4_OP_GETDEVINFO,		"GETDEVINFO"},
> -	{	NFS4_OP_GETDEVLIST,		"GETDEVLIST"},
> -	{	NFS4_OP_LAYOUTCOMMIT,		"LAYOUTCOMMIT" },
> -	{	NFS4_OP_LAYOUTGET,		"LAYOUTGET" },
> -	{	NFS4_OP_LAYOUTRETURN,		"LAYOUTRETURN" },
> -	{	NFS4_OP_NOTIFYDS,		"PNFS_NOTIFYDS"},
> -	{	NFS4_OP_PNFS_CREATE,		"PNFS_CREATE"},
> -	{	NFS4_OP_PNFS_WRITE,		"PNFS_WRITE"},
> -	{	NFS4_OP_PNFS_READ,		"PNFS_READ"},
> -	{	NFS4_OP_ILLEGAL,		"ILLEGAL"},
> +	{	NFS4_OP_BACKCHANNEL_CTL,		"BACKCHANNEL_CTL" },
> +	{	NFS4_OP_BIND_CONN_TO_SESSION,	"BIND_CONN_TO_SESSION" },
> +	{	NFS4_OP_EXCHANGE_ID,			"EXCHANGE_ID" },
> +	{	NFS4_OP_CREATE_SESSION,			"CREATE_SESSION" },
> +	{	NFS4_OP_DESTROY_SESSION,		"DESTROY_SESSION" },
> +	{	NFS4_OP_FREE_STATEID,			"FREE_STATEID"},
> +	{	NFS4_OP_GET_DIR_DELEGATION,		"GET_DIR_DELEGATION"},
> +	{	NFS4_OP_GETDEVINFO,				"GETDEVINFO"},
> +	{	NFS4_OP_GETDEVLIST,				"GETDEVLIST"},
> +	{	NFS4_OP_LAYOUTCOMMIT,			"LAYOUTCOMMIT" },
> +	{	NFS4_OP_LAYOUTGET,				"LAYOUTGET" },
> +	{	NFS4_OP_LAYOUTRETURN,			"LAYOUTRETURN" },
> +	{	NFS4_OP_SECINFO_NO_NAME,		"SECINFO_NO_NAME" },
> +	{	NFS4_OP_SEQUENCE,				"SEQUENCE" },
> +	{	NFS4_OP_SET_SSV,				"SET-SSV"},
> +	{	NFS4_OP_TEST_STATEID,			"TEST-STATEID"},
> +	{	NFS4_OP_WANT_DELEGATION,		"WANT-DELEG" },
> +	{	NFS4_OP_DESTROY_CLIENTID,		"DESTROY-CLIENTID" },
> +	{	NFS4_OP_RECLAIM_COMPLETE,		"RECLAIM-COMPLETE" },
> +	/* Linux NFS 4.1 protocol hackery */
> +	{	NFS4_OP_NOTIFYDS,				"PNFS_NOTIFYDS"},
> +	{	NFS4_OP_PNFS_CREATE,			"PNFS_CREATE"},
> +	{	NFS4_OP_PNFS_WRITE,				"PNFS_WRITE"},
> +	{	NFS4_OP_PNFS_READ,				"PNFS_READ"},
> +	{	NFS4_OP_ILLEGAL,				"ILLEGAL"},
>  	{	0,	NULL }
>  };
>  
> -- 
> 1.5.5.1.211.g65ea3
> 

> >From 2eadd1f029aca03d17ae97ab7c69a358bc1d24f2 Mon Sep 17 00:00:00 2001
> From: Tigran Mkrtchyan <tigran.mkrtchyan at desy.de>
> Date: Sun, 25 May 2008 21:37:24 +0200
> Subject: [PATCH 09/12] added nfsv4 specific etts
> 
> ---
>  epan/dissectors/packet-nfs.c |   26 ++++++++++++++------------
>  1 files changed, 14 insertions(+), 12 deletions(-)
> 
> diff --git a/epan/dissectors/packet-nfs.c b/epan/dissectors/packet-nfs.c
> index 80657fe..0d1d1e9 100644
> --- a/epan/dissectors/packet-nfs.c
> +++ b/epan/dissectors/packet-nfs.c
> @@ -7204,28 +7204,30 @@ gint *nfsv4_operation_ett[] =
>  	 &ett_nfs_verify4 ,
>  	 &ett_nfs_write4,
>  	 &ett_nfs_release_lockowner4,
> -	 NULL,
> -	 NULL,
> +	 NULL, /* backchannel_ctl */
> +	 NULL, /* bind connection to session */
>  	 &ett_nfs_exchange_id4,
>  	 &ett_nfs_create_session4,
>  	 &ett_nfs_destroy_session4,
> -	 NULL,
> -	 NULL,
> +	 NULL, /* free stateid */
> +	 NULL, /* get dir delegation */
>  	 &ett_nfs_getdevinfo4,
>  	 &ett_nfs_getdevlist4,
>  	 &ett_nfs_layoutcommit4,
>  	 &ett_nfs_layoutget4,
>  	 &ett_nfs_layoutreturn4,
> -	 NULL,
> +	 NULL, /* secinfo no name */
>  	 &ett_nfs_sequence4,
> -	 NULL,
> -	 NULL,
> -	 NULL,
> -	 NULL,
> -	 NULL,
> -	 NULL,
> +	 NULL, /* set ssv */
> +	 NULL, /* test stateid */
> +	 NULL, /* want delegation */
> +	 NULL, /* destroy clientid */
> +	 NULL, /* reclaim complete*/
> +	 NULL, /* bogus pad to get to 60*/
>  	 &ett_nfs_notifyds4,
> -	 &ett_nfs_pnfs_create4
> +	 &ett_nfs_pnfs_create4,
> +	 NULL, /* pnfs_write */
> +	 NULL  /* pnfs_read */
>  };
>  
>  static int
> -- 
> 1.5.5.1.211.g65ea3
> 

> >From f0de753af163965fe1b9c92053425439422dfc95 Mon Sep 17 00:00:00 2001
> From: Tigran Mkrtchyan <tigran.mkrtchyan at desy.de>
> Date: Sun, 25 May 2008 22:01:32 +0200
> Subject: [PATCH 10/12] decode/display all  delication flags
> 
> ---
>  epan/dissectors/packet-nfs.c |   33 +++++++++++++++++++++++++++++----
>  1 files changed, 29 insertions(+), 4 deletions(-)
> 
> diff --git a/epan/dissectors/packet-nfs.c b/epan/dissectors/packet-nfs.c
> index 0d1d1e9..fc2b296 100644
> --- a/epan/dissectors/packet-nfs.c
> +++ b/epan/dissectors/packet-nfs.c
> @@ -6845,6 +6845,22 @@ static const value_string names_open4_share_access[] = {
>  	{ OPEN4_SHARE_ACCESS_WRITE, "OPEN4_SHARE_ACCESS_WRITE" },
>  #define OPEN4_SHARE_ACCESS_BOTH 0x00000003
>  	{ OPEN4_SHARE_ACCESS_BOTH, "OPEN4_SHARE_ACCESS_BOTH" },
> +#define  OPEN4_SHARE_ACCESS_WANT_NO_PREFERENCE     0x0000
> +	{ OPEN4_SHARE_ACCESS_WANT_NO_PREFERENCE, "OPEN4_SHARE_ACCESS_WANT_NO_PREFERENCE" },
> +#define  OPEN4_SHARE_ACCESS_WANT_READ_DELEG        0x0100
> +	{ OPEN4_SHARE_ACCESS_WANT_READ_DELEG, "OPEN4_SHARE_ACCESS_WANT_READ_DELEG" },
> +#define  OPEN4_SHARE_ACCESS_WANT_WRITE_DELEG       0x0200
> +	{ OPEN4_SHARE_ACCESS_WANT_WRITE_DELEG, "OPEN4_SHARE_ACCESS_WANT_WRITE_DELEG" },
> +#define  OPEN4_SHARE_ACCESS_WANT_ANY_DELEG         0x0300
> +	{ OPEN4_SHARE_ACCESS_WANT_ANY_DELEG, "OPEN4_SHARE_ACCESS_WANT_ANY_DELEG" },
> +#define  OPEN4_SHARE_ACCESS_WANT_NO_DELEG          0x0400
> +	{ OPEN4_SHARE_ACCESS_WANT_NO_DELEG, "OPEN4_SHARE_ACCESS_WANT_NO_DELEG" },
> +#define  OPEN4_SHARE_ACCESS_WANT_CANCEL            0x0500
> +	{ OPEN4_SHARE_ACCESS_WANT_CANCEL, "OPEN4_SHARE_ACCESS_WANT_CANCEL" },
> +#define OPEN4_SHARE_ACCESS_WANT_SIGNAL_DELEG_WHEN_RESRC_AVAIL 0x10000
> +	{ OPEN4_SHARE_ACCESS_WANT_SIGNAL_DELEG_WHEN_RESRC_AVAIL, "OPEN4_SHARE_ACCESS_WANT_SIGNAL_DELEG_WHEN_RESRC_AVAIL"},
> +#define OPEN4_SHARE_ACCESS_WANT_PUSH_DELEG_WHEN_UNCONTENDED  0x20000
> +	{ OPEN4_SHARE_ACCESS_WANT_PUSH_DELEG_WHEN_UNCONTENDED, "OPEN4_SHARE_ACCESS_WANT_PUSH_DELEG_WHEN_UNCONTENDED"},
>  	{ 0, NULL }
>  };
>  
> @@ -6910,16 +6926,23 @@ dissect_nfs_open_claim_delegate_cur4(tvbuff_t *tvb, int offset,
>  #define CLAIM_NULL				0
>  #define CLAIM_PREVIOUS			1
>  #define CLAIM_DELEGATE_CUR		2
> -#define CLAIM_DELEGATE_PREV	3
> +#define CLAIM_DELEGATE_PREV		3
> +#define CLAIM_FH				4
> +#define CLAIM_DELEG_CUR_FH		5
> +#define CLAIM_DELEG_CUR_PREV_FH	6
>  
>  static const value_string names_claim_type4[] = {
>  	{	CLAIM_NULL,  		"CLAIM_NULL"  },
>  	{	CLAIM_PREVIOUS, 	"CLAIM_PREVIOUS" },
> -	{	CLAIM_DELEGATE_CUR, 	"CLAIM_DELEGATE_CUR" },
> -	{	CLAIM_DELEGATE_PREV,	"CLAIM_DELEGATE_PREV" },
> +	{	CLAIM_DELEGATE_CUR,	"CLAIM_DELEGATE_CUR" },
> +	{	CLAIM_DELEGATE_PREV,"CLAIM_DELEGATE_PREV" },
> +	{	CLAIM_FH,			"CLAIM_FH" },
> +	{	CLAIM_DELEG_CUR_FH,	"CLAIM_DELEG_CUR_FH"},
> +	{	CLAIM_DELEG_CUR_PREV_FH, "CLAIN_DELEG_CUR_PREV_FH"},
>  	{	0, NULL }
>  };
>  
> +
>  static int
>  dissect_nfs_open_claim4(tvbuff_t *tvb, int offset,
>  	proto_tree *tree)
> @@ -7590,10 +7613,12 @@ dissect_nfs_open_write_delegation4(tvbuff_t *tvb, int offset,
>  #define OPEN_DELEGATE_NONE 0
>  #define OPEN_DELEGATE_READ 1
>  #define OPEN_DELEGATE_WRITE 2
> +#define OPEN_DELEGATE_NONE_EXT 3 /* new to v4.1 */
>  static const value_string names_open_delegation_type4[] = {
> -	{	OPEN_DELEGATE_NONE,	"OPEN_DELEGATE_NONE" },
> +	{	OPEN_DELEGATE_NONE,		"OPEN_DELEGATE_NONE" },
>  	{	OPEN_DELEGATE_READ, 	"OPEN_DELEGATE_READ" },
>  	{	OPEN_DELEGATE_WRITE,	"OPEN_DELEGATE_WRITE" },
> +	{	OPEN_DELEGATE_NONE_EXT, "OPEN_DELEGATE_NONE_EXT"},
>  	{	0,	NULL }
>  };
>  
> -- 
> 1.5.5.1.211.g65ea3
> 

> >From 2bf22455c11532a60718d4d623dbdcdb3ed367b1 Mon Sep 17 00:00:00 2001
> From: Tigran Mkrtchyan <tigran.mkrtchyan at desy.de>
> Date: Sun, 25 May 2008 22:44:03 +0200
> Subject: [PATCH 11/12] display all file attribytes defined by v41
>  decode fattr4_layout_blksize
> 
> ---
>  epan/dissectors/packet-nfs.c |   54 +++++++++++++++++++++++++++++++++++-------
>  1 files changed, 45 insertions(+), 9 deletions(-)
> 
> diff --git a/epan/dissectors/packet-nfs.c b/epan/dissectors/packet-nfs.c
> index fc2b296..291da56 100644
> --- a/epan/dissectors/packet-nfs.c
> +++ b/epan/dissectors/packet-nfs.c
> @@ -293,6 +293,7 @@ static int hf_nfs_fattr4_space_free = -1;
>  static int hf_nfs_fattr4_space_total = -1;
>  static int hf_nfs_fattr4_space_used = -1;
>  static int hf_nfs_fattr4_mounted_on_fileid = -1;
> +static int hf_nfs_fattr4_layout_blksize = -1;
>  static int hf_nfs_who = -1;
>  static int hf_nfs_server = -1;
>  static int hf_nfs_fslocation4 = -1;
> @@ -6451,16 +6452,44 @@ static const value_string names_fattr4[] = {
>  	{	FATTR4_DIR_NOTIF_DELAY, "FATTR4_DIR_NOTIF_DELAY"	},
>  #define FATTR4_DIRENT_NOTIF_DELAY   57
>  	{	FATTR4_DIRENT_NOTIF_DELAY, "FATTR4_DIRENT_NOTIF_DELAY"	},
> -#define FATTR4_SEND_IMPL_ID   58
> -	{	FATTR4_SEND_IMPL_ID, "FATTR4_SEND_IMPL_ID"	},
> -#define FATTR4_RECV_IMPL_ID  59
> -	{	FATTR4_RECV_IMPL_ID, "FATTR4_RECV_IMPL_ID"	},
> -#define FATTR4_ABSENT  60
> -	{	FATTR4_ABSENT, "FATTR4_ABSENT"	},
> +#define FATTR4_DACL   58
> +	{	FATTR4_DACL, "FATTR4_DACL"	},
> +#define FATTR4_SACL  59
> +	{	FATTR4_SACL, "FATTR4_SACL"	},
> +#define FATTR4_CHANGE_POLICY  60
> +	{	FATTR4_CHANGE_POLICY, "FATTR4_CHANGE_POLICY"	},
>  #define FATTR4_FS_STATUS  61
>  	{	FATTR4_FS_STATUS, "FATTR4_FS_STATUS"	},
> -#define FATTR4_FS_LAYOUT_TYPES   62
> -	{	FATTR4_MOUNTED_ON_FILEID, "FATTR4_FS_LAYOUT_TYPES"	},
> +#define FATTR4_FS_LAYOUT_TYPE   62
> +	{	FATTR4_FS_LAYOUT_TYPE, "FATTR4_FS_LAYOUT_TYPE"	},
> +#define FATTR4_LAYOUT_HINT		63
> +	{	FATTR4_LAYOUT_HINT, "FATTR4_LAYOUT_HINT" },
> +#define FATTR4_LAYOUT_TYPE		64
> +	{	FATTR4_LAYOUT_TYPE, "FATTR4_LAYOUT_TYPE" },
> +#define FATTR4_LAYOUT_BLKSIZE		65
> +	{	FATTR4_LAYOUT_BLKSIZE, "FATTR4_LAYOUT_BLKSIZE" },
> +#define FATTR4_LAYOUT_ALIGNMENT		66
> +	{	FATTR4_LAYOUT_ALIGNMENT, "FATTR4_LAYOUT_ALIGNMENT" },
> +#define FATTR4_FS_LOCATIONS_INFO	67
> +	{	FATTR4_FS_LOCATIONS_INFO, "FATTR4_FS_LOCATIONS_INFO" },
> +#define FATTR4_MDSTHRESHOLD		68
> +	{	FATTR4_MDSTHRESHOLD, "FATTR4_MDSTHRESHOLD" },
> +#define FATTR4_RETENTION_GET		69
> +	{	FATTR4_RETENTION_GET, "FATTR4_RETENTION_GET" },
> +#define FATTR4_RETENTION_SET		70
> +	{	FATTR4_RETENTION_SET, "FATTR4_RETENTION_SET" },
> +#define FATTR4_RETENTEVT_GET		71
> +	{	FATTR4_RETENTEVT_GET, "FATTR4_RETENTEVT_GET" },
> +#define FATTR4_RETENTEVT_SET		72
> +	{	FATTR4_RETENTEVT_SET, "FATTR4_RETENTEVT_SET" },
> +#define FATTR4_RETENTION_HOLD		73
> +	{	FATTR4_RETENTION_HOLD, "FATTR4_RETENTION_HOLD" },
> +#define FATTR4_MODE_SET_MASKED		74
> +	{	FATTR4_MODE_SET_MASKED, "FATTR4_MODE_SET_MASKED" },
> +#define FATTR4_SUPPATTR_EXCLCREAT	75
> +	{	FATTR4_SUPPATTR_EXCLCREAT, "FATTR4_SUPPATTR_EXCLCREAT" },
> +#define FATTR4_FS_CHARSET_CAP		76
> +	{	FATTR4_FS_CHARSET_CAP, "FATTR4_FS_CHARSET_CAP" },
>  	{	0,	NULL	}
>  };
>  
> @@ -6803,7 +6832,10 @@ dissect_nfs_attributes(tvbuff_t *tvb, int offset, packet_info *pinfo,
>  						attr_vals_offset = dissect_rpc_uint64(tvb, attr_newftree,
>  							hf_nfs_fattr4_mounted_on_fileid, attr_vals_offset);
>  						break;
> -
> +					case FATTR4_LAYOUT_BLKSIZE:
> +						attr_vals_offset = dissect_rpc_uint32(tvb, attr_newftree,
> +								hf_nfs_fattr4_layout_blksize, attr_vals_offset);
> +						break;
>  					default:
>  						break;
>  					}
> @@ -9851,6 +9883,10 @@ proto_register_nfs(void)
>  			"fileid", "nfs.fattr4.mounted_on_fileid", FT_UINT64, BASE_HEX,
>  			NULL, 0, NULL, HFILL }},
>  
> +		{ &hf_nfs_fattr4_layout_blksize, {
> +				"fileid", "nfs.fattr4.layout_blksize", FT_UINT32, BASE_DEC,
> +				NULL, 0, NULL, HFILL }},
> +
>  		{ &hf_nfs_verifier4, {
>  			"verifier", "nfs.verifier4", FT_UINT64, BASE_HEX,
>  			NULL, 0, NULL, HFILL }},
> -- 
> 1.5.5.1.211.g65ea3
> 

> >From a27a1457cf66a85725b6a4ea7adbbb0b7ca52b48 Mon Sep 17 00:00:00 2001
> From: Tigran Mkrtchyan <tigran.mkrtchyan at desy.de>
> Date: Mon, 26 May 2008 08:55:01 +0200
> Subject: [PATCH 12/12] complete list of error codes
> 
> ---
>  epan/dissectors/packet-nfs.c |   13 +++++++++++++
>  1 files changed, 13 insertions(+), 0 deletions(-)
> 
> diff --git a/epan/dissectors/packet-nfs.c b/epan/dissectors/packet-nfs.c
> index 291da56..479e7ff 100644
> --- a/epan/dissectors/packet-nfs.c
> +++ b/epan/dissectors/packet-nfs.c
> @@ -5837,6 +5837,19 @@ static const value_string names_nfs_nfsstat4[] = {
>  	{	10071,	"NFS4ERR_OP_NOT_IN_SESSION"			},
>  	{	10072,	"NFS4ERR_HASH_ALG_UNSUPP"			},
>  	{	10073,	"NFS4ERR_CONN_BINDING_NOT_ENFORCED"		},
> +	{	10074,	"NFS4ERR_CLIENTID_BUSY"	},
> +	{	10075,	"NFS4ERR_PNFS_IO_HOLE"	},
> +	{	10076,	"NFS4ERR_SEQ_FALSE_RETRY"	},
> +	{	10077,	"NFS4ERR_BAD_HIGH_SLOT"	},
> +	{	10078,	"NFS4ERR_DEADSESSION"	},
> +	{	10079,	"NFS4ERR_ENCR_ALG_UNSUPP"	},
> +	{	10080,	"NFS4ERR_PNFS_NO_LAYOUT"	},
> +	{	10081,	"NFS4ERR_NOT_ONLY_OP"	},
> +	{	10082,	"NFS4ERR_WRONG_CRED"	},
> +	{	10083,	"NFS4ERR_WRONG_TYPE"	},
> +	{	10084,	"NFS4ERR_DIRDELEG_UNAVAIL"	},
> +	{	10085,	"NFS4ERR_REJECT_DELEG"	},
> +	{	10086,	"NFS4ERR_RETURNCONFLICT"	},
>  	{	0,	NULL }
>  };
>  
> -- 
> 1.5.5.1.211.g65ea3
> 



More information about the pNFS mailing list