Ethereal-dev: [Ethereal-dev] NFSv4 patches for packet-nfs.c
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Mike Frisch <mfrisch@xxxxxxxxxx>
Date: Fri, 1 Mar 2002 16:53:19 -0500
Enclosed is a patch for a few NFSv4 decoding problems. One with SECINFO reply decoding and the other for replies to calls that return fattr4. More patches to come... Mike.
Index: packet-nfs.c =================================================================== RCS file: /cvsroot/ethereal/packet-nfs.c,v retrieving revision 1.65 diff -u -r1.65 packet-nfs.c --- packet-nfs.c 2002/02/06 22:54:01 1.65 +++ packet-nfs.c 2002/03/01 21:40:29 @@ -1,8 +1,7 @@ /* packet-nfs.c * Routines for nfs dissection * Copyright 1999, Uwe Girlich <Uwe.Girlich@xxxxxxxxxxx> - * Copyright 2000-2001, Mike Frisch <frisch@xxxxxxxxxxxxxxx> (NFSv4 decoding) - * + * Copyright 2000-2002, Mike Frisch <frisch@xxxxxxxxxxxxxxx> (NFSv4 decoding) * $Id: packet-nfs.c,v 1.65 2002/02/06 22:54:01 guy Exp $ * * Ethereal - Network traffic analyzer @@ -199,7 +198,6 @@ static int hf_nfs_recc_attr = -1; static int hf_nfs_time_how4 = -1; static int hf_nfs_attrlist4 = -1; -static int hf_nfs_fattr4_expire_type = -1; static int hf_nfs_fattr4_link_support = -1; static int hf_nfs_fattr4_symlink_support = -1; static int hf_nfs_fattr4_named_attr = -1; @@ -380,6 +378,7 @@ static gint ett_nfs_open4_result_flags = -1; static gint ett_nfs_secinfo4_flavor_info = -1; static gint ett_nfs_stateid4 = -1; +static gint ett_nfs_fattr4_fh_expire_type = -1; /* file name snooping */ @@ -4424,35 +4423,7 @@ return offset; } -static const value_string names_fattr4_expire_type[] = { -#define FH4_PERSISTENT 0x00000000 - { FH4_PERSISTENT, "FH4_PERSISTENT" }, -#define FH4_NOEXPIRE_WITH_OPEN 0x00000001 - { FH4_NOEXPIRE_WITH_OPEN, "FH4_NOEXPIRE_WITH_OPEN" }, -#define FH4_VOLATILE_ANY 0x00000002 - { FH4_NOEXPIRE_WITH_OPEN, "FH4_NOEXPIRE_WITH_OPEN" }, -#define FH4_VOL_MIGRATION 0x00000004 - { FH4_VOL_MIGRATION, "FH4_VOL_MIGRATION" }, -#define FH4_VOL_RENAME 0x00000008 - { FH4_VOL_RENAME, "FH4_VOL_RENAME" }, - { 0, NULL } -}; - int -dissect_nfs_fh_expire_type(tvbuff_t *tvb, int offset, packet_info *pinfo, - proto_tree *tree) -{ - guint32 fattr4_fh_expire_type; - - fattr4_fh_expire_type = tvb_get_ntohl(tvb, offset); - proto_tree_add_uint(tree, hf_nfs_fattr4_expire_type, tvb, offset+0, - 4, fattr4_fh_expire_type); - offset += 4; - - return offset; -} - -int dissect_nfs_fsid4(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, char *name) { @@ -4601,6 +4572,73 @@ return dissect_mode(tvb, offset, pinfo, tree, name); } +static const value_string nfs4_fattr4_fh_expire_type_names[] = { +#define FH4_PERSISTENT 0x00000000 + { FH4_PERSISTENT, "FH4_PERSISTENT" }, +#define FH4_NOEXPIRE_WITH_OPEN 0x00000001 + { FH4_NOEXPIRE_WITH_OPEN, "FH4_NOEXPIRE_WITH_OPEN" }, +#define FH4_VOLATILE_ANY 0x00000002 + { FH4_VOLATILE_ANY, "FH4_VOLATILE_ANY" }, +#define FH4_VOL_MIGRATION 0x00000004 + { FH4_VOL_MIGRATION, "FH4_VOL_MIGRATION" }, +#define FH4_VOL_RENAME 0x00000008 + { FH4_VOL_RENAME, "FH4_VOL_RENAME" }, + { 0, NULL } +}; + + +int +dissect_nfs_fattr4_fh_expire_type(tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree) +{ + guint32 expire_type; + proto_item *expire_type_item = NULL; + proto_tree *expire_type_tree = NULL; + + expire_type = tvb_get_ntohl(tvb, offset + 0); + + if (tree) + { + expire_type_item = proto_tree_add_text(tree, tvb, offset, 4, + "fattr4_fh_expire_type: 0x%08x", expire_type); + if (expire_type_item) + expire_type_tree = proto_item_add_subtree(expire_type_item, + ett_nfs_fattr4_fh_expire_type); + } + + if (expire_type_tree) + { + if (expire_type == FH4_PERSISTENT) + { + proto_tree_add_text(expire_type_tree, tvb, offset, 4, "%s", + decode_enumerated_bitfield(expire_type, FH4_PERSISTENT, 8, + nfs4_fattr4_fh_expire_type_names, "%s")); + } + else + { + if (expire_type & FH4_NOEXPIRE_WITH_OPEN) + proto_tree_add_text(expire_type_tree, tvb, offset, 4, + "FH4_NOEXPIRE_WITH_OPEN (0x%08x)", FH4_NOEXPIRE_WITH_OPEN); + + if (expire_type & FH4_VOLATILE_ANY) + proto_tree_add_text(expire_type_tree, tvb, offset, 4, + "FH4_VOLATILE_ANY (0x%08x)", FH4_VOLATILE_ANY); + + if (expire_type & FH4_VOL_MIGRATION) + proto_tree_add_text(expire_type_tree, tvb, offset, 4, + "FH4_VOL_MIGRATION (0x%08x)", FH4_VOL_MIGRATION); + + if (expire_type & FH4_VOL_RENAME) + proto_tree_add_text(expire_type_tree, tvb, offset, 4, + "FH4_VOL_RENAME (0x%08x)", FH4_VOL_RENAME); + } + } + + offset += 4; + + return offset; +} + static const value_string names_fattr4[] = { #define FATTR4_SUPPORTED_ATTRS 0 { FATTR4_SUPPORTED_ATTRS, "FATTR4_SUPPORTED_ATTRS" }, @@ -4795,9 +4833,8 @@ break; case FATTR4_FH_EXPIRE_TYPE: - attr_vals_offset = dissect_rpc_uint32(tvb, pinfo, - attr_newftree, hf_nfs_fattr4_expire_type, - attr_vals_offset); + attr_vals_offset = dissect_nfs_fattr4_fh_expire_type(tvb, + attr_vals_offset, pinfo, attr_newftree); break; case FATTR4_CHANGE: @@ -6181,8 +6218,8 @@ case NFS4_OP_CREATE: offset = dissect_nfs_change_info4(tvb, offset, pinfo, newftree, "change_info"); - offset = dissect_nfs_fattr4(tvb, offset, pinfo, newftree, - "attrsset"); + offset = dissect_nfs_attributes(tvb, offset, pinfo, newftree, + "attrsset", FATTR4_BITMAP_ONLY); break; case NFS4_OP_GETATTR: @@ -6265,6 +6302,8 @@ proto_item *fitem; proto_tree *secftree; + printf("here\n"); + while ((data_follows = tvb_get_ntohl(tvb, offset))) { offset += 4; @@ -6880,10 +6919,6 @@ "attr_vals", "nfs.fattr4.attr_vals", FT_BYTES, BASE_DEC, NULL, 0, "attr_vals", HFILL }}, - { &hf_nfs_fattr4_expire_type, { - "fattr4_expire_type", "nfs.fattr4_expire_type", FT_UINT32, BASE_DEC, - VALS(names_fattr4_expire_type), 0, "fattr4_expire_type", HFILL }}, - { &hf_nfs_fattr4_link_support, { "fattr4_link_support", "nfs.fattr4_link_support", FT_BOOLEAN, BASE_NONE, &yesno, 0, "nfs.fattr4_link_support", HFILL }}, @@ -7370,8 +7405,10 @@ &ett_nfs_fs_locations4, &ett_nfs_fs_location4, &ett_nfs_open4_result_flags, + &ett_nfs_secinfo4, &ett_nfs_secinfo4_flavor_info, - &ett_nfs_stateid4 + &ett_nfs_stateid4, + &ett_nfs_fattr4_fh_expire_type, }; module_t *nfs_module;
- Follow-Ups:
- Re: [Ethereal-dev] NFSv4 patches for packet-nfs.c
- From: Guy Harris
- Re: [Ethereal-dev] NFSv4 patches for packet-nfs.c
- Prev by Date: Re: [Ethereal-dev] README.developer
- Next by Date: [Ethereal-dev] Who is going to connectathon?
- Previous by thread: Re: [Ethereal-dev] README.developer
- Next by thread: Re: [Ethereal-dev] NFSv4 patches for packet-nfs.c
- Index(es):