diff options
Diffstat (limited to 'epan/dissectors/packet-dcerpc-fileexp.c')
-rw-r--r-- | epan/dissectors/packet-dcerpc-fileexp.c | 4721 |
1 files changed, 4721 insertions, 0 deletions
diff --git a/epan/dissectors/packet-dcerpc-fileexp.c b/epan/dissectors/packet-dcerpc-fileexp.c new file mode 100644 index 00000000..8da97080 --- /dev/null +++ b/epan/dissectors/packet-dcerpc-fileexp.c @@ -0,0 +1,4721 @@ +/* packet-dcerpc-fileexp.c + * + * Routines for DCE DFS File Exporter dissection + * Copyright 2002, Jaime Fournier <Jaime.Fournier@hush.com> + * This information is based off the released idl files from opengroup. + * ftp://ftp.opengroup.org/pub/dce122/dce/src/file.tar.gz file/fsint/afs4int.idl + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "config.h" + +#include <epan/packet.h> +#include <epan/exceptions.h> + +#include "packet-dcerpc.h" +#include "packet-dcerpc-dce122.h" + +void proto_register_fileexp (void); +void proto_reg_handoff_fileexp (void); + +#define AFS_SETMODTIME 0x001 +#define AFS_SETOWNER 0x002 +#define AFS_SETGROUP 0x004 +#define AFS_SETMODE 0x008 +#define AFS_SETACCESSTIME 0x010 +#define AFS_SETCHANGETIME 0x020 +#define AFS_SETLENGTH 0x040 +#define AFS_SETTYPEUUID 0x080 +#define AFS_SETDEVNUM 0x100 +#define AFS_SETMODEXACT 0x200 +#define AFS_SETTRUNCLENGTH 0x400 +#define AFS_SETCLIENTSPARE 0x800 + +#define TKN_LOCK_READ 0x00001 +#define TKN_LOCK_WRITE 0x00002 +#define TKN_DATA_READ 0x00004 +#define TKN_DATA_WRITE 0x00008 +#define TKN_OPEN_READ 0x00010 +#define TKN_OPEN_WRITE 0x00020 +#define TKN_OPEN_SHARED 0x00040 +#define TKN_OPEN_EXCLUSIVE 0x00080 +#define TKN_OPEN_DELETE 0x00100 +#define TKN_OPEN_PRESERVE 0x00200 +#define TKN_STATUS_READ 0x00400 +#define TKN_STATUS_WRITE 0x00800 +#define TKN_OPEN_UNLINK 0x01000 +#define TKN_SPOT_HERE 0x02000 +#define TKN_SPOT_THERE 0x04000 +#define TKN_OPEN_NO_READ 0x08000 +#define TKN_OPEN_NO_WRITE 0x10000 +#define TKN_OPEN_NO_UNLINK 0x20000 + +#define AFS_CONN_PARAM_HOSTLIFE 0 +#define AFS_CONN_PARAM_HOSTRPC 1 +#define AFS_CONN_PARAM_DEADSERVER 2 +#define AFS_CONN_PARAM_EPOCH 3 +#define AFS_CONN_PARAM_MAXFILE_CLIENT 4 +#define AFS_CONN_PARAM_MAXFILE_SERVER 5 +#define AFS_CONN_PARAM_HOST_TYPE_CLIENT 6 +#define AFS_CONN_PARAM_HOST_TYPE_SERVER 7 +#define AFS_CONN_PARAM_FT_MASK_CLIENT 8 +#define AFS_CONN_PARAM_FT_MASK_SERVER 9 + +#define AFS_CONN_PARAM_SUPPORTS_64BITS 0x10000 +#define AFS_CONN_PARAM_512BYTE_BLOCKS 0x20000 + +#define AFS_FLAG_SEC_SERVICE 0x01 +#define AFS_FLAG_CONTEXT_NEW_IF 0x02 +#define AFS_FLAG_CONTEXT_DO_RESET 0x04 +#define AFS_FLAG_CONTEXT_NEW_ACL_IF 0x08 +#define AFS_FLAG_CONTEXT_NEW_TKN_TYPES 0x10 + +#define AFS_FLAG_RETURNTOKEN 0x00001 +#define AFS_FLAG_TOKENJUMPQUEUE 0x00002 +#define AFS_FLAG_SKIPTOKEN 0x00004 +#define AFS_FLAG_NOOPTIMISM 0x00008 +#define AFS_FLAG_TOKENID 0x00010 +#define AFS_FLAG_RETURNBLOCKER 0x00020 +#define AFS_FLAG_ASYNCGRANT 0x00040 +#define AFS_FLAG_NOREVOKE 0x00080 +#define AFS_FLAG_MOVE_REESTABLISH 0x00100 +#define AFS_FLAG_SERVER_REESTABLISH 0x00200 +#define AFS_FLAG_NO_NEW_EPOCH 0x00400 +#define AFS_FLAG_MOVE_SOURCE_OK 0x00800 +#define AFS_FLAG_SYNC 0x01000 +#define AFS_FLAG_ZERO 0x02000 +#define AFS_FLAG_SKIPSTATUS 0x04000 +#define AFS_FLAG_FORCEREVOCATIONS 0x08000 +#define AFS_FLAG_FORCEVOLQUIESCE 0x10000 +#define AFS_FLAG_FORCEREVOCATIONDOWN 0x20000 + +static int hf_fileexp_opnum = -1; + + +static int hf_fileexp_afsFid_cell_high = -1; +static int hf_fileexp_afsuuid_uuid = -1; +static int hf_fileexp_fetchdata_pipe_t_size = -1; +static int hf_fileexp_afsNameString_t_principalName_string = -1; +static int hf_fileexp_afsFid_cell_low = -1; +static int hf_fileexp_afsFid_volume_high = -1; +static int hf_fileexp_afsFid_volume_low = -1; +static int hf_fileexp_afsFid_Vnode = -1; +static int hf_fileexp_afsFid_Unique = -1; +static int hf_fileexp_interfaceversion = -1; +static int hf_fileexp_filetype = -1; +static int hf_fileexp_linkcount = -1; +static int hf_fileexp_length_high = -1; +static int hf_fileexp_length_low = -1; +static int hf_fileexp_dataversion_high = -1; +static int hf_fileexp_dataversion_low = -1; +static int hf_fileexp_author = -1; +static int hf_fileexp_owner = -1; +static int hf_fileexp_group = -1; +static int hf_fileexp_calleraccess = -1; +static int hf_fileexp_anonymousaccess = -1; +static int hf_fileexp_aclexpirationtime = -1; +static int hf_fileexp_mode = -1; +static int hf_fileexp_parentvnode = -1; +static int hf_fileexp_parentunique = -1; +static int hf_fileexp_modtime_sec = -1; +static int hf_fileexp_modtime_msec = -1; +static int hf_fileexp_changetime_sec = -1; +static int hf_fileexp_changetime_msec = -1; +static int hf_fileexp_accesstime_sec = -1; +static int hf_fileexp_accesstime_msec = -1; +static int hf_fileexp_servermodtime_sec = -1; +static int hf_fileexp_servermodtime_msec = -1; +static int hf_fileexp_typeuuid = -1; +static int hf_fileexp_objectuuid = -1; +static int hf_fileexp_devicenumber = -1; +static int hf_fileexp_blocksused = -1; +static int hf_fileexp_clientspare1 = -1; +static int hf_fileexp_devicenumberhighbits = -1; +static int hf_fileexp_agtypeunique = -1; +static int hf_fileexp_himaxspare = -1; +static int hf_fileexp_lomaxspare = -1; +static int hf_fileexp_pathconfspare = -1; +static int hf_fileexp_spare4 = -1; +static int hf_fileexp_spare5 = -1; +static int hf_fileexp_spare6 = -1; +static int hf_fileexp_volid_hi = -1; +static int hf_fileexp_volid_low = -1; +static int hf_fileexp_vvage = -1; +static int hf_fileexp_vv_hi = -1; +static int hf_fileexp_vv_low = -1; +static int hf_fileexp_vvpingage = -1; +static int hf_fileexp_vvspare1 = -1; +static int hf_fileexp_vvspare2 = -1; +static int hf_fileexp_beginrange = -1; +static int hf_fileexp_beginrangeext = -1; +static int hf_fileexp_endrange = -1; +static int hf_fileexp_endrangeext = -1; +static int hf_fileexp_expirationtime = -1; +static int hf_fileexp_tokenid_hi = -1; +static int hf_fileexp_tokenid_low = -1; +static int hf_fileexp_type_hi = -1; +static int hf_fileexp_type_low = -1; +static int hf_fileexp_tn_length = -1; +static int hf_fileexp_storestatus_accesstime_sec = -1; +static int hf_fileexp_storestatus_accesstime_usec = -1; +static int hf_fileexp_storestatus_changetime_sec = -1; +static int hf_fileexp_storestatus_changetime_usec = -1; +static int hf_fileexp_storestatus_clientspare1 = -1; +static int hf_fileexp_storestatus_cmask = -1; +static int hf_fileexp_storestatus_devicenumber = -1; +static int hf_fileexp_storestatus_devicenumberhighbits = -1; +static int hf_fileexp_storestatus_devicetype = -1; +static int hf_fileexp_storestatus_group = -1; +static int hf_fileexp_storestatus_length_high = -1; +static int hf_fileexp_storestatus_length_low = -1; +static int hf_fileexp_storestatus_mask = -1; +static int hf_fileexp_storestatus_mode = -1; +static int hf_fileexp_storestatus_modtime_sec = -1; +static int hf_fileexp_storestatus_modtime_usec = -1; +static int hf_fileexp_storestatus_owner = -1; +static int hf_fileexp_storestatus_spare1 = -1; +static int hf_fileexp_storestatus_spare2 = -1; +static int hf_fileexp_storestatus_spare3 = -1; +static int hf_fileexp_storestatus_spare4 = -1; +static int hf_fileexp_storestatus_spare5 = -1; +static int hf_fileexp_storestatus_spare6 = -1; +static int hf_fileexp_storestatus_trunc_high = -1; +static int hf_afsconnparams_mask = -1; +static int hf_fileexp_storestatus_trunc_low = -1; +static int hf_fileexp_storestatus_typeuuid = -1; +static int hf_fileexp_l_end_pos = -1; +static int hf_fileexp_l_end_pos_ext = -1; +static int hf_fileexp_l_fstype = -1; +static int hf_fileexp_l_pid = -1; +static int hf_fileexp_l_start_pos = -1; +static int hf_fileexp_l_start_pos_ext = -1; +static int hf_fileexp_l_sysid = -1; +static int hf_fileexp_l_type = -1; +static int hf_fileexp_l_whence = -1; +static int hf_fileexp_acl_len = -1; +static int hf_fileexp_setcontext_rqst_epochtime = -1; +static int hf_fileexp_setcontext_rqst_clientsizesattrs = -1; +static int hf_fileexp_setcontext_rqst_parm7 = -1; +static int hf_fileexp_afsNetAddr_type = -1; +static int hf_fileexp_afsNetAddr_data = -1; +static int hf_fileexp_returntokenidp_high = -1; +static int hf_fileexp_minvvp_low = -1; +static int hf_fileexp_position_high = -1; +static int hf_fileexp_position_low = -1; +static int hf_fileexp_offsetp_high = -1; +static int hf_fileexp_nextoffsetp_low = -1; +static int hf_fileexp_cellidp_high = -1; +static int hf_afserrorstatus_st = -1; +static int hf_fileexp_length = -1; +static int hf_afsconnparams_values = -1; +static int hf_fileexp_acltype = -1; +static int hf_fileexp_afsTaggedPath_tp_chars = -1; +static int hf_fileexp_afsTaggedPath_tp_tag = -1; +static int hf_fileexp_afsacl_uuid1 = -1; +static int hf_fileexp_bulkfetchstatus_size = -1; +static int hf_fileexp_flags = -1; +static int hf_fileexp_afsreturndesc_tokenid_high = -1; +static int hf_fileexp_afsreturndesc_tokenid_low = -1; +static int hf_fileexp_afsreturndesc_type_high = -1; +static int hf_fileexp_afsreturndesc_type_low = -1; +static int hf_fileexp_returntokenidp_low = -1; +static int hf_fileexp_minvvp_high = -1; +static int hf_fileexp_offsetp_low = -1; +static int hf_fileexp_nextoffsetp_high = -1; +static int hf_fileexp_cellidp_low = -1; +static int hf_fileexp_tn_tag = -1; +static int hf_fileexp_tn_string = -1; +static int hf_fileexp_bulkfetchvv_numvols = -1; +static int hf_fileexp_bulkfetchvv_spare1 = -1; +static int hf_fileexp_bulkfetchvv_spare2 = -1; +static int hf_fileexp_bulkkeepalive_numexecfids = -1; +static int hf_fileexp_bulkkeepalive_spare4 = -1; +static int hf_fileexp_bulkkeepalive_spare2 = -1; +static int hf_fileexp_bulkkeepalive_spare1 = -1; +static int hf_fileexp_afsacl_defaultcell_uuid = -1; +static int hf_fileexp_gettime_syncdispersion = -1; +static int hf_fileexp_gettime_syncdistance = -1; +static int hf_fileexp_gettime_usecondsp = -1; +static int hf_fileexp_readdir_size = -1; +static int hf_fileexp_afsNameString_t_principalName_size = -1; +static int hf_fileexp_afsTaggedPath_tp_length = -1; +static int hf_fileexp_fstype = -1; +static int hf_fileexp_gettime_secondsp = -1; + +static int proto_fileexp = -1; + +static gint ett_fileexp = -1; +static gint ett_fileexp_afsFid = -1; +static gint ett_fileexp_afsReturnDesc = -1; +static gint ett_fileexp_afsNetAddr = -1; +static gint ett_fileexp_fetchstatus = -1; +static gint ett_fileexp_afsflags = -1; +static gint ett_fileexp_volsync = -1; +static gint ett_fileexp_minvvp = -1; +static gint ett_fileexp_afsfidtaggedname = -1; +static gint ett_fileexp_afstaggedname = -1; +static gint ett_fileexp_afstoken = -1; +static gint ett_fileexp_afsstorestatus = -1; +static gint ett_fileexp_afsRecordLock = -1; +static gint ett_fileexp_afsAcl = -1; +static gint ett_fileexp_afsNameString_t = -1; +static gint ett_fileexp_afsConnParams = -1; +static gint ett_fileexp_afsErrorStatus = -1; +static gint ett_fileexp_afsNetData = -1; +static gint ett_fileexp_afsTaggedPath = -1; +static gint ett_fileexp_afsBulkStat = -1; +static gint ett_fileexp_afsuuid = -1; +static gint ett_fileexp_offsetp = -1; +static gint ett_fileexp_returntokenidp = -1; +static gint ett_fileexp_afsbundled_stat = -1; + + +/* vars for our macro(s) */ +static int hf_error_st = -1; + +static e_guid_t uuid_fileexp = + { 0x4d37f2dd, 0xed93, 0x0000, {0x02, 0xc0, 0x37, 0xcf, 0x1e, 0x00, 0x00, 0x00} +}; +static guint16 ver_fileexp = 4; + +/* XXX the only macro that I could not find the right way to convert easily. +The reason is because we reset col_info if st is non zero for many rpcs. +This is because on error, many structures are filled with garbage. +We end up not knowing if data is valid until we get the st var at the very end of the stubdata.. +We can not just jump to the end, because more often than not an extra buffer exists in payload +after st. Thus we have to advance on each item until we read in ST, then we clear col_info. on error +A good example is FetchStatus() on a file that returns ENOEXIST. +inode, volume, etc all will be garbage. +*/ + +#define MACRO_ST_CLEAR(name) \ + { \ + guint32 st; \ + const char *st_str; \ + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_error_st, &st); \ + st_str = val_to_str_ext (st, &dce_error_vals_ext, "%u"); \ + if (st) { \ + col_add_fstr (pinfo->cinfo, COL_INFO, "%s st:%s ", name, st_str); \ + } else { \ + col_append_fstr (pinfo->cinfo, COL_INFO, " st:%s ", st_str); \ + } \ + } + +static int +dissect_afsFid (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* + afsHyper Cell; + afsHyper Volume; + unsigned32 Vnode; + unsigned32 Unique; +*/ + + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + guint32 volume_low, unique, vnode, inode; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, ett_fileexp_afsFid, &item, "afsFid:"); + } + + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_afsFid_cell_high, NULL); + + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_afsFid_cell_low, NULL); + + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_afsFid_volume_high, NULL); + + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_afsFid_volume_low, &volume_low); + + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_afsFid_Vnode, &vnode); + + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_afsFid_Unique, &unique); + + col_append_fstr (pinfo->cinfo, COL_INFO, " :FSID:%u ", volume_low); + + if ((vnode == 1) || (vnode == 2)) + { + col_append_str (pinfo->cinfo, COL_INFO, " InFS "); + } + else + { + inode = ((volume_low << 16) + vnode) & 0x7fffffff; + col_append_fstr (pinfo->cinfo, COL_INFO, " inode:%u ", inode); + } + + proto_item_set_len (item, offset - old_offset); + return offset; +} + +static int +dissect_afsConnParams (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* + unsigned32 Mask; + unsigned32 Values[20]; +*/ + + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + guint32 mask, Values[20]; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = + proto_tree_add_subtree (parent_tree, tvb, offset, -1, + ett_fileexp_afsConnParams, &item, "afsConnParams_t:"); + } + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_mask, &mask); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[0]); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[1]); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[2]); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[3]); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[4]); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[5]); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[6]); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[7]); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[8]); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[9]); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[10]); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[11]); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[12]); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[13]); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[14]); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[15]); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[16]); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[17]); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[18]); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_afsconnparams_values, &Values[19]); + if ((mask & AFS_CONN_PARAM_HOSTLIFE) == AFS_CONN_PARAM_HOSTLIFE) + { + col_append_str (pinfo->cinfo, COL_INFO, ":HOSTLIFE"); + } + if ((mask & AFS_CONN_PARAM_HOSTRPC) == AFS_CONN_PARAM_HOSTRPC) + { + col_append_str (pinfo->cinfo, COL_INFO, ":HOSTRPC"); + } + if ((mask & AFS_CONN_PARAM_DEADSERVER) == AFS_CONN_PARAM_DEADSERVER) + { + col_append_str (pinfo->cinfo, COL_INFO, ":DEADSERVER"); + } + if ((mask & AFS_CONN_PARAM_EPOCH) == AFS_CONN_PARAM_EPOCH) + { + col_append_str (pinfo->cinfo, COL_INFO, ":EPOCH"); + } + if ((mask & AFS_CONN_PARAM_MAXFILE_CLIENT) == AFS_CONN_PARAM_MAXFILE_CLIENT) + { + col_append_str (pinfo->cinfo, COL_INFO, ":MAXFILE_CLIENT"); + } + if ((mask & AFS_CONN_PARAM_MAXFILE_SERVER) == AFS_CONN_PARAM_MAXFILE_SERVER) + { + col_append_str (pinfo->cinfo, COL_INFO, ":MAXFILE_SERVER"); + } + if ((mask & AFS_CONN_PARAM_HOST_TYPE_CLIENT) == + AFS_CONN_PARAM_HOST_TYPE_CLIENT) + { + col_append_str (pinfo->cinfo, COL_INFO, ":HOST_TYPE_CLIENT"); + } + if ((mask & AFS_CONN_PARAM_HOST_TYPE_SERVER) == + AFS_CONN_PARAM_HOST_TYPE_SERVER) + { + col_append_str (pinfo->cinfo, COL_INFO, ":HOST_TYPE_SERVER"); + } + if ((mask & AFS_CONN_PARAM_FT_MASK_CLIENT) == AFS_CONN_PARAM_FT_MASK_CLIENT) + { + col_append_str (pinfo->cinfo, COL_INFO, ":FT_MASK_CLIENT"); + } + if ((mask & AFS_CONN_PARAM_FT_MASK_SERVER) == AFS_CONN_PARAM_FT_MASK_SERVER) + { + col_append_str (pinfo->cinfo, COL_INFO, ":FT_MASK_SERVER"); + } + if ((mask & AFS_CONN_PARAM_SUPPORTS_64BITS) == + AFS_CONN_PARAM_SUPPORTS_64BITS) + { + col_append_str (pinfo->cinfo, COL_INFO, ":SUPPORTS_64BITS"); + } + if ((mask & AFS_CONN_PARAM_512BYTE_BLOCKS) == AFS_CONN_PARAM_512BYTE_BLOCKS) + { + col_append_str (pinfo->cinfo, COL_INFO, ":512BYTE_BLOCKS"); + } + col_append_fstr (pinfo->cinfo, COL_INFO, + " Values:%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u", + Values[0], Values[1], Values[2], Values[3], + Values[4], Values[5], Values[6], Values[7], Values[8], + Values[9], Values[10], Values[11], Values[12], + Values[13], Values[14], Values[15], Values[16], + Values[17], Values[18], Values[19]); + + proto_item_set_len (item, offset - old_offset); + return offset; +} + +static int +dissect_afsNameString_t (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* +typedef [string] byte NameString_t[AFS_NAMEMAX]; +*/ + + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; +#define AFS_NAMEMAX 256 + guint32 string_size; + const guint8 *namestring; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = + proto_tree_add_subtree (parent_tree, tvb, offset, -1, + ett_fileexp_afsNameString_t, &item, "afsNameString_t:"); + } + + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_afsNameString_t_principalName_size, + &string_size); + col_append_fstr (pinfo->cinfo, COL_INFO, " String_size:%u", string_size); + if (string_size < AFS_NAMEMAX) + { + proto_tree_add_item_ret_string(tree, hf_fileexp_afsNameString_t_principalName_string, tvb, offset, string_size, ENC_ASCII|ENC_NA, pinfo->pool, &namestring); + offset += string_size; + col_append_fstr (pinfo->cinfo, COL_INFO, " Principal:%s", namestring); + } + else + { + col_append_fstr (pinfo->cinfo, COL_INFO, + " :FIXME!: Invalid string length of %u", + string_size); + } + + proto_item_set_len (item, offset - old_offset); + return offset; +} + + +static int +dissect_afsNetAddr (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* unsigned16 type; + unsigned8 data[14]; +*/ + + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + guint16 type; + guint8 data; + int i; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, + ett_fileexp_afsNetAddr, &item, "afsNetAddr:"); + } + + offset = + dissect_ndr_uint16 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_afsNetAddr_type, &type); + + if (type) + { + col_append_fstr (pinfo->cinfo, COL_INFO, " Type:%u ", type); + + + for (i = 0; i < 14; i++) + { + + offset = + dissect_ndr_uint8 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_afsNetAddr_data, &data); + + + switch (i) + { + case 1: + if (data) + { + col_append_fstr (pinfo->cinfo, COL_INFO, " Port:%u", + data); + } + break; + case 2: + col_append_fstr (pinfo->cinfo, COL_INFO, " IP:%u.", data); + break; + case 3: + col_append_fstr (pinfo->cinfo, COL_INFO, "%u.", data); + break; + case 4: + col_append_fstr (pinfo->cinfo, COL_INFO, "%u.", data); + break; + case 5: + col_append_fstr (pinfo->cinfo, COL_INFO, "%u", data); + break; + } + + } + + } + else + { + + offset += 14; /* space left after reading in type for the array. */ + } + + + proto_item_set_len (item, offset - old_offset); + return offset; +} + + +static int +dissect_afsNetData (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* + afsNetAddr sockAddr; + NameString_t principalName; +*/ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = + proto_tree_add_subtree (parent_tree, tvb, offset, -1, ett_fileexp_afsNetData, &item, "afsNetData:"); + } + + offset = dissect_afsNetAddr ( tvb, offset, pinfo, tree, di, drep); + offset += 4; /* buffer */ + offset = dissect_afsNameString_t ( tvb, offset, pinfo, tree, di, drep); + + proto_item_set_len (item, offset - old_offset); + return offset; + +} + +static int +dissect_afsTaggedPath (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* + codesetTag tp_tag; + unsigned16 tp_length; + byte tp_chars[AFS_PATHMAX+1]; 1024+1 +*/ + + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + guint32 tp_tag; + guint16 tp_length; + const guint8 *tp_chars; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = + proto_tree_add_subtree (parent_tree, tvb, offset, -1, ett_fileexp_afsTaggedPath, &item, "afsTaggedPath"); + } + + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_afsTaggedPath_tp_tag, &tp_tag); + offset = + dissect_ndr_uint16 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_afsTaggedPath_tp_length, &tp_length); + proto_tree_add_item (tree, hf_fileexp_afsTaggedPath_tp_chars, tvb, offset, + tp_length, ENC_ASCII); + tp_chars = tvb_get_string_enc (pinfo->pool, tvb, offset, 1025, ENC_ASCII); + offset += 1025; + col_append_fstr (pinfo->cinfo, COL_INFO, " :tp_chars %s", tp_chars); + + proto_item_set_len (item, offset - old_offset); + return offset; +} + +static int +dissect_afsAcl (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* + unsigned32 afsACL_len; + [length_is(afsACL_len)] byte afsACL_val[AFS_ACLMAX]; +*/ + + proto_item *item = NULL; + proto_tree *tree; + int old_offset = offset; + guint32 acl_len; + e_guid_t uuid1, defaultcell; + + if (di->conformant_run) + { + return offset; + } + + tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, ett_fileexp_afsAcl, &item, "afsAcl"); + + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_acl_len, + &acl_len); + offset += 8; /* bypass spare and duplicate acl_len */ + offset = + dissect_ndr_uuid_t (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_afsacl_uuid1, &uuid1); + col_append_fstr (pinfo->cinfo, COL_INFO, + " - %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", + uuid1.data1, uuid1.data2, uuid1.data3, uuid1.data4[0], + uuid1.data4[1], uuid1.data4[2], uuid1.data4[3], + uuid1.data4[4], uuid1.data4[5], uuid1.data4[6], + uuid1.data4[7]); + + offset = + dissect_ndr_uuid_t (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_afsacl_defaultcell_uuid, &defaultcell); + col_append_fstr (pinfo->cinfo, COL_INFO, + " %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", + defaultcell.data1, defaultcell.data2, defaultcell.data3, + defaultcell.data4[0], defaultcell.data4[1], + defaultcell.data4[2], defaultcell.data4[3], + defaultcell.data4[4], defaultcell.data4[5], + defaultcell.data4[6], defaultcell.data4[7]); + + if (acl_len < 38) + { + /* XXX - exception */ + return offset; + } + + offset += (acl_len - 38); + + proto_item_set_len (item, offset-old_offset); + return offset; +} + + +static int +dissect_afsErrorStatus (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + guint32 st; + const char *st_str; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, + ett_fileexp_afsErrorStatus, &item, "afsErrorStatus"); + } + + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_afserrorstatus_st, + &st); + st_str = val_to_str_ext (st, &dce_error_vals_ext, "%u"); + + col_append_fstr (pinfo->cinfo, COL_INFO, " st:%s ", st_str); + + proto_item_set_len (item, offset - old_offset); + return offset; +} + +static int +dissect_afsRecordLock (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* + signed16 l_type; + signed16 l_whence; + unsigned32 l_start_pos; + unsigned32 l_end_pos; + unsigned32 l_pid; + unsigned32 l_sysid; + unsigned32 l_fstype; + unsigned32 l_start_pos_ext; was l_spare0: high 32b of l_start_pos + unsigned32 l_end_pos_ext; was l_spare1: high 32b of l_end_pos +*/ + + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + guint16 l_type, l_whence; + guint32 l_start_pos, l_end_pos, l_pid, l_sysid, l_fstype; + guint32 l_start_pos_ext, l_end_pos_ext; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, + ett_fileexp_afsRecordLock, &item, "afsRecordLock:"); + } + + offset = + dissect_ndr_uint16 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_l_type, + &l_type); + offset = + dissect_ndr_uint16 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_l_whence, + &l_whence); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_l_start_pos, &l_start_pos); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_l_end_pos, + &l_end_pos); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_l_pid, + &l_pid); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_l_sysid, + &l_sysid); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_l_fstype, + &l_fstype); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_l_start_pos_ext, &l_start_pos_ext); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_l_end_pos_ext, &l_end_pos_ext); + + proto_item_set_len (item, offset - old_offset); + return offset; +} + +static int +dissect_afsstorestatus (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* + unsigned32 mask; + afsTimeval modTime; + afsTimeval accessTime; + afsTimeval changeTime; + unsigned32 owner; + unsigned32 group; + unsigned32 mode; + afsHyper truncLength; applied first + afsHyper length; + afsUUID typeUUID; + unsigned32 deviceType; character or block + unsigned32 deviceNumber; + unsigned32 cmask; + unsigned32 clientSpare1; client-only attrs + unsigned32 deviceNumberHighBits; + unsigned32 spare1; + unsigned32 spare2; + unsigned32 spare3; + unsigned32 spare4; + unsigned32 spare5; + unsigned32 spare6; +*/ + + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + guint32 mask, modtime_sec, changetime_sec, accesstime_sec, devicenumber; + guint32 clientspare1, devicenumberhighbits, spare1, spare2, spare3, spare4; + guint32 spare5, spare6, accesstime_usec, changetime_usec, owner, group, mode; + guint32 trunc_high, trunc_low, length_high, length_low, devicetype; + guint32 cmask, modtime_usec; + e_guid_t typeuuid; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, + ett_fileexp_afsstorestatus, &item, "afsStoreStatus:"); + } + + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_mask, &mask); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_modtime_sec, &modtime_sec); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_modtime_usec, &modtime_usec); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_accesstime_sec, + &accesstime_sec); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_accesstime_usec, + &accesstime_usec); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_changetime_sec, + &changetime_sec); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_changetime_usec, + &changetime_usec); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_owner, &owner); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_group, &group); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_mode, &mode); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_trunc_high, &trunc_high); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_trunc_low, &trunc_low); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_length_high, &length_high); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_length_low, &length_low); + offset = + dissect_ndr_uuid_t (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_typeuuid, &typeuuid); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_devicetype, &devicetype); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_devicenumber, &devicenumber); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_cmask, &cmask); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_clientspare1, &clientspare1); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_devicenumberhighbits, + &devicenumberhighbits); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_spare1, &spare1); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_spare2, &spare2); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_spare3, &spare3); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_spare4, &spare4); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_spare5, &spare5); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_storestatus_spare6, &spare6); + + col_append_str (pinfo->cinfo, COL_INFO, " Mask="); + if ((mask & AFS_SETMODTIME) == AFS_SETMODTIME) + { + col_append_fstr (pinfo->cinfo, COL_INFO, ":SETMODTIME-%u.%u", + modtime_sec, modtime_usec); + } + if ((mask & AFS_SETOWNER) == AFS_SETOWNER) + { + col_append_fstr (pinfo->cinfo, COL_INFO, ":SETOWNER-%u", owner); + } + if ((mask & AFS_SETGROUP) == AFS_SETGROUP) + { + col_append_fstr (pinfo->cinfo, COL_INFO, ":SETGROUP-%u", group); + } + if ((mask & AFS_SETMODE) == AFS_SETMODE) + { + col_append_fstr (pinfo->cinfo, COL_INFO, ":SETMODE-%o", mode); + } + if ((mask & AFS_SETACCESSTIME) == AFS_SETACCESSTIME) + { + col_append_fstr (pinfo->cinfo, COL_INFO, ":SETACCESSTIME-%u.%u", + accesstime_sec, accesstime_usec); + } + if ((mask & AFS_SETCHANGETIME) == AFS_SETCHANGETIME) + { + col_append_fstr (pinfo->cinfo, COL_INFO, ":SETCHANGETIME-%u.%u", + changetime_sec, changetime_usec); + } + if ((mask & AFS_SETLENGTH) == AFS_SETLENGTH) + { + col_append_str (pinfo->cinfo, COL_INFO, ":SETLENGTH"); + } + if ((mask & AFS_SETTYPEUUID) == AFS_SETTYPEUUID) + { + col_append_str (pinfo->cinfo, COL_INFO, ":SETTYPEUUID"); + } + if ((mask & AFS_SETDEVNUM) == AFS_SETDEVNUM) + { + col_append_str (pinfo->cinfo, COL_INFO, ":SETDEVNUM"); + } + if ((mask & AFS_SETMODEXACT) == AFS_SETMODEXACT) + { + col_append_str (pinfo->cinfo, COL_INFO, ":SETMODEXACT"); + } + if ((mask & AFS_SETTRUNCLENGTH) == AFS_SETTRUNCLENGTH) + { + col_append_str (pinfo->cinfo, COL_INFO, ":SETTRUNCLENGTH"); + } + if ((mask & AFS_SETCLIENTSPARE) == AFS_SETCLIENTSPARE) + { + col_append_str (pinfo->cinfo, COL_INFO, ":SETCLIENTSPARE"); + } + + proto_item_set_len (item, offset - old_offset); + return offset; +} + +static int +dissect_afstoken (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* + afsHyper tokenID; + unsigned32 expirationTime; + afsHyper type; + unsigned32 beginRange; + unsigned32 endRange; + unsigned32 beginRangeExt; + unsigned32 endRangeExt; +*/ + + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + guint32 tokenid_hi, tokenid_low, expirationtime, type_hi, type_low; + guint32 beginrange, endrange, beginrangeext, endrangeext, type; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, ett_fileexp_afstoken, &item, "afsToken:"); + } + + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_tokenid_hi, + &tokenid_hi); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_tokenid_low, &tokenid_low); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_expirationtime, &expirationtime); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_type_hi, + &type_hi); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_type_low, + &type_low); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_beginrange, + &beginrange); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_endrange, + &endrange); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_beginrangeext, &beginrangeext); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_endrangeext, &endrangeext); + col_append_fstr (pinfo->cinfo, COL_INFO, + " :Tokenid:%u/%u ExpirationTime:%u beginrange:%u endrange:%u beginrangeext:%u endrangeext:%u", + tokenid_hi, tokenid_low, expirationtime, beginrange, + endrange, beginrangeext, endrangeext); + type = type_low; + + col_append_str (pinfo->cinfo, COL_INFO, " Type="); + + if ((type & TKN_LOCK_READ) == TKN_LOCK_READ) + { + col_append_str (pinfo->cinfo, COL_INFO, ":LOCK_READ"); + } + if ((type & TKN_LOCK_WRITE) == TKN_LOCK_WRITE) + { + col_append_str (pinfo->cinfo, COL_INFO, ":LOCK_WRITE"); + } + if ((type & TKN_DATA_READ) == TKN_DATA_READ) + { + col_append_str (pinfo->cinfo, COL_INFO, ":DATA_READ"); + } + if ((type & TKN_DATA_WRITE) == TKN_DATA_WRITE) + { + col_append_str (pinfo->cinfo, COL_INFO, ":DATA_WRITE"); + } + if ((type & TKN_OPEN_READ) == TKN_OPEN_READ) + { + col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_READ"); + } + if ((type & TKN_OPEN_WRITE) == TKN_OPEN_WRITE) + { + col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_WRITE"); + } + if ((type & TKN_OPEN_SHARED) == TKN_OPEN_SHARED) + { + col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_SHARED"); + } + if ((type & TKN_OPEN_EXCLUSIVE) == TKN_OPEN_EXCLUSIVE) + { + col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_EXCLUSIVE"); + } + if ((type & TKN_OPEN_DELETE) == TKN_OPEN_DELETE) + { + col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_DELETE"); + } + if ((type & TKN_OPEN_PRESERVE) == TKN_OPEN_PRESERVE) + { + col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_PRESERVE"); + } + if ((type & TKN_STATUS_READ) == TKN_STATUS_READ) + { + col_append_str (pinfo->cinfo, COL_INFO, ":STATUS_READ"); + } + if ((type & TKN_STATUS_WRITE) == TKN_STATUS_WRITE) + { + col_append_str (pinfo->cinfo, COL_INFO, ":STATUS_WRITE"); + } + if ((type & TKN_OPEN_UNLINK) == TKN_OPEN_UNLINK) + { + col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_UNLINK"); + } + if ((type & TKN_SPOT_HERE) == TKN_SPOT_HERE) + { + col_append_str (pinfo->cinfo, COL_INFO, ":SPOT_HERE"); + } + if ((type & TKN_SPOT_THERE) == TKN_SPOT_THERE) + { + col_append_str (pinfo->cinfo, COL_INFO, ":SPOT_THERE"); + } + if ((type & TKN_OPEN_NO_READ) == TKN_OPEN_NO_READ) + { + col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_NO_READ"); + } + if ((type & TKN_OPEN_NO_WRITE) == TKN_OPEN_NO_WRITE) + { + col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_NO_WRITE"); + } + if ((type & TKN_OPEN_NO_UNLINK) == TKN_OPEN_NO_UNLINK) + { + col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_NO_UNLINK"); + } + + proto_item_set_len (item, offset - old_offset); + return offset; +} + +static int +dissect_afstaggedname (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* + codesetTag tn_tag; + unsigned16 tn_length; + byte tn_chars[AFS_NAMEMAX+1]; +*/ + + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + guint32 tn_tag; + guint16 tn_length; + const guint8 *tn_string; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, + ett_fileexp_afstaggedname, &item, "afsTaggedName:"); + } + + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_tn_tag, + &tn_tag); + offset = + dissect_ndr_uint16 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_tn_length, + &tn_length); + if (tn_length < 254) + { + proto_tree_add_item (tree, hf_fileexp_tn_string, tvb, offset, + tn_length, ENC_ASCII); + tn_string = tvb_get_string_enc (pinfo->pool, tvb, offset, 257, ENC_ASCII); + offset += 257; + col_append_fstr (pinfo->cinfo, COL_INFO, " :tn_tag: %s", tn_string); + } + else + { + col_append_fstr (pinfo->cinfo, COL_INFO, + " :FIXME!: Invalid string length of %u", tn_length); + } + + proto_item_set_len (item, offset - old_offset); + return offset; +} + +static int +dissect_afsfidtaggedname (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* + afsFid fid; + afsTaggedName name; +*/ + + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, + ett_fileexp_afsfidtaggedname, &item, "FidTaggedName:"); + } + offset = dissect_afsFid (tvb, offset, pinfo, tree, di, drep); + offset = dissect_afstaggedname (tvb, offset, pinfo, tree, di, drep); + + proto_item_set_len (item, offset - old_offset); + return offset; + +} + +static int +dissect_minvvp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* unsigned32 minvvp_high + unsigned32 minvvp_low +*/ + + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + guint32 minvvp_high, minvvp_low; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, ett_fileexp_minvvp, &item, "minVVp:"); + } + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_minvvp_high, &minvvp_high); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_minvvp_low, + &minvvp_low); + + col_append_fstr (pinfo->cinfo, COL_INFO, " minVVp:%u/%u", minvvp_high, + minvvp_low); + + + proto_item_set_len (item, offset - old_offset); + return offset; +} + + +static int +dissect_afsuuid (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* uuid UUID +*/ +/*HEREN*/ + + e_guid_t uuid1; + + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, ett_fileexp_afsuuid, &item, "afsUUID:"); + } + + offset = dissect_ndr_uuid_t (tvb, offset, pinfo, tree, di, drep, hf_fileexp_afsuuid_uuid, &uuid1); + + col_append_fstr (pinfo->cinfo, COL_INFO, ":%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", uuid1.data1, uuid1.data2, uuid1.data3, uuid1.data4[0], uuid1.data4[1], uuid1.data4[2], uuid1.data4[3], uuid1.data4[4], uuid1.data4[5], uuid1.data4[6], uuid1.data4[7]); + + proto_item_set_len (item, offset - old_offset); + return offset; +} + + +static int +dissect_offsetp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* unsigned32 offsetp_high + unsigned32 offsetp_low +*/ + + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + guint32 offsetp_high, offsetp_low; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, ett_fileexp_offsetp, &item, "minVVp:"); + } + + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_offsetp_high, &offsetp_high); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_offsetp_low, + &offsetp_low); + + col_append_fstr (pinfo->cinfo, COL_INFO, " offsetp:%u/%u", offsetp_high, + offsetp_low); + + proto_item_set_len (item, offset - old_offset); + return offset; +} + + +static int +dissect_returntokenidp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* unsigned32 returntokenidp_high + unsigned32 returntokenidp_low +*/ + + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + guint32 returntokenidp_high, returntokenidp_low; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, ett_fileexp_returntokenidp, &item, "returnTokenIDp:"); + } + + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_returntokenidp_high, &returntokenidp_high); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_returntokenidp_low, + &returntokenidp_low); + + col_append_fstr (pinfo->cinfo, COL_INFO, " returnTokenIDp:%u/%u", returntokenidp_high, + returntokenidp_low); + + proto_item_set_len (item, offset - old_offset); + return offset; +} + + +static int +dissect_volsync (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* + afsHyper VolID; + afsHyper VV; volume's version + unsigned32 VVAge; age, in seconds, of the knowledge that the + given VolVers is current + unsigned32 VVPingAge; age, in seconds, of the last probe from + the callee (the secondary) to the primary + unsigned32 vv_spare1; + unsigned32 vv_spare2; +*/ + + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + guint32 volid_hi, volid_low, vv_hi, vv_low, vvage, vvpingage; + guint32 vvspare1, vvspare2; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, + ett_fileexp_volsync, &item, "AfsVolSync:"); + } + + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_volid_hi, + &volid_hi); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_volid_low, + &volid_low); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_vv_hi, + &vv_hi); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_vv_low, + &vv_low); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_vvage, + &vvage); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_vvpingage, + &vvpingage); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_vvspare1, + &vvspare1); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_vvspare2, + &vvspare2); + + col_append_fstr (pinfo->cinfo, COL_INFO, + " volid_hi:%u volid_low:%u vv_hi:%u vv_low:%u vvage:%u vvpingage:%u vvpspare1:%u vvspare2:%u", + volid_hi, volid_low, vv_hi, vv_low, vvage, vvpingage, + vvspare1, vvspare2); + + proto_item_set_len (item, offset - old_offset); + return offset; + +} + +static int +dissect_afsFlags (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* + unsigned32 flags +*/ + + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + guint32 flags; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, ett_fileexp_afsflags, &item, "AfsFlags:"); + } + + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_flags, + &flags); + + if (flags) + { + col_append_str (pinfo->cinfo, COL_INFO, " Flags="); + if ((flags & AFS_FLAG_RETURNTOKEN) == AFS_FLAG_RETURNTOKEN) + { + col_append_str (pinfo->cinfo, COL_INFO, ":RETURNTOKEN"); + } + if ((flags & AFS_FLAG_TOKENJUMPQUEUE) == AFS_FLAG_TOKENJUMPQUEUE) + { + col_append_str (pinfo->cinfo, COL_INFO, ":TOKENJUMPQUEUE"); + } + if ((flags & AFS_FLAG_SKIPTOKEN) == AFS_FLAG_SKIPTOKEN) + { + col_append_str (pinfo->cinfo, COL_INFO, ":SKIPTOKEN"); + } + if ((flags & AFS_FLAG_NOOPTIMISM) == AFS_FLAG_NOOPTIMISM) + { + col_append_str (pinfo->cinfo, COL_INFO, ":NOOPTIMISM"); + } + if ((flags & AFS_FLAG_TOKENID) == AFS_FLAG_TOKENID) + { + col_append_str (pinfo->cinfo, COL_INFO, ":TOKENID"); + } + if ((flags & AFS_FLAG_RETURNBLOCKER) == AFS_FLAG_RETURNBLOCKER) + { + col_append_str (pinfo->cinfo, COL_INFO, ":RETURNBLOCKER"); + } + if ((flags & AFS_FLAG_ASYNCGRANT) == AFS_FLAG_ASYNCGRANT) + { + col_append_str (pinfo->cinfo, COL_INFO, ":ASYNCGRANT"); + } + if ((flags & AFS_FLAG_NOREVOKE) == AFS_FLAG_NOREVOKE) + { + col_append_str (pinfo->cinfo, COL_INFO, ":NOREVOKE"); + } + if ((flags & AFS_FLAG_MOVE_REESTABLISH) == AFS_FLAG_MOVE_REESTABLISH) + { + col_append_str (pinfo->cinfo, COL_INFO, ":MOVE_REESTABLISH"); + } + if ((flags & AFS_FLAG_SERVER_REESTABLISH) == + AFS_FLAG_SERVER_REESTABLISH) + { + col_append_str (pinfo->cinfo, COL_INFO, ":SERVER_REESTABLISH"); + } + if ((flags & AFS_FLAG_NO_NEW_EPOCH) == AFS_FLAG_NO_NEW_EPOCH) + { + col_append_str (pinfo->cinfo, COL_INFO, ":NO_NEW_EPOCH"); + } + if ((flags & AFS_FLAG_MOVE_SOURCE_OK) == AFS_FLAG_MOVE_SOURCE_OK) + { + col_append_str (pinfo->cinfo, COL_INFO, ":MOVE_SOURCE_OK"); + } + if ((flags & AFS_FLAG_SYNC) == AFS_FLAG_SYNC) + { + col_append_str (pinfo->cinfo, COL_INFO, ":SYNC"); + } + if ((flags & AFS_FLAG_ZERO) == AFS_FLAG_ZERO) + { + col_append_str (pinfo->cinfo, COL_INFO, ":ZERO"); + } + if ((flags & AFS_FLAG_SKIPSTATUS) == AFS_FLAG_SKIPSTATUS) + { + col_append_str (pinfo->cinfo, COL_INFO, ":SKIPSTATUS"); + } + if ((flags & AFS_FLAG_FORCEREVOCATIONS) == AFS_FLAG_FORCEREVOCATIONS) + { + col_append_str (pinfo->cinfo, COL_INFO, ":FORCEREVOCATIONS"); + } + if ((flags & AFS_FLAG_FORCEVOLQUIESCE) == AFS_FLAG_FORCEVOLQUIESCE) + { + col_append_str (pinfo->cinfo, COL_INFO, ":FORCEVOLQUIESCE"); + } + if ((flags & AFS_FLAG_SEC_SERVICE) == AFS_FLAG_SEC_SERVICE) + { + col_append_str (pinfo->cinfo, COL_INFO, ":SEC_SERVICE"); + } + if ((flags & AFS_FLAG_CONTEXT_NEW_ACL_IF) == + AFS_FLAG_CONTEXT_NEW_ACL_IF) + { + col_append_str (pinfo->cinfo, COL_INFO, ":CONTEXT_NEW_ACL_IF"); + } + } + + proto_item_set_len (item, offset - old_offset); + return offset; +} + +static int +dissect_fetchstatus (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* + unsigned32 interfaceVersion; + unsigned32 fileType; + unsigned32 linkCount; + afsHyper length; + afsHyper dataVersion; + unsigned32 author; + unsigned32 owner; + unsigned32 group; + unsigned32 callerAccess; + unsigned32 anonymousAccess; + unsigned32 aclExpirationTime; + unsigned32 mode; + unsigned32 parentVnode; + unsigned32 parentUnique; + afsTimeval modTime; + afsTimeval changeTime; + afsTimeval accessTime; + afsTimeval serverModTime; + afsUUID typeUUID; + afsUUID objectUUID; + unsigned32 deviceNumber; + unsigned32 blocksUsed; + unsigned32 clientSpare1; * client-only attrs * + unsigned32 deviceNumberHighBits; + unsigned32 spare0; + unsigned32 spare1; + unsigned32 spare2; + unsigned32 spare3; + unsigned32 spare4; + unsigned32 spare5; + unsigned32 spare6; +*/ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + guint32 interfaceversion, filetype, linkcount, length_high, length_low; + guint32 dataversion_high, dataversion_low, author, owner, group, calleraccess; + guint32 anonymousaccess, aclexpirationtime, mode, parentvnode, parentunique; + guint32 modtime_sec, modtime_msec, changetime_sec, changetime_msec; + guint32 accesstime_sec, accesstime_msec, servermodtime_msec, servermodtime_sec; + guint32 devicenumber, blocksused, clientspare1, devicenumberhighbits; + guint32 agtypeunique, himaxspare, lomaxspare, pathconfspare, spare4; + guint32 spare5, spare6; + e_guid_t typeuuid, objectuuid; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, + ett_fileexp_fetchstatus, &item, "FetchStatus:"); + } + + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_interfaceversion, &interfaceversion); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_filetype, + &filetype); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_linkcount, + &linkcount); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_length_high, &length_high); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_length_low, + &length_low); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_dataversion_high, &dataversion_high); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_dataversion_low, &dataversion_low); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_author, + &author); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_owner, + &owner); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_group, + &group); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_calleraccess, &calleraccess); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_anonymousaccess, &anonymousaccess); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_aclexpirationtime, &aclexpirationtime); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_mode, + &mode); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_parentvnode, &parentvnode); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_parentunique, &parentunique); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_modtime_sec, &modtime_sec); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_modtime_msec, &modtime_msec); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_changetime_sec, &changetime_sec); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_changetime_msec, &changetime_msec); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_accesstime_sec, &accesstime_sec); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_accesstime_msec, &accesstime_msec); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_servermodtime_sec, &servermodtime_sec); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_servermodtime_msec, &servermodtime_msec); + offset = + dissect_ndr_uuid_t (tvb, offset, pinfo, tree, di, drep, hf_fileexp_typeuuid, + &typeuuid); + offset = + dissect_ndr_uuid_t (tvb, offset, pinfo, tree, di, drep, hf_fileexp_objectuuid, + &objectuuid); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_devicenumber, &devicenumber); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_blocksused, + &blocksused); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_clientspare1, &clientspare1); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_devicenumberhighbits, + &devicenumberhighbits); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_agtypeunique, &agtypeunique); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_himaxspare, + &himaxspare); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_lomaxspare, + &lomaxspare); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_pathconfspare, &pathconfspare); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_spare4, + &spare4); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_spare5, + &spare5); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_spare6, + &spare6); + + col_append_fstr (pinfo->cinfo, COL_INFO, + " :interfacever:%u filetype:%u linkcount:%u length:%u dataver:%u author:%u owner:%u group:%u calleraccess:%u anonaccess:%u aclexpire:%u mode:%u parentvnode:%u parentunique:%u modtimesec:%u changetime_sec:%u accesstime_sec:%u servermodtimesec:%u devicenumber:%u blocksused:%u clientspare:%u devicehighbits:%u agtypeunique:%u", + interfaceversion, filetype, linkcount, length_low, + dataversion_low, author, owner, group, calleraccess, + anonymousaccess, aclexpirationtime, mode, parentvnode, + parentunique, modtime_sec, changetime_sec, + accesstime_sec, servermodtime_sec, devicenumber, + blocksused, clientspare1, devicenumberhighbits, + agtypeunique); + + proto_item_set_len (item, offset - old_offset); + return offset; +} + +static int +dissect_afsReturnDesc (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep) +{ +/* + afsFid fid; * useful hint * + afsHyper tokenID; + afsHyper type; * mask * + unsigned32 flags; * just in case * +*/ + + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + guint32 tokenid_high, tokenid_low, type_high, type_low; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, + ett_fileexp_afsReturnDesc, &item, "afsReturnDesc:"); + } + + offset = dissect_afsFid ( tvb, offset, pinfo, tree, di, drep); + + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_afsreturndesc_tokenid_high, &tokenid_high); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_afsreturndesc_tokenid_low, &tokenid_low); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_afsreturndesc_type_high, &type_high); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_afsreturndesc_type_low, &type_low); + col_append_fstr (pinfo->cinfo, COL_INFO, " TokenId:%u/%u Type:%u/%u", + tokenid_high, tokenid_low, type_high, type_low); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFlags, + NDR_POINTER_REF, "afsFlags: ", -1); + + proto_item_set_len (item, offset - old_offset); + return offset; +} + + + +static int +dissect_afsReturns (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ +/* + long afsReturns_len; + [length_is(afsReturns_len)] afsReturnDesc afsReturns_val[AFS_BULKMAX]; +*/ + + /* this is not really a ucvarray, but with the initial len, we can + cheat and pretend it is */ + if (di->conformant_run) + { + return offset; + } + + offset = + dissect_ndr_ucvarray (tvb, offset, pinfo, tree, di, drep, + dissect_afsReturnDesc); + + return offset; +} + +#if 0 /* not used */ + +static int +dissect_afsbundled_stat (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + dcerpc_info *di, guint8 *drep _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + + if (di->conformant_run) + { + return offset; + } + + if (parent_tree) + { + tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, ett_fileexp_afsbundled_stat, &item, "afsbundled_stat:"); + } + +/* bundled_stat + + afsFid fid; + afsFetchStatus stat; + afsToken token; + error_status_t error; +*/ + +/* + offset = dissect_afsFid(tvb, offset, pinfo, tree, di, drep); +*/ +/* SKIPTOKEN/STAT? + offset = dissect_fetchstatus (tvb, offset, pinfo, tree, di, drep); + offset = dissect_afstoken (tvb, offset, pinfo, tree, di, drep); +*/ +/* This is currently under construction as I figure out the reverse layout of the packet. */ +/* + offset = dissect_afsErrorStatus (tvb, offset, pinfo, tree, di, drep); +*/ + + proto_item_set_len (item, offset - old_offset); + return offset; + +} + +#endif /* not used */ + +static int +dissect_afsBulkStat (tvbuff_t *tvb _U_, int offset, + packet_info *pinfo _U_, proto_tree *tree _U_, + dcerpc_info *di _U_, guint8 *drep _U_) +{ +/* + unsigned32 BulkStat_len; + [length_is (BulkStat_len)] bundled_stat BulkStat_val[AFS_BULKMAX]; +*/ + /* this is not really a ucvarray, but with the initial len, we can + cheat and pretend it is */ + /* + offset = dissect_ndr_ucvarray (tvb, offset, pinfo, tree, drep, + dissect_afsbundled_stat); + */ + + return offset; +} + + + + +static int +fileexp_dissect_removefile_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [in] afsFid *DirFidp, + [in] afsFidTaggedName *Namep, + [in] afsHyper *returnTokenIDp, + [in] afsHyper *minVVp, + [in] unsigned32 Flags, +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afsfidtaggedname, NDR_POINTER_REF, + "afsFidTaggedName: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_returntokenidp, + NDR_POINTER_REF, "afsReturnTokenIDp:", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_minvvp, + NDR_POINTER_REF, "afsMinVVp:", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFlags, + NDR_POINTER_REF, "afsFlags:", -1); + + return offset; +} + +static int +fileexp_dissect_storedata_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + guint32 position_high, position_low, length; + + if (di->conformant_run) + { + return offset; + } + +/* + [in] afsFid *Fidp, + [in] afsStoreStatus *InStatusp, + [in] afsHyper *Position, + [in] signed32 Length, + [in] afsHyper *minVVp, + [in] unsigned32 Flags, + [in] pipe_t *storeStream, +*/ + + /* afsFid */ + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afsstorestatus, NDR_POINTER_REF, + "afsStoreStatus:", -1); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_position_high, &position_high); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_position_low, &position_low); + + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_length, &length); + + col_append_fstr (pinfo->cinfo, COL_INFO, " Position:%u/%u Length:%u", + position_high, position_low, length); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_minvvp, + NDR_POINTER_REF, "MinVVp:", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFlags, + NDR_POINTER_REF, "afsFlags:", -1); + +/* XXX need to decode pipe_t still here */ + + return offset; +} + +static int +fileexp_dissect_gettoken_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [in] afsFid *Fidp, + [in] afsToken *MinTokenp, + [in] afsHyper *minVVp, + [in] unsigned32 Flags, +*/ + + /* afsFid */ + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afstoken, + NDR_POINTER_REF, "afsToken: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_minvvp, + NDR_POINTER_REF, "MinVVp:", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFlags, + NDR_POINTER_REF, "afsFlags:", -1); + + return offset; +} +static int +fileexp_dissect_gettoken_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [out] afsToken *OutTokenp, + [out] afsRecordLock *OutBlockerp, + [out] afsFetchStatus *OutStatusp, + [out] afsVolSync *Syncp +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afstoken, + NDR_POINTER_REF, "afsToken: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afsRecordLock, NDR_POINTER_REF, + "afsRecordLock: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "afsFetchStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_volsync, + NDR_POINTER_REF, "VolSync: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afsErrorStatus, NDR_POINTER_REF, + "afsErrorStatus: ", -1); + + return offset; +} + +static int +fileexp_dissect_lookuproot_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + * [in] afsFid *InFidp, + * [in] afsHyper *minVVp, + * [in] unsigned32 Flags, + */ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_minvvp, + NDR_POINTER_REF, "MinVVp:", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFlags, + NDR_POINTER_REF, "afsFlags:", -1); + + return offset; +} + +static int +fileexp_dissect_fetchdata_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + guint32 position_high, position_low, length; + + if (di->conformant_run) + { + return offset; + } + +/* + [in] afsFid *Fidp, + [in] afsHyper *minVVp, + [in] afsHyper *Position, + [in] signed32 Length, + [in] unsigned32 Flags, +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_minvvp, + NDR_POINTER_REF, "MinVVp:", -1); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_position_high, &position_high); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_position_low, &position_low); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_length, &length); + col_append_fstr (pinfo->cinfo, COL_INFO, " Position:%u/%u Length:%u", + position_high, position_low, length); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFlags, + NDR_POINTER_REF, "afsFlags:", -1); + + return offset; +} + +static int +fileexp_dissect_fetchacl_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + guint32 acltype; + + if (di->conformant_run) + { + return offset; + } + +/* + [in] afsFid *Fidp, + [in] unsigned32 aclType, + [in] afsHyper *minVVp, + [in] unsigned32 Flags, +*/ + + /* afsFid */ + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_acltype, + &acltype); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_minvvp, + NDR_POINTER_REF, "MinVVp:", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFlags, + NDR_POINTER_REF, "afsFlags:", -1); + + if (acltype) + { + col_append_str (pinfo->cinfo, COL_INFO, + " :copy the ACL from specified fid:"); + } + + return offset; +} +static int +fileexp_dissect_fetchstatus_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [in] afsFid *Fidp, + [in] afsHyper *minVVp, + [in] unsigned32 Flags, +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_minvvp, + NDR_POINTER_REF, "MinVVp:", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFlags, + NDR_POINTER_REF, "afsFlags:", -1); + + return offset; +} +static int +fileexp_dissect_storeacl_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + guint32 acltype; + + if (di->conformant_run) + { + return offset; + } + +/* + [in] afsFid *Fidp, + [in] afsACL *AccessListp, + [in] unsigned32 aclType, + [in] afsFid *aclFidp, + [in] afsHyper *minVVp, + [in] unsigned32 Flags, +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsAcl, + NDR_POINTER_REF, "afsAcl: ", -1); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_acltype, + &acltype); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_minvvp, + NDR_POINTER_REF, "MinVVp:", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFlags, + NDR_POINTER_REF, "afsFlags:", -1); + + col_append_fstr (pinfo->cinfo, COL_INFO, " aclType:%u",acltype); + + return offset; +} + +static int +fileexp_dissect_storestatus_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [in] afsFid *Fidp, + [in] afsStoreStatus *InStatusp, + [in] afsHyper *minVVp, + [in] unsigned32 Flags, +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afsstorestatus, NDR_POINTER_REF, + "afsStoreStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_minvvp, + NDR_POINTER_REF, "MinVVp:", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFlags, + NDR_POINTER_REF, "afsFlags:", -1); + + return offset; +} + +static int +fileexp_dissect_createfile_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [in] afsFid *DirFidp, + [in] afsTaggedName *Namep, + [in] afsStoreStatus *InStatusp, + [in] afsHyper *minVVp, + [in] unsigned32 Flags, +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afstaggedname, NDR_POINTER_REF, + "afsTaggedName: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afsstorestatus, NDR_POINTER_REF, + "afsStoreStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_minvvp, + NDR_POINTER_REF, "MinVVp:", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFlags, + NDR_POINTER_REF, "afsFlags:", -1); + + return offset; +} + +static int +fileexp_dissect_rename_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [in] afsFid *OldDirFidp, + [in] afsFidTaggedName *OldNamep, + [in] afsFid *NewDirFidp, + [in] afsFidTaggedName *NewNamep, + [in] afsHyper *returnTokenIDp, + [in] afsHyper *minVVp, + [in] unsigned32 Flags, +*/ + + /* afsFid */ + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afsfidtaggedname, NDR_POINTER_REF, + "afsFidTaggedName: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afstaggedname, NDR_POINTER_REF, + "afsFidTaggedName: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_returntokenidp, NDR_POINTER_REF, + "afsReturnTokenIDp: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_minvvp, NDR_POINTER_REF, + "afsminVVp: ", -1); + + offset = dissect_afsFlags (tvb, offset, pinfo, tree, di, drep); + + return offset; +} + +static int +fileexp_dissect_symlink_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [in] afsFid *DirFidp, + [in] afsTaggedName *Namep, + [in] afsTaggedPath *LinkContentsp, + [in] afsStoreStatus *InStatusp, + [in] afsHyper *minVVp, + [in] unsigned32 Flags, +*/ + + /* afsFid */ + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afstaggedname, NDR_POINTER_REF, + "afsTaggedName: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afsTaggedPath, NDR_POINTER_REF, + "afsTaggedPath: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afsstorestatus, NDR_POINTER_REF, + "afsStoreStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_minvvp, + NDR_POINTER_REF, "MinVVp:", -1); + offset = dissect_afsFlags (tvb, offset, pinfo, tree, di, drep); + + return offset; +} + +static int +fileexp_dissect_readdir_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + guint32 size; + + if (di->conformant_run) + { + return offset; + } + +/* + [in] afsFid *DirFidp, + [in] afsHyper *Offsetp, + [in] unsigned32 Size, + [in] afsHyper *minVVp, + [in] unsigned32 Flags, +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_offsetp, + NDR_POINTER_REF, "Offsetp: ", -1); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_readdir_size, &size); + + col_append_fstr (pinfo->cinfo, COL_INFO, " Size:%u", size); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_minvvp, + NDR_POINTER_REF, "MinVVp:", -1); + offset = dissect_afsFlags ( tvb, offset, pinfo, tree, di, drep); + + return offset; +} + +static int +fileexp_dissect_makedir_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [in] afsFid *DirFidp, + [in] afsTaggedName *Namep, + [in] afsStoreStatus *InStatusp, + [in] afsHyper *minVVp, + [in] unsigned32 Flags, +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afstaggedname, NDR_POINTER_REF, + "afsTaggedName: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afsstorestatus, NDR_POINTER_REF, + "afsStoreStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_minvvp, + NDR_POINTER_REF, "MinVVp:", -1); + offset = dissect_afsFlags ( tvb, offset, pinfo, tree, di, drep); + + return offset; +} + +static int +fileexp_dissect_removedir_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + guint32 returntokenidp_high, returntokenidp_low; + + if (di->conformant_run) + { + return offset; + } + +/* + [in] afsFid *DirFidp, + [in] afsFidTaggedName *Namep, + [in] afsHyper *returnTokenIDp, + [in] afsHyper *minVVp, + [in] unsigned32 Flags, +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afsfidtaggedname, NDR_POINTER_REF, + "afsFidTaggedName: ", -1); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_returntokenidp_high, &returntokenidp_high); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_returntokenidp_low, &returntokenidp_low); + + col_append_fstr (pinfo->cinfo, COL_INFO, " returnTokenIDp:%u/%u", + returntokenidp_high, returntokenidp_low); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_minvvp, + NDR_POINTER_REF, "MinVVp:", -1); + offset = dissect_afsFlags ( tvb, offset, pinfo, tree, di, drep ); + + return offset; +} + +static int +fileexp_dissect_lookup_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [in] afsFid *DirFidp, + [in] afsTaggedName *Namep, + [in] afsHyper *minVVp, + [in] unsigned32 Flags, +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afstaggedname, NDR_POINTER_REF, + "afsTaggedName: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_minvvp, + NDR_POINTER_REF, "MinVVp:", -1); + offset = dissect_afsFlags ( tvb, offset, pinfo, tree, di, drep); + + return offset; +} +static int +fileexp_dissect_lookup_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [out] afsFid *OutFidp, + [out] afsFetchStatus *OutFidStatusp, + [out] afsFetchStatus *OutDirStatusp, + [out] afsToken *OutTokenp, + [out] afsVolSync *Syncp +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afstoken, + NDR_POINTER_REF, "afsToken: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_volsync, + NDR_POINTER_REF, "VolSync: ", -1); + MACRO_ST_CLEAR ("Lookup reply"); + + return offset; + +} + +static int +fileexp_dissect_makemountpoint_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + guint16 type; + + if (di->conformant_run) + { + return offset; + } + + +/* + [in] afsFid *DirFidp, + [in] afsTaggedName *Namep, + [in] afsTaggedName *cellNamep, + [in] afsFStype Type, + [in] afsTaggedName *volumeNamep, + [in] afsStoreStatus *InStatusp, + [in] afsHyper *minVVp, + [in] unsigned32 Flags, +*/ + + /* afsFid */ + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afstaggedname, NDR_POINTER_REF, + "afsTaggedName: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afstaggedname, NDR_POINTER_REF, + "afsTaggedName: ", -1); + offset = + dissect_ndr_uint16 (tvb, offset, pinfo, tree, di, drep, hf_fileexp_fstype, + &type); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afstaggedname, NDR_POINTER_REF, + "afsTaggedName: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afsstorestatus, NDR_POINTER_REF, + "afsStoreStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_minvvp, + NDR_POINTER_REF, "MinVVp:", -1); + + offset = dissect_afsFlags (tvb, offset, pinfo, tree, di, drep); + + col_append_fstr (pinfo->cinfo, COL_INFO, " Type:%u", type); + + return offset; + +} + +static int +fileexp_dissect_setcontext_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + guint32 epochtime, clientsizesattrs, parm7; + + if (di->conformant_run) + { + return offset; + } + +/* + [in] unsigned32 epochTime, + [in] afsNetData *callbackAddr, + [in] unsigned32 Flags, + [in] afsUUID *secObjectID, + [in] unsigned32 clientSizesAttrs, + [in] unsigned32 parm7 +*/ + + offset = + dissect_dcerpc_time_t (tvb, offset, pinfo, tree, drep, + hf_fileexp_setcontext_rqst_epochtime, &epochtime); + + offset = dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsNetData, + NDR_POINTER_REF, "afsNetData:", -1); + + offset = dissect_afsFlags (tvb, offset, pinfo, tree, di, drep); + + col_append_str (pinfo->cinfo, COL_INFO, " setObjectID"); + + offset = dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsuuid, + NDR_POINTER_REF, "afsUUID:", -1); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_setcontext_rqst_clientsizesattrs, + &clientsizesattrs); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_setcontext_rqst_parm7, &parm7); + + col_append_fstr (pinfo->cinfo, COL_INFO, " epochTime:%u clientSizesAttrs:%u parm7:%u", epochtime, clientsizesattrs, parm7); + + return offset; +} + +static int +fileexp_dissect_setcontext_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ +/* nothing but error code */ + + if (di->conformant_run) + { + return offset; + } + + MACRO_ST_CLEAR ("SetContext reply"); + return offset; +} + +static int + fileexp_dissect_lookuproot_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + + /* + * [out] afsFid *OutFidp, + * [out] afsFetchStatus *OutFidStatusp, + * [out] afsToken *OutTokenp, + * [out] afsVolSync *Syncp + */ + /* afsFid */ + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afstoken, + NDR_POINTER_REF, "afsToken: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_volsync, + NDR_POINTER_REF, "VolSync: ", -1); + MACRO_ST_CLEAR ("LookupRoot reply"); + return offset; +} + +static int + fileexp_dissect_fetchdata_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + guint32 pipe_t_size; + + if (di->conformant_run) + { + return offset; + } + +/* + [out] afsFetchStatus *OutStatusp, + [out] afsToken *OutTokenp, + [out] afsVolSync *Syncp, + [out] pipe_t *fetchStream +*/ +/* The SkipToken/SkipStatus flags are always used in every fetchdata request I have seen. +There is also not sign of the afsVolSync structure... Just size, and data string... aka pipe_t */ + + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_fetchdata_pipe_t_size, &pipe_t_size); + + return offset; +} + +static int + fileexp_dissect_fetchacl_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [out] afsACL *AccessListp, + [out] afsFetchStatus *OutStatusp, + [out] afsVolSync *Syncp +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsAcl, + NDR_POINTER_REF, "afsAcl: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_volsync, + NDR_POINTER_REF, "VolSync: ", -1); + MACRO_ST_CLEAR ("FetchAcl reply"); + return offset; +} + +static int + fileexp_dissect_fetchstatus_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [out] afsFetchStatus *OutStatusp, + [out] afsToken *OutTokenp, + [out] afsVolSync *Syncp +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afstoken, + NDR_POINTER_REF, "afsToken: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_volsync, + NDR_POINTER_REF, "VolSync: ", -1); + MACRO_ST_CLEAR ("FetchStatus reply"); + return offset; +} + +static int + fileexp_dissect_storedata_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [out] afsFetchStatus *OutStatusp, + [out] afsVolSync *Syncp +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_volsync, + NDR_POINTER_REF, "VolSync: ", -1); + MACRO_ST_CLEAR ("StoreData reply"); + return offset; +} + +static int + fileexp_dissect_storeacl_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [out] afsFetchStatus *OutStatusp, + [out] afsVolSync *Syncp +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_volsync, + NDR_POINTER_REF, "VolSync: ", -1); + MACRO_ST_CLEAR ("StoreAcl reply"); + return offset; +} + +static int + fileexp_dissect_storestatus_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [out] afsFetchStatus *OutStatusp, + [out] afsVolSync *Syncp +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_volsync, + NDR_POINTER_REF, "VolSync: ", -1); + MACRO_ST_CLEAR ("StoreStatus reply"); + return offset; +} + +static int + fileexp_dissect_removefile_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [out] afsFetchStatus *OutDirStatusp, + [out] afsFetchStatus *OutFileStatusp, + [out] afsFid *OutFileFidp, + [out] afsVolSync *Syncp +*/ + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_volsync, + NDR_POINTER_REF, "VolSync: ", -1); + MACRO_ST_CLEAR ("RemoveFile reply"); + return offset; +} + +static int + fileexp_dissect_createfile_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [out] afsFid *OutFidp, + [out] afsFetchStatus *OutFidStatusp, + [out] afsFetchStatus *OutDirStatusp, + [out] afsToken *OutTokenp, + [out] afsVolSync *Syncp +*/ + + /* afsFid */ + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afstoken, + NDR_POINTER_REF, "afsToken: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_volsync, + NDR_POINTER_REF, "VolSync: ", -1); + MACRO_ST_CLEAR ("CreateFile reply"); + + return offset; +} +static int + fileexp_dissect_rename_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [out] afsFetchStatus *OutOldDirStatusp, + [out] afsFetchStatus *OutNewDirStatusp, + [out] afsFid *OutOldFileFidp, + [out] afsFetchStatus *OutOldFileStatusp, + [out] afsFid *OutNewFileFidp, + [out] afsFetchStatus *OutNewFileStatusp, + [out] afsVolSync *Syncp +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_volsync, + NDR_POINTER_REF, "VolSync: ", -1); + MACRO_ST_CLEAR ("Rename reply"); + return offset; +} + +static int + fileexp_dissect_symlink_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [out] afsFid *OutFidp, + [out] afsFetchStatus *OutFidStatusp, + [out] afsFetchStatus *OutDirStatusp, + [out] afsToken *OutTokenp, + [out] afsVolSync *Syncp +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afstoken, + NDR_POINTER_REF, "afsToken: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_volsync, + NDR_POINTER_REF, "VolSync: ", -1); + MACRO_ST_CLEAR ("Symlink reply"); + + return offset; +} + +static int + fileexp_dissect_hardlink_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [out] afsFetchStatus *OutFidStatusp, + [out] afsFetchStatus *OutDirStatusp, + [out] afsVolSync *Syncp +*/ + + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_volsync, + NDR_POINTER_REF, "VolSync: ", -1); + MACRO_ST_CLEAR ("Hardlink reply"); + + return offset; +} +static int + fileexp_dissect_hardlink_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [in] afsFid *DirFidp, + [in] afsTaggedName *Namep, + [in] afsFid *ExistingFidp, + [in] afsHyper *minVVp, + [in] unsigned32 Flags, +*/ + + /* afsFid */ + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afstaggedname, NDR_POINTER_REF, + "afsTaggedName: ", -1); + /* afsFid */ + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_minvvp, + NDR_POINTER_REF, "MinVVp:", -1); + + offset = dissect_afsFlags ( tvb, offset, pinfo, tree, di, drep); + + return offset; +} + +static int + fileexp_dissect_makedir_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [out] afsFid *OutFidp, + [out] afsFetchStatus *OutFidStatusp, + [out] afsFetchStatus *OutDirStatusp, + [out] afsToken *OutTokenp, + [out] afsVolSync *Syncp +*/ + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afstoken, + NDR_POINTER_REF, "afsToken: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_volsync, + NDR_POINTER_REF, "VolSync: ", -1); + + MACRO_ST_CLEAR ("MakeDir reply"); + + return offset; +} + +static int + fileexp_dissect_removedir_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [out] afsFetchStatus *OutDirStatusp, + [out] afsFid *OutFidp, + [out] afsFetchStatus *OutDelStatusp, + [out] afsVolSync *Syncp +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_volsync, + NDR_POINTER_REF, "VolSync: ", -1); + MACRO_ST_CLEAR ("RemoveDir reply"); + + return offset; + +} + +static int + fileexp_dissect_readdir_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + guint32 nextoffsetp_high, nextoffsetp_low; + + if (di->conformant_run) + { + return offset; + } + +/* + [out] afsHyper *NextOffsetp, + [out] afsFetchStatus *OutDirStatusp, + [out] afsToken *OutTokenp, + [out] afsVolSync *Syncp, + [out] pipe_t *dirStream +*/ + + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_nextoffsetp_high, &nextoffsetp_high); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_nextoffsetp_low, &nextoffsetp_low); + + col_append_fstr (pinfo->cinfo, COL_INFO, " NextOffsetp:%u/%u", + nextoffsetp_high, nextoffsetp_low); + + /* all packets seem to have SKIPTOKEN/SKIPSTATUS sent, and thus these structures are missing on calls holding tokens. */ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_volsync, + NDR_POINTER_REF, "VolSync: ", -1); + /* XXX need to add pipe_t here, once figured out. */ + + return offset; +} + +static int + fileexp_dissect_releasetokens_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + + /* no out */ + MACRO_ST_CLEAR ("ReleaseTokens reply"); + return offset; +} + +static int + fileexp_dissect_releasetokens_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + + +/* + [in] afsReturns *Tokens_Arrayp, + [in] unsigned32 Flags +*/ + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsReturns, + NDR_POINTER_REF, "afsReturns: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFlags, + NDR_POINTER_REF, "afsFlags: ", -1); + return offset; +} + +static int + fileexp_dissect_gettime_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + guint32 secondsp, usecondsp, syncdistance, syncdispersion; + + if (di->conformant_run) + { + return offset; + } + +/* + [out] unsigned32 *Secondsp, + [out] unsigned32 *USecondsp, + [out] unsigned32 *SyncDistance, + [out] unsigned32 *SyncDispersion +*/ + + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_gettime_secondsp, &secondsp); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_gettime_usecondsp, &usecondsp); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_gettime_syncdistance, &syncdistance); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_gettime_syncdispersion, &syncdispersion); + + col_append_fstr (pinfo->cinfo, COL_INFO, " Secondsp:%u Usecondsp:%u SyncDistance:/%u SyncDispersion:%u", secondsp, usecondsp, syncdistance, syncdispersion); + + MACRO_ST_CLEAR ("GetTime reply"); + + return offset; + +} + +static int + fileexp_dissect_gettime_rqst (tvbuff_t *tvb _U_, int offset, + packet_info *pinfo _U_, proto_tree *tree _U_, + dcerpc_info *di _U_, guint8 *drep _U_) +{ + /* nothing */ + + return offset; +} + +static int + fileexp_dissect_processquota_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [in,out] afsQuota *quotaListp, + [out] afsFetchStatus *OutStatusp, + [out] afsVolSync *Syncp +*/ + + /* XXX need afsQuota */ + offset += 92; + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_volsync, + NDR_POINTER_REF, "VolSync: ", -1); + MACRO_ST_CLEAR ("ProcessQuota reply"); + + return offset; +} + +static int + fileexp_dissect_processquota_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [in] afsFid *Fidp, + [in] afsHyper *minVVp, + [in] unsigned32 Flags, + [in,out] afsQuota *quotaListp, +*/ + + /* afsFid */ + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_minvvp, + NDR_POINTER_REF, "MinVVp:", -1); + offset = dissect_afsFlags ( tvb, offset, pinfo, tree, di, drep); + + /* XXX need to figure out afsQuota here */ + return offset; +} + +static int + fileexp_dissect_getserverinterfaces_rqst (tvbuff_t *tvb _U_, int offset, + packet_info *pinfo _U_, proto_tree *tree _U_, + dcerpc_info *di _U_, guint8 *drep _U_) +{ + +/* + [in, out] dfs_interfaceList *serverInterfacesP +*/ + /* XXX figure out dfs_interfacelist */ + return offset; +} + +static int + fileexp_dissect_getserverinterfaces_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [in, out] dfs_interfaceList *serverInterfacesP +*/ + /* XXX figure out dfs_interfacelist */ + + MACRO_ST_CLEAR ("GetServerInterfaces reply"); + return offset; +} + +static int + fileexp_dissect_setparams_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [in] unsigned32 Flags, + [in, out] afsConnParams *paramsP +*/ + offset = dissect_afsFlags ( tvb, offset, pinfo, tree, di, drep); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afsConnParams, NDR_POINTER_REF, + "afsConnParams:", -1); + return offset; +} + +static int + fileexp_dissect_setparams_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [in, out] afsConnParams *paramsP +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, + dissect_afsConnParams, NDR_POINTER_REF, + "afsConnParams:", -1); + MACRO_ST_CLEAR ("SetParams reply"); + return offset; +} + +static int + fileexp_dissect_makemountpoint_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [out] afsFid *OutFidp, + [out] afsFetchStatus *OutFidStatusp, + [out] afsFetchStatus *OutDirStatusp, + [out] afsVolSync *Syncp +*/ + /* afsFid */ + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_volsync, + NDR_POINTER_REF, "VolSync: ", -1); + MACRO_ST_CLEAR ("MakeMountPoint reply"); + return offset; +} + +static int + fileexp_dissect_getstatistics_rqst (tvbuff_t *tvb _U_, int offset, + packet_info *pinfo _U_, proto_tree *tree _U_, + dcerpc_info *di, guint8 *drep _U_) +{ + if (di->conformant_run) + { + return offset; + } + + /* nothing for request */ + return offset; +} + +static int + fileexp_dissect_getstatistics_resp (tvbuff_t *tvb _U_, int offset, + packet_info *pinfo _U_, proto_tree *tree _U_, + dcerpc_info *di _U_, guint8 *drep _U_) +{ + +/* + [out] afsStatistics *Statisticsp +*/ + /* XXX figure out afsStatistics */ + return offset; +} + +static int + fileexp_dissect_bulkfetchvv_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + guint32 cellidp_high, cellidp_low, numvols, spare1, spare2; + + if (di->conformant_run) + { + return offset; + } + +/* + [in] afsHyper *cellIdp, + [in] afsBulkVolIDs *VolIDsp, + [in] unsigned32 NumVols, + [in] unsigned32 Flags, + [in] unsigned32 spare1, + [in] unsigned32 spare2, +*/ + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_cellidp_high, &cellidp_high); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_cellidp_low, &cellidp_low); + + col_append_fstr (pinfo->cinfo, COL_INFO, " CellIDp:%u/%u", cellidp_high, + cellidp_low); + + /* XXX figure out the afsBulkVolIDS */ + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_bulkfetchvv_numvols, &numvols); + + offset = dissect_afsFlags (tvb, offset, pinfo, tree, di, drep); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_bulkfetchvv_spare1, &spare1); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_bulkfetchvv_spare2, &spare2); + return offset; +} + +static int + fileexp_dissect_bulkfetchvv_resp (tvbuff_t *tvb _U_, int offset, + packet_info *pinfo _U_, proto_tree *tree _U_, + dcerpc_info *di _U_, guint8 *drep _U_) +{ +/* + [out] afsBulkVVs *VolVVsp, + [out] unsigned32 *spare4 +*/ + /* XXX need to figure out afsBulkVVs ; */ + return offset; +} + +static int + fileexp_dissect_bulkkeepalive_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + guint32 spare4; + + if (di->conformant_run) + { + return offset; + } + +/* + [out] unsigned32 *spare4 +*/ + + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_bulkkeepalive_spare4, &spare4); + MACRO_ST_CLEAR ("BulkKeepAlive reply"); + return offset; +} + +static int + fileexp_dissect_bulkkeepalive_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + guint32 numexecfids, spare1, spare2; + + if (di->conformant_run) + { + return offset; + } + +/* + [in] afsBulkFEX *KAFEXp, + [in] unsigned32 numExecFids, + [in] unsigned32 Flags, + [in] unsigned32 spare1, + [in] unsigned32 spare2, +*/ + /* XXX figure out afsBulkFEX */ + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_bulkkeepalive_numexecfids, &numexecfids); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFlags, + NDR_POINTER_REF, "afsFlags:", -1); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_bulkkeepalive_spare1, &spare1); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_bulkkeepalive_spare2, &spare2); + return offset; +} + +static int + fileexp_dissect_bulkfetchstatus_rqst (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + guint32 offsetp_high, offsetp_low, size; + + if (di->conformant_run) + { + return offset; + } + + +/* + [in] afsFid *DirFidp, + [in] afsHyper *Offsetp, + [in] unsigned32 Size, + [in] afsHyper *minVVp, + [in] unsigned32 Flags, +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsFid, + NDR_POINTER_REF, "afsFid: ", -1); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_offsetp_high, &offsetp_high); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_offsetp_low, &offsetp_low); + + col_append_fstr (pinfo->cinfo, COL_INFO, " Offsetp:%u/%u", offsetp_high, + offsetp_low); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_bulkfetchstatus_size, &size); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_minvvp, + NDR_POINTER_REF, "MinVVp:", -1); + offset = dissect_afsFlags (tvb, offset, pinfo, tree, di, drep); + + return offset; +} + +static int + fileexp_dissect_bulkfetchstatus_resp (tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + if (di->conformant_run) + { + return offset; + } + +/* + [out] BulkStat *bulkstats, + [out] afsHyper *NextOffsetp, + [out] afsFetchStatus *OutDirStatusp, + [out] afsToken *OutTokenp, + [out] afsVolSync *Syncp, + [out] pipe_t *dirStream +*/ + + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afsBulkStat, + NDR_POINTER_REF, "BulkStat: ", -1); +/* Under construction. The packet seems to have the pipe_t before the rest of the data listed in idl. */ + +#if 0 + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_nextoffsetp_high, &nextoffsetp_high); + offset = + dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_fileexp_nextoffsetp_low, &nextoffsetp_low); + + col_append_fstr (pinfo->cinfo, COL_INFO, " NextOffsetp:%u/%u", + nextoffsetp_high, nextoffsetp_low); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_fetchstatus, + NDR_POINTER_REF, "FetchStatus: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_afstoken, + NDR_POINTER_REF, "afsToken: ", -1); + offset = + dissect_ndr_pointer (tvb, offset, pinfo, tree, di, drep, dissect_volsync, + NDR_POINTER_REF, "VolSync: ", -1); +#endif + /* XXX figure out pipe_t */ + + return offset; +} + +static dcerpc_sub_dissector fileexp_dissectors[] = { + { 0, "SetContext", fileexp_dissect_setcontext_rqst, fileexp_dissect_setcontext_resp} , + { 1, "LookupRoot", fileexp_dissect_lookuproot_rqst, fileexp_dissect_lookuproot_resp} , + { 2, "FetchData", fileexp_dissect_fetchdata_rqst, fileexp_dissect_fetchdata_resp} , + { 3, "FetchAcl", fileexp_dissect_fetchacl_rqst, fileexp_dissect_fetchacl_resp} , + { 4, "FetchStatus", fileexp_dissect_fetchstatus_rqst, fileexp_dissect_fetchstatus_resp} , + { 5, "StoreData", fileexp_dissect_storedata_rqst, fileexp_dissect_storedata_resp} , + { 6, "StoreAcl", fileexp_dissect_storeacl_rqst, fileexp_dissect_storeacl_resp} , + { 7, "StoreStatus", fileexp_dissect_storestatus_rqst, fileexp_dissect_storestatus_resp} , + { 8, "RemoveFile", fileexp_dissect_removefile_rqst, fileexp_dissect_removefile_resp} , + { 9, "CreateFile", fileexp_dissect_createfile_rqst, fileexp_dissect_createfile_resp} , + { 10, "Rename", fileexp_dissect_rename_rqst, fileexp_dissect_rename_resp} , + { 11, "Symlink", fileexp_dissect_symlink_rqst, fileexp_dissect_symlink_resp} , + { 12, "HardLink", fileexp_dissect_hardlink_rqst, fileexp_dissect_hardlink_resp} , + { 13, "MakeDir", fileexp_dissect_makedir_rqst, fileexp_dissect_makedir_resp} , + { 14, "RemoveDir", fileexp_dissect_removedir_rqst, fileexp_dissect_removedir_resp} , + { 15, "Readdir", fileexp_dissect_readdir_rqst, fileexp_dissect_readdir_resp} , + { 16, "Lookup", fileexp_dissect_lookup_rqst, fileexp_dissect_lookup_resp} , + { 17, "GetToken", fileexp_dissect_gettoken_rqst, fileexp_dissect_gettoken_resp} , + { 18, "ReleaseTokens", fileexp_dissect_releasetokens_rqst, fileexp_dissect_releasetokens_resp} , + { 19, "GetTime", fileexp_dissect_gettime_rqst, fileexp_dissect_gettime_resp} , + { 20, "MakeMountPoint", fileexp_dissect_makemountpoint_rqst, fileexp_dissect_makemountpoint_resp} , + { 21, "GetStatistics", fileexp_dissect_getstatistics_rqst, fileexp_dissect_getstatistics_resp} , + { 22, "BulkFetchVV", fileexp_dissect_bulkfetchvv_rqst, fileexp_dissect_bulkfetchvv_resp} , + { 23, "BulkKeepAlive", fileexp_dissect_bulkkeepalive_rqst, fileexp_dissect_bulkkeepalive_resp} , + { 24, "ProcessQuota", fileexp_dissect_processquota_rqst, fileexp_dissect_processquota_resp} , + { 25, "GetServerInterfaces", fileexp_dissect_getserverinterfaces_rqst, fileexp_dissect_getserverinterfaces_resp} , + { 26, "SetParams", fileexp_dissect_setparams_rqst, fileexp_dissect_setparams_resp} , + { 27, "BulkFetchStatus", fileexp_dissect_bulkfetchstatus_rqst, fileexp_dissect_bulkfetchstatus_resp} , + { 0, NULL, NULL, NULL} + , +}; + +void +proto_register_fileexp (void) +{ + + static hf_register_info hf[] = { + { &hf_error_st, + { "AFS4Int Error Status Code", "fileexp.st", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_flags, + { "DFS Flags", "fileexp.flags", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_tn_string, + { "String", "fileexp.string", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_opnum, + { "Operation", "fileexp.opnum", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_setcontext_rqst_epochtime, + { "EpochTime", "fileexp.setcontext_rqst_epochtime", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_setcontext_rqst_clientsizesattrs, + { "ClientSizeAttrs", "fileexp.setcontext_clientsizesattrs", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_setcontext_rqst_parm7, + { "Parm7", "fileexp.setcontext.parm7", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_acl_len, + { "Acl Length", "fileexp.acl_len", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_acltype, + { "Acl type", "fileexp.acltype", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_minvvp_high, + { "minVVp high", "fileexp.minvvp_high", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_minvvp_low, + { "minVVp low", "fileexp.minvvp_low", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_accesstime_msec, + { "Access time (msec)", "fileexp.accesstime_msec", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_accesstime_sec, + { "Access time (sec)", "fileexp.accesstime_sec", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_aclexpirationtime, + { "Acl expiration time", "fileexp.aclexpirationtime", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_agtypeunique, + { "agtypeunique", "fileexp.agtypeunique", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_anonymousaccess, + { "Anonymous Access", "fileexp.anonymousaccess", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_author, + { "Author", "fileexp.author", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_blocksused, + { "Blocks used", "fileexp.blocksused", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_calleraccess, + { "Caller access", "fileexp.calleraccess", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_changetime_msec, + { "Change time (msec)", "fileexp.changetime_msec", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_changetime_sec, + { "Change time (sec)", "fileexp.changetime_sec", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_clientspare1, + { "Client spare1", "fileexp.clientspare1", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_dataversion_high, + { "Data version (high)", "fileexp.dataversion_high", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_dataversion_low, + { "Data version (low)", "fileexp.dataversion_low", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_devicenumber, + { "Device number", "fileexp.devicenumber", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_devicenumberhighbits, + { "Device number high bits", "fileexp.devicenumberhighbits", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_filetype, + { "File type", "fileexp.filetype", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_group, + { "Group", "fileexp.group", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_himaxspare, + { "Hi max spare", "fileexp.himaxspare", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_interfaceversion, + { "Interface version", "fileexp.interfaceversion", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_length_high, + { "Length high", "fileexp.length_high", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_length_low, + { "Length low", "fileexp.length_low", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_linkcount, + { "Link count", "fileexp.linkcount", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_lomaxspare, + { "Lo max spare", "fileexp.lomaxspare", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_mode, + { "Mode", "fileexp.mode", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_modtime_msec, + { "Modify time (msec)", "fileexp.modtime_msec", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_modtime_sec, + { "Modify time (sec)", "fileexp.modtime_sec", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_objectuuid, + { "Object uuid", "fileexp.objectuuid", + FT_GUID, BASE_NONE, NULL, 0x0, + "UUID", HFILL} + }, + { &hf_fileexp_owner, + { "Owner", "fileexp.owner", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_parentunique, + { "Parent unique", "fileexp.parentunique", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_parentvnode, + { "Parent vnode", "fileexp.parentvnode", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_pathconfspare, + { "Path conf spare", "fileexp.pathconfspare", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_servermodtime_msec, + { "Server modify time (msec)", "fileexp.servermodtime_msec", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_servermodtime_sec, + { "Server modify time (sec)", "fileexp.servermodtime_sec", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_spare4, + { "Spare4", "fileexp.spare4", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_spare5, + { "Spare5", "fileexp.spare5", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_spare6, + { "Spare6", "fileexp.spare6", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_typeuuid, + { "Type uuid", "fileexp.typeuuid", + FT_GUID, BASE_NONE, NULL, 0x0, + "UUID", HFILL} + }, + { &hf_fileexp_volid_hi, + { "Vol id hi", "fileexp.volid_hi", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_volid_low, + { "Vol id low", "fileexp.volid_low", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_vvage, + { "Vvage", "fileexp.vvage", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_vv_hi, + { "Vv hi", "fileexp.vv_hi", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_vv_low, + { "Vv low", "fileexp.vv_low", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_vvpingage, + { "Vv pingage", "fileexp.vvpingage", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_vvspare1, + { "Vv spare1", "fileexp.vvspare1", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_vvspare2, + { "Vv spare2", "fileexp.vvspare2", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_beginrange, + { "Begin range", "fileexp.beginrange", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_beginrangeext, + { "Begin range ext", "fileexp.beginrangeext", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_endrange, + { "End range", "fileexp.endrange", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_endrangeext, + { "End range ext", "fileexp.endrangeext", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_expirationtime, + { "Expiration time", "fileexp.expirationtime", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_tokenid_hi, + { "Tokenid hi", "fileexp.tokenid_hi", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_tokenid_low, + { "Tokenid low", "fileexp.tokenid_low", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_type_hi, + { "Type hi", "fileexp.type_hi", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_type_low, + { "Type low", "fileexp.type_low", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_tn_length, + { "Tn length", "fileexp.tn_length", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_tn_tag, + { "Tn tag", "fileexp.tn_tag", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_accesstime_sec, + { "Store status access time (sec)", "fileexp.storestatus_accesstime_sec", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_accesstime_usec, + { "Store status access time (usec)", "fileexp.storestatus_accesstime_usec", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_changetime_sec, + { "Store status change time (sec)", "fileexp.storestatus_changetime_sec", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_changetime_usec, + { "Store status change time (usec)", "fileexp.storestatus_changetime_usec", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_clientspare1, + { "Store Status client spare1", "fileexp.storestatus_clientspare1", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_cmask, + { "Store status cmask", "fileexp.storestatus_cmask", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_devicenumber, + { "Store status device number", "fileexp.storestatus_devicenumber", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_devicenumberhighbits, + { "Store status device number high bits", "fileexp.storestatus_devicenumberhighbits", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_devicetype, + { "Store status device type", "fileexp.storestatus_devicetype", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_group, + { "Store status group", "fileexp.storestatus_group", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_length_high, + { "Store status length high", "fileexp.storestatus_length_high", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_length_low, + { "Store status length low", "fileexp.storestatus_length_low", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_mask, + { "Store status mask", "fileexp.storestatus_mask", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_mode, + { "Store status mode", "fileexp.storestatus_mode", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_modtime_sec, + { "Store status modify time (sec)", "fileexp.storestatus_modtime_sec", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_modtime_usec, + { "Store status modify time (usec)", "fileexp.storestatus_modtime_usec", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_owner, + { "Store status owner", "fileexp.storestatus_owner", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_spare1, + { "Store status spare1", "fileexp.storestatus_spare1", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_spare2, + { "Store status spare2", "fileexp.storestatus_spare2", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_spare3, + { "Store status spare3", "fileexp.storestatus_spare3", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_spare4, + { "Store status spare4", "fileexp.storestatus_spare4", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_spare5, + { "Store status spare5", "fileexp.storestatus_spare5", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_spare6, + { "Store status spare6", "fileexp.storestatus_spare6", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_trunc_high, + { "Store status trunc high", "fileexp.storestatus_trunc_high", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_trunc_low, + { "Store status trunc low", "fileexp.storestatus_trunc_low", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_storestatus_typeuuid, + { "Store status type uuid", "fileexp.storestatus_typeuuid", + FT_GUID, BASE_NONE, NULL, 0x0, + "UUID", HFILL} + }, + { &hf_fileexp_l_end_pos, + { "l_end_pos", "fileexp.l_end_pos", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_l_end_pos_ext, + { "l_end_pos_ext", "fileexp.l_end_pos_ext", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_l_fstype, + { "l_fstype", "fileexp.l_fstype", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_l_pid, + { "l_pid", "fileexp.l_pid", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_l_start_pos, + { "l_start_pos", "fileexp.l_start_pos", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_l_start_pos_ext, + { "l_start_pos_ext", "fileexp.l_start_pos_ext", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_l_sysid, + { "l_sysid", "fileexp.l_sysid", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_l_type, + { "l_type", "fileexp.l_type", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_l_whence, + { "l_whence", "fileexp.l_whence", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_afsconnparams_mask, + { "afs conn params mask", "fileexp.afs_connparams_mask", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_afsconnparams_values, + { "afs conn params values", "fileexp.afs_connparams_values", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_afsFid_cell_high, + { "Cell High", "fileexp.afsFid.cell_high", + FT_UINT32, BASE_HEX, NULL, 0x0, + "afsFid Cell High", HFILL} + }, + { &hf_fileexp_afsFid_cell_low, + { "Cell Low", "fileexp.afsFid.cell_low", + FT_UINT32, BASE_HEX, NULL, 0x0, + "afsFid Cell Low", HFILL} + }, + { &hf_fileexp_afsFid_volume_high, + { "Volume High", "fileexp.afsFid.volume_high", + FT_UINT32, BASE_HEX, NULL, 0x0, + "afsFid Volume High", HFILL} + }, + { &hf_fileexp_afsFid_volume_low, + { "Volume Low", "fileexp.afsFid.volume_low", + FT_UINT32, BASE_HEX, NULL, 0x0, + "afsFid Volume Low", HFILL} + }, + { &hf_fileexp_afsFid_Vnode, + { "Vnode", "fileexp.afsFid.Vnode", + FT_UINT32, BASE_HEX, NULL, 0x0, + "afsFid Vnode", HFILL} + }, + { &hf_fileexp_afsFid_Unique, + { "Unique", "fileexp.afsFid.Unique", + FT_UINT32, BASE_HEX, NULL, 0x0, + "afsFid Unique", HFILL} + }, + { &hf_fileexp_afsNetAddr_type, + { "Type", "fileexp.afsNetAddr.type", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_afsNetAddr_data, + { "IP Data", "fileexp.afsNetAddr.data", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_position_high, + { "Position High", "fileexp.position_high", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_position_low, + { "Position Low", "fileexp.position_low", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_afsreturndesc_tokenid_high, + { "Token id High", "fileexp.afsreturndesc_tokenid_high", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_afsreturndesc_tokenid_low, + { "Token id low", "fileexp.afsreturndesc_tokenid_low", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_afsreturndesc_type_high, + { "Type high", "fileexp.type_high", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_afsreturndesc_type_low, + { "Type low", "fileexp.type_low", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_offsetp_high, + { "offset high", "fileexp.offset_high", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_offsetp_low, + { "offset high", "fileexp.offset_high", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_nextoffsetp_high, + { "next offset high", "fileexp.nextoffset_high", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_nextoffsetp_low, + { "next offset low", "fileexp.nextoffset_low", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_returntokenidp_high, + { "return token idp high", "fileexp.returntokenidp_high", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_returntokenidp_low, + { "return token idp low", "fileexp.returntokenidp_low", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_cellidp_high, + { "cellidp high", "fileexp.cellidp_high", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_cellidp_low, + { "cellidp low", "fileexp.cellidp_low", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_afserrorstatus_st, + { "AFS Error Code", "fileexp.afserrortstatus_st", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_length, + { "Length", "fileexp.length", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_afsTaggedPath_tp_chars, + { "AFS Tagged Path", "fileexp.TaggedPath_tp_chars", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_afsTaggedPath_tp_tag, + { "AFS Tagged Path Name", "fileexp.TaggedPath_tp_tag", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_afsacl_uuid1, + { "AFS ACL UUID1", "fileexp.afsacl_uuid1", + FT_GUID, BASE_NONE, NULL, 0x0, + "UUID", HFILL} + }, + { &hf_fileexp_bulkfetchstatus_size, + { "BulkFetchStatus Size", "fileexp.bulkfetchstatus_size", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_bulkfetchvv_numvols, + { "BulkFetchVv num vols", "fileexp.bulkfetchvv_numvols", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_bulkfetchvv_spare1, + { "BulkFetchVv spare1", "fileexp.bulkfetchvv_spare1", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_bulkfetchvv_spare2, + { "BulkFetchVv spare2", "fileexp.bulkfetchvv_spare2", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_bulkkeepalive_numexecfids, + { "BulkKeepAlive numexecfids", "fileexp.bulkkeepalive_numexecfids", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_bulkkeepalive_spare4, + { "BulkKeepAlive spare4", "fileexp.bulkfetchkeepalive_spare4", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_bulkkeepalive_spare2, + { "BulkKeepAlive spare2", "fileexp.bulkfetchkeepalive_spare2", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_bulkkeepalive_spare1, + { "BulkFetch KeepAlive spare1", "fileexp.bulkfetchkeepalive_spare1", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_afsacl_defaultcell_uuid, + { "Default Cell UUID", "fileexp.defaultcell_uuid", + FT_GUID, BASE_NONE, NULL, 0x0, + "UUID", HFILL} + }, + { &hf_fileexp_afsuuid_uuid, + { "AFS UUID", "fileexp.uuid", + FT_GUID, BASE_NONE, NULL, 0x0, + "UUID", HFILL} + }, + { &hf_fileexp_gettime_syncdispersion, + { "GetTime Syncdispersion", "fileexp.gettime_syncdispersion", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_gettime_syncdistance, + { "SyncDistance", "fileexp.gettime.syncdistance", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_gettime_usecondsp, + { "GetTime usecondsp", "fileexp.gettime_usecondsp", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_readdir_size, + { "Readdir Size", "fileexp.readdir.size", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_afsNameString_t_principalName_size, + { "Principal Name Size", "fileexp.principalName_size", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_afsTaggedPath_tp_length, + { "Tagged Path Length", "fileexp.afsTaggedPath_length", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_fstype, + { "Filetype", "fileexp.fstype", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_gettime_secondsp, + { "GetTime secondsp", "fileexp.gettime_secondsp", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_afsNameString_t_principalName_string, + { "Principal Name", "fileexp.NameString_principal", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + { &hf_fileexp_fetchdata_pipe_t_size, + { "FetchData Pipe_t size", "fileexp.fetchdata_pipe_t_size", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + }; + + static gint *ett[] = { + &ett_fileexp, + &ett_fileexp_afsReturnDesc, + &ett_fileexp_afsFid, + &ett_fileexp_afsNetAddr, + &ett_fileexp_fetchstatus, + &ett_fileexp_afsflags, + &ett_fileexp_volsync, + &ett_fileexp_minvvp, + &ett_fileexp_afsfidtaggedname, + &ett_fileexp_afstaggedname, + &ett_fileexp_afstoken, + &ett_fileexp_afsstorestatus, + &ett_fileexp_afsRecordLock, + &ett_fileexp_afsAcl, + &ett_fileexp_afsNameString_t, + &ett_fileexp_afsConnParams, + &ett_fileexp_afsErrorStatus, + &ett_fileexp_afsTaggedPath, + &ett_fileexp_afsNetData, + &ett_fileexp_afsBulkStat, + &ett_fileexp_afsuuid, + &ett_fileexp_offsetp, + &ett_fileexp_returntokenidp, + &ett_fileexp_afsbundled_stat, + }; + + proto_fileexp = proto_register_protocol ("DCE DFS File Exporter", "FILEEXP", "fileexp"); + proto_register_field_array (proto_fileexp, hf, array_length (hf)); + proto_register_subtree_array (ett, array_length (ett)); +} + +void +proto_reg_handoff_fileexp (void) +{ + /* + * Register the protocol as dcerpc + */ + dcerpc_init_uuid (proto_fileexp, ett_fileexp, &uuid_fileexp, ver_fileexp, + fileexp_dissectors, hf_fileexp_opnum); +} + +/* + * Editor modelines - https://www.wireshark.org/tools/modelines.html + * + * Local Variables: + * c-basic-offset: 2 + * tab-width: 8 + * indent-tabs-mode: nil + * End: + * + * ex: set shiftwidth=2 tabstop=8 expandtab: + * :indentSize=2:tabSize=8:noTabs=true: + */ |