summaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-dcerpc-fldb.c
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/packet-dcerpc-fldb.c')
-rw-r--r--epan/dissectors/packet-dcerpc-fldb.c1937
1 files changed, 1937 insertions, 0 deletions
diff --git a/epan/dissectors/packet-dcerpc-fldb.c b/epan/dissectors/packet-dcerpc-fldb.c
new file mode 100644
index 00000000..e26e01bb
--- /dev/null
+++ b/epan/dissectors/packet-dcerpc-fldb.c
@@ -0,0 +1,1937 @@
+/* packet-dcerpc-fldb.c
+ *
+ * Routines for DCE DFS Fileset Location Server Calls
+ * Copyright 2004, 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/flserver/fldb_proc.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 "packet-dcerpc.h"
+#include "packet-dcerpc-dce122.h"
+
+void proto_register_fldb (void);
+void proto_reg_handoff_fldb (void);
+
+static int proto_fldb = -1;
+static int hf_fldb_opnum = -1;
+
+static gint ett_fldb = -1;
+static gint ett_fldb_vldbentry = -1;
+static gint ett_fldb_afsnetaddr = -1;
+static gint ett_fldb_siteflags = -1;
+static gint ett_fldb_afsflags = -1;
+static gint ett_fldb_vlconf_cell = -1;
+static gint ett_fldb_afsNameString_t = -1;
+
+
+static e_guid_t uuid_fldb =
+ { 0x4d37f2dd, 0xed43, 0x0000, {0x02, 0xc0, 0x37, 0xcf, 0x2e, 0x00, 0x00, 0x01}
+};
+static guint16 ver_fldb = 4;
+
+#if 0
+static int hf_fldb_getentrybyname_rqst_var1 = -1;
+static int hf_fldb_getentrybyname_rqst_key_size = -1;
+#endif
+static int hf_fldb_releaselock_rqst_fsid_high = -1;
+static int hf_fldb_releaselock_rqst_fsid_low = -1;
+static int hf_fldb_releaselock_rqst_voltype = -1;
+static int hf_fldb_releaselock_rqst_voloper = -1;
+static int hf_fldb_setlock_rqst_fsid_high = -1;
+static int hf_fldb_setlock_rqst_fsid_low = -1;
+static int hf_fldb_setlock_rqst_voltype = -1;
+static int hf_fldb_setlock_rqst_voloper = -1;
+#if 0
+static int hf_fldb_setlock_resp_st = -1;
+static int hf_fldb_setlock_resp_st2 = -1;
+#endif
+static int hf_fldb_listentry_rqst_previous_index = -1;
+static int hf_fldb_listentry_rqst_var1 = -1;
+static int hf_fldb_listentry_resp_count = -1;
+static int hf_fldb_listentry_resp_next_index = -1;
+#if 0
+static int hf_fldb_listentry_resp_key_t = -1;
+static int hf_fldb_listentry_resp_key_size = -1;
+static int hf_fldb_listentry_resp_key_t2 = -1;
+static int hf_fldb_listentry_resp_key_size2 = -1;
+static int hf_fldb_listentry_resp_voltype = -1;
+static int hf_fldb_createentry_rqst_key_t = -1;
+static int hf_fldb_createentry_rqst_key_size = -1;
+#endif
+static int hf_fldb_deleteentry_rqst_fsid_high = -1;
+static int hf_fldb_deleteentry_rqst_fsid_low = -1;
+static int hf_fldb_deleteentry_rqst_voltype = -1;
+static int hf_fldb_deleteentry_rqst_voloper = -1;
+#if 0
+static int hf_fldb_getentrybyid_rqst_fsid_high = -1;
+static int hf_fldb_getentrybyid_rqst_fsid_low = -1;
+static int hf_fldb_getentrybyid_rqst_voltype = -1;
+static int hf_fldb_getentrybyid_rqst_voloper = -1;
+#endif
+static int hf_fldb_replaceentry_rqst_fsid_high = -1;
+static int hf_fldb_replaceentry_rqst_fsid_low = -1;
+static int hf_fldb_replaceentry_rqst_voltype = -1;
+#if 0
+static int hf_fldb_replaceentry_rqst_key_size = -1;
+static int hf_fldb_replaceentry_rqst_key_t = -1;
+static int hf_fldb_replaceentry_resp_st = -1;
+static int hf_fldb_replaceentry_resp_st2 = -1;
+#endif
+#if 0
+static int hf_fldb_getentrybyname_resp_volumetype = -1;
+static int hf_fldb_getentrybyname_resp_numservers = -1;
+static int hf_fldb_getentrybyname_resp_sitecookies = -1;
+static int hf_fldb_getentrybyname_resp_sitepartition = -1;
+static int hf_fldb_getentrybyname_resp_siteflags = -1;
+static int hf_fldb_getentrybyname_resp_sitemaxreplat = -1;
+static int hf_fldb_getentrybyname_resp_volid_high = -1;
+static int hf_fldb_getentrybyname_resp_volid_low = -1;
+static int hf_fldb_getentrybyname_resp_voltype = -1;
+static int hf_fldb_getentrybyname_resp_cloneid_high = -1;
+static int hf_fldb_getentrybyname_resp_cloneid_low = -1;
+static int hf_fldb_getentrybyname_resp_flags = -1;
+static int hf_fldb_getentrybyname_resp_maxtotallat = -1;
+static int hf_fldb_getentrybyname_resp_hardmaxtotlat = -1;
+static int hf_fldb_getentrybyname_resp_minpouncedally = -1;
+static int hf_fldb_getentrybyname_resp_defaultmaxreplat = -1;
+static int hf_fldb_getentrybyname_resp_reclaimdally = -1;
+static int hf_fldb_getentrybyname_resp_whenlocked = -1;
+static int hf_fldb_getentrybyname_resp_spare1 = -1;
+static int hf_fldb_getentrybyname_resp_spare2 = -1;
+static int hf_fldb_getentrybyname_resp_spare3 = -1;
+static int hf_fldb_getentrybyname_resp_spare4 = -1;
+static int hf_fldb_getentrybyname_resp_key_t = -1;
+static int hf_fldb_getentrybyname_resp_key_size = -1;
+static int hf_fldb_getentrybyname_resp_test = -1;
+static int hf_dcerpc_error_status = -1;
+#endif
+static int hf_fldb_vldbentry_volumename = -1;
+static int hf_fldb_vldbentry_volumetype = -1;
+static int hf_fldb_vldbentry_nservers = -1;
+static int hf_fldb_vldbentry_sitepartition = -1;
+static int hf_fldb_afsnetaddr_type = -1;
+static int hf_fldb_afsnetaddr_data = -1;
+static int hf_fldb_siteflags = -1;
+static int hf_fldb_vldbentry_sitemaxreplicalatency = -1;
+static int hf_fldb_vldbentry_siteprincipal = -1;
+static int hf_fldb_vldbentry_siteowner = -1;
+static int hf_fldb_vldbentry_siteobjid = -1;
+static int hf_fldb_vldbentry_volids_high = -1;
+static int hf_fldb_vldbentry_volids_low = -1;
+static int hf_fldb_vldbentry_voltypes = -1;
+static int hf_fldb_vldbentry_cloneid_high = -1;
+static int hf_fldb_vldbentry_cloneid_low = -1;
+static int hf_fldb_afsflags_flags = -1;
+static int hf_fldb_vldbentry_maxtotallatency = -1;
+static int hf_fldb_vldbentry_hardmaxtotallatency = -1;
+static int hf_fldb_vldbentry_minimumpouncedally = -1;
+static int hf_fldb_vldbentry_defaultmaxreplicalatency = -1;
+static int hf_fldb_vldbentry_reclaimdally = -1;
+static int hf_fldb_vldbentry_whenlocked = -1;
+static int hf_fldb_vldbentry_spare1 = -1;
+static int hf_fldb_vldbentry_spare2 = -1;
+static int hf_fldb_vldbentry_spare3 = -1;
+static int hf_fldb_vldbentry_spare4 = -1;
+static int hf_fldb_vldbentry_lockername = -1;
+static int hf_fldb_vldbentry_charspares = -1;
+static int hf_fldb_vlconf_cell_name = -1;
+static int hf_fldb_vlconf_cell_cellid_high = -1;
+static int hf_fldb_vlconf_cell_cellid_low = -1;
+static int hf_fldb_vlconf_cell_numservers = -1;
+static int hf_fldb_vlconf_cell_hostname = -1;
+static int hf_fldb_vlconf_cell_spare1 = -1;
+static int hf_fldb_vlconf_cell_spare2 = -1;
+static int hf_fldb_vlconf_cell_spare3 = -1;
+static int hf_fldb_vlconf_cell_spare4 = -1;
+static int hf_fldb_vlconf_cell_spare5 = -1;
+static int hf_fldb_flagsp = -1;
+static int hf_fldb_nextstartp = -1;
+static int hf_fldb_afsNameString_t_principalName_string = -1;
+static int hf_fldb_afsNameString_t_principalName_size = -1;
+/* static int hf_fldb_afsNameString_t_principalName_size2 = -1; */
+static int hf_fldb_namestring = -1;
+static int hf_error_st = -1;
+static int hf_fldb_creationquota = -1;
+static int hf_fldb_creationuses = -1;
+static int hf_fldb_deletedflag = -1;
+/* static int hf_fldb_namestring_size = -1; */
+static int hf_fldb_numwanted = -1;
+static int hf_fldb_spare2 = -1;
+static int hf_fldb_spare3 = -1;
+static int hf_fldb_spare4 = -1;
+static int hf_fldb_spare5 = -1;
+static int hf_fldb_uuid_objid = -1;
+static int hf_fldb_uuid_owner = -1;
+static int hf_fldb_volid_high = -1;
+static int hf_fldb_volid_low = -1;
+static int hf_fldb_voltype = -1;
+static guint32 st;
+static const guint8 *st_str;
+
+#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
+
+#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 VLSF_NEWREPSITE 0x01
+#define VLSF_SPARE1 0x02
+#define VLSF_SPARE2 0x04 /* used for VLSF_RWVOL in flprocs.c */
+#define VLSF_SPARE3 0x08 /* used for VLSF_BACKVOL in flprocs.c */
+#define VLSF_SAMEASPREV 0x10
+#define VLSF_DEFINED 0x20
+#define VLSF_PARTIALADDRS 0x40
+#define VLSF_ZEROIXHERE 0x80000000
+
+#define MACRO_ST_CLEAR(name) \
+ 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_afsnetaddr (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;
+ guint16 type;
+ guint8 data;
+ int i;
+
+ if (parent_tree)
+ {
+ tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1,
+ ett_fldb_afsnetaddr, &item, "afsNetAddr:");
+ }
+
+/* unsigned16 type;
+ unsigned8 data[14];
+*/
+
+ offset =
+ dissect_ndr_uint16 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_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_fldb_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_vlconf_cell (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;
+#define MAXVLCELLCHARS 128
+#define MAXVLHOSTSPERCELL 64
+ const guint8 *name, *hostname;
+ int i;
+ guint32 cellid_high, cellid_low, numservers, spare1, spare2, spare3, spare4,
+ spare5;
+
+ if (parent_tree)
+ {
+ tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1,
+ ett_fldb_vlconf_cell, &item, "vlconf_cell:");
+ }
+
+ /* byte name[MAXVLCELLCHARS]; Cell name */
+ proto_tree_add_item (tree, hf_fldb_vlconf_cell_name, tvb, offset, 114, ENC_ASCII);
+ name = tvb_get_string_enc(pinfo->pool, tvb, offset, MAXVLCELLCHARS, ENC_ASCII); /* XXX why 114 above and 128 here?? */
+ offset += MAXVLCELLCHARS; /* some reason this 114 seems to be incorrect... cutting 4 short to compensate.... */
+ col_append_fstr (pinfo->cinfo, COL_INFO, " Name: %s", name);
+
+ /* afsHyper CellID; identifier for that cell */
+
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vlconf_cell_cellid_high, &cellid_high);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vlconf_cell_cellid_low, &cellid_low);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " CellID:%u-%u", cellid_high,
+ cellid_low);
+
+ /* unsigned32 numServers; *Num active servers for the cell */
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vlconf_cell_numservers, &numservers);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " numServers:%u", numservers);
+
+ /* afsNetAddr hostAddr[MAXVLHOSTSPERCELL]; *addresses for cell's servers */
+ for (i = 0; i < MAXVLHOSTSPERCELL; i++)
+ {
+ offset = dissect_afsnetaddr (tvb, offset, pinfo, tree, di, drep);
+ }
+
+ /* hostnam hostName[MAXVLHOSTSPERCELL]; *Names for cell's servers* */
+
+ for (i = 0; i < MAXVLHOSTSPERCELL; i++)
+ {
+ proto_tree_add_item_ret_string(tree, hf_fldb_vlconf_cell_hostname, tvb, offset,
+ 64, ENC_ASCII|ENC_NA, pinfo->pool, &hostname);
+ offset += 64; /* some reason this 114 seems to be incorrect... cutting 4 short to compensate.... */
+ col_append_fstr (pinfo->cinfo, COL_INFO, " hostName: %s", hostname);
+ }
+
+ /* unsigned32 spare1; */
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vlconf_cell_spare1, &spare1);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " spare1:%u", spare1);
+
+ /* unsigned32 spare2; */
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vlconf_cell_spare2, &spare2);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " spare2:%u", spare2);
+
+ /* unsigned32 spare3; */
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vlconf_cell_spare3, &spare3);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " spare3:%u", spare3);
+
+ /* unsigned32 spare4; */
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vlconf_cell_spare4, &spare4);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " spare4:%u", spare4);
+
+ /* unsigned32 spare5; */
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vlconf_cell_spare5, &spare5);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " spare5:%u", spare5);
+
+ 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_fldb_afsNameString_t, &item, "afsNameString_t:"); }
+
+ offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_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_string(tree, id, tvb, start, length, value_ptr); */
+ proto_tree_add_item_ret_string(tree, hf_fldb_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_afsflags (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 afsflags;
+
+ if (parent_tree)
+ {
+ tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, ett_fldb_afsflags, &item, "afsFlags:");
+ }
+
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_afsflags_flags, &afsflags);
+ if (afsflags)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, " afsFlags=");
+ if ((afsflags & AFS_FLAG_RETURNTOKEN) == AFS_FLAG_RETURNTOKEN)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":RETURNTOKEN");
+ }
+ if ((afsflags & AFS_FLAG_TOKENJUMPQUEUE) == AFS_FLAG_TOKENJUMPQUEUE)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":TOKENJUMPQUEUE");
+ }
+ if ((afsflags & AFS_FLAG_SKIPTOKEN) == AFS_FLAG_SKIPTOKEN)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":SKIPTOKEN");
+ }
+ if ((afsflags & AFS_FLAG_NOOPTIMISM) == AFS_FLAG_NOOPTIMISM)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":NOOPTIMISM");
+ }
+ if ((afsflags & AFS_FLAG_TOKENID) == AFS_FLAG_TOKENID)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":TOKENID");
+ }
+ if ((afsflags & AFS_FLAG_RETURNBLOCKER) == AFS_FLAG_RETURNBLOCKER)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":RETURNBLOCKER");
+ }
+ if ((afsflags & AFS_FLAG_ASYNCGRANT) == AFS_FLAG_ASYNCGRANT)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":ASYNCGRANT");
+ }
+ if ((afsflags & AFS_FLAG_NOREVOKE) == AFS_FLAG_NOREVOKE)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":NOREVOKE");
+ }
+ if ((afsflags & AFS_FLAG_MOVE_REESTABLISH) == AFS_FLAG_MOVE_REESTABLISH)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":MOVE_REESTABLISH");
+ }
+ if ((afsflags & AFS_FLAG_SERVER_REESTABLISH) ==
+ AFS_FLAG_SERVER_REESTABLISH)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":SERVER_REESTABLISH");
+ if ((afsflags & AFS_FLAG_NO_NEW_EPOCH) == AFS_FLAG_NO_NEW_EPOCH)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":NO_NEW_EPOCH");
+ }
+ if ((afsflags & AFS_FLAG_MOVE_SOURCE_OK) == AFS_FLAG_MOVE_SOURCE_OK)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":MOVE_SOURCE_OK");
+ }
+ if ((afsflags & AFS_FLAG_SYNC) == AFS_FLAG_SYNC)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":SYNC");
+ }
+ if ((afsflags & AFS_FLAG_ZERO) == AFS_FLAG_ZERO)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":ZERO");
+ }
+ if ((afsflags & AFS_FLAG_SKIPSTATUS) == AFS_FLAG_SKIPSTATUS)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":SKIPSTATUS");
+ }
+ if ((afsflags & AFS_FLAG_FORCEREVOCATIONS) ==
+ AFS_FLAG_FORCEREVOCATIONS)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":FORCEREVOCATIONS");
+ }
+ if ((afsflags & AFS_FLAG_FORCEVOLQUIESCE) ==
+ AFS_FLAG_FORCEVOLQUIESCE)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":FORCEVOLQUIESCE");
+ }
+ if ((afsflags & AFS_FLAG_SEC_SERVICE) == AFS_FLAG_SEC_SERVICE)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":SEC_SERVICE");
+ }
+ if ((afsflags & 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_siteflags (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 siteflags;
+
+ if (parent_tree)
+ {
+ tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, ett_fldb_siteflags, &item, "SiteFlags:");
+ }
+
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fldb_siteflags,
+ &siteflags);
+
+ if (siteflags)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, " SiteFlags");
+ if ((siteflags & VLSF_NEWREPSITE) == VLSF_NEWREPSITE)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":NEWREPSITE");
+ }
+ if ((siteflags & VLSF_SPARE1) == VLSF_SPARE1)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":SPARE1");
+ }
+ if ((siteflags & VLSF_SPARE2) == VLSF_SPARE2)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":SPARE2");
+ }
+ if ((siteflags & VLSF_SPARE3) == VLSF_SPARE3)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":SPARE3");
+ }
+ if ((siteflags & VLSF_SAMEASPREV) == VLSF_SAMEASPREV)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":SAMEASPREV");
+ }
+ if ((siteflags & VLSF_DEFINED) == VLSF_DEFINED)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":DEFINED");
+ }
+ if ((siteflags & VLSF_PARTIALADDRS) == VLSF_PARTIALADDRS)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":PARTIALADDRS ");
+ }
+ if ((siteflags & VLSF_ZEROIXHERE) == VLSF_ZEROIXHERE)
+ {
+ col_append_str (pinfo->cinfo, COL_INFO, ":ZEROIXHERE");
+
+ }
+ }
+
+ proto_item_set_len (item, offset - old_offset);
+
+ return offset;
+}
+
+
+static int
+dissect_vldbentry (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *parent_tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ proto_item *item;
+ proto_tree *tree;
+ int old_offset = offset;
+ const guint8 *volumename, *siteprincipal, *charspares, *lockername;
+ guint32 volumetype, nservers, sitepartition, sitemaxreplicalatency;
+ guint32 volids_high, volids_low, voltypes, cloneid_high, cloneid_low;
+ guint32 maxtotallatency, hardmaxtotallatency, minimumpouncedally;
+ guint32 defaultmaxreplicalatency, reclaimdally, whenlocked;
+ guint32 spare1, spare2, spare3, spare4;
+ e_guid_t siteowner, siteobjid;
+ gint i;
+#define MAXNSERVERS 16
+#define MAXVOLTYPES 8
+#define MAXLOCKNAMELEN 64
+
+ tree = proto_tree_add_subtree (parent_tree, tvb, offset, -1, ett_fldb_vldbentry, &item, "vldbentry:");
+
+/* byte name[114]; Volume name */
+
+ proto_tree_add_item_ret_string(tree, hf_fldb_vldbentry_volumename, tvb, offset, 114,
+ ENC_ASCII|ENC_NA, pinfo->pool, &volumename);
+ offset += 110; /* some reason this 114 seems to be incorrect... cutting 4 short to compensate.... */
+ col_append_fstr (pinfo->cinfo, COL_INFO, " Name: %s", volumename);
+
+ /* unsigned32 volumeType; */
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_volumetype, &volumetype);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " Type:%u", volumetype);
+
+ /*unsigned32 nServers; */
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_nservers, &nservers);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " nServers:%u", nservers);
+
+ /* afsNetAddr siteAddr[MAXNSERVERS]; 16 */
+ for (i = 0; i < MAXNSERVERS; i++)
+ {
+ /* col_append_fstr (pinfo->cinfo, COL_INFO, " Site:%u", i); */
+
+ offset = dissect_afsnetaddr (tvb, offset, pinfo, tree, di, drep);
+ }
+
+/* unsigned32 sitePartition[MAXNSERVERS]; */
+ for (i = 0; i < MAXNSERVERS; i++)
+ {
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_sitepartition, &sitepartition);
+ if (sitepartition)
+ {
+ col_append_fstr (pinfo->cinfo, COL_INFO, " LFS:%u",
+ sitepartition);
+ }
+ }
+
+ /* unsigned32 siteFlags[MAXNSERVERS]; */
+ for (i = 0; i < MAXNSERVERS; i++)
+ {
+ offset = dissect_siteflags (tvb, offset, pinfo, tree, di, drep);
+ }
+
+ /* unsigned32 sitemaxReplicaLatency[MAXNSERVERS]; */
+ for (i = 0; i < MAXNSERVERS; i++)
+ {
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_sitemaxreplicalatency,
+ &sitemaxreplicalatency);
+ if (sitemaxreplicalatency)
+ {
+ col_append_fstr (pinfo->cinfo, COL_INFO, " MaxRepLat%d:%u", i,
+ sitemaxreplicalatency);
+ }
+ }
+ /* kerb_princ_name sitePrincipal[MAXNSERVERS]; principal */
+ for (i = 0; i < MAXNSERVERS; i++)
+ {
+ proto_tree_add_item_ret_string(tree, hf_fldb_vldbentry_siteprincipal, tvb,
+ offset, 64, ENC_ASCII|ENC_NA, pinfo->pool, &siteprincipal);
+ offset += 64;
+ col_append_fstr (pinfo->cinfo, COL_INFO, " Princ: %s", siteprincipal);
+ }
+
+ /* afsUUID siteOwner[MAXNSERVERS]; */
+
+ for (i = 0; i < MAXNSERVERS; i++)
+ {
+ offset =
+ dissect_ndr_uuid_t (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_siteowner, &siteowner);
+ col_append_fstr (pinfo->cinfo, COL_INFO,
+ " SiteOwner - %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+ siteowner.data1, siteowner.data2, siteowner.data3,
+ siteowner.data4[0], siteowner.data4[1],
+ siteowner.data4[2], siteowner.data4[3],
+ siteowner.data4[4], siteowner.data4[5],
+ siteowner.data4[6], siteowner.data4[7]);
+ }
+
+/* afsUUID siteObjID[MAXNSERVERS]; */
+ for (i = 0; i < MAXNSERVERS; i++)
+ {
+ offset =
+ dissect_ndr_uuid_t (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_siteobjid, &siteobjid);
+ col_append_fstr (pinfo->cinfo, COL_INFO,
+ " SiteObjID - %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+ siteobjid.data1, siteobjid.data2, siteobjid.data3,
+ siteobjid.data4[0], siteobjid.data4[1],
+ siteobjid.data4[2], siteobjid.data4[3],
+ siteobjid.data4[4], siteobjid.data4[5],
+ siteobjid.data4[6], siteobjid.data4[7]);
+ }
+
+ /* afsHyper VolIDs[MAXVOLTYPES]; */
+ /* XXX for these hypers, I will skip trying to use non portable guint64, and just read both, and use only low.
+ never seen a case of a volid going anywhere the overflow of the 32 low; */
+ for (i = 0; i < MAXVOLTYPES; i++)
+ {
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_volids_high, &volids_high);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_volids_low, &volids_low);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " VolIDs%d:%u", i,
+ volids_low);
+ }
+
+ /* unsigned32 VolTypes[MAXVOLTYPES]; */
+ for (i = 0; i < MAXVOLTYPES; i++)
+ {
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_voltypes, &voltypes);
+ if (voltypes)
+ {
+ col_append_fstr (pinfo->cinfo, COL_INFO, " VolTypes:%d:%u", i,
+ voltypes);
+ }
+ }
+
+ /* afsHyper cloneId; Used during cloning */
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_cloneid_high, &cloneid_high);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_cloneid_low, &cloneid_low);
+ if (cloneid_low)
+ {
+ col_append_fstr (pinfo->cinfo, COL_INFO, " CloneId:%u", cloneid_low);
+ }
+
+ /* unsigned32 flags; General flags */
+ offset = dissect_afsflags (tvb, offset, pinfo, tree, di, drep);
+
+ /* unsigned32 maxTotalLatency; */
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_maxtotallatency, &maxtotallatency);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " MaxTotLat:%u",
+ maxtotallatency);
+
+ /* unsigned32 hardMaxTotalLatency; */
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_hardmaxtotallatency,
+ &hardmaxtotallatency);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " HardMaxTotLat:%u",
+ hardmaxtotallatency);
+
+ /* unsigned32 minimumPounceDally; */
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_minimumpouncedally,
+ &minimumpouncedally);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " minPounceDally:%u",
+ minimumpouncedally);
+
+ /* unsigned32 defaultMaxReplicaLatency; */
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_defaultmaxreplicalatency,
+ &defaultmaxreplicalatency);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " defaultMaxReplicaLatency:%u",
+ defaultmaxreplicalatency);
+
+ /* unsigned32 reclaimDally; */
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_reclaimdally, &reclaimdally);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " reclaimDally:%u",
+ reclaimdally);
+
+ /* unsigned32 WhenLocked; */
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_whenlocked, &whenlocked);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " WhenLocked:%u", whenlocked);
+
+ /* unsigned32 spare1; */
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_spare1, &spare1);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " spare1:%u", spare1);
+
+ /* unsigned32 spare2; */
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_spare2, &spare2);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " spare2:%u", spare2);
+
+ /* unsigned32 spare3; */
+ offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_spare3, &spare3);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " spare3:%u", spare3);
+
+ /* unsigned32 spare4; */
+ offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_vldbentry_spare4, &spare4);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " spare4:%u", spare4);
+
+
+ /* byte LockerName[MAXLOCKNAMELEN]; */
+ proto_tree_add_item_ret_string(tree, hf_fldb_vldbentry_lockername, tvb, offset,
+ MAXLOCKNAMELEN, ENC_ASCII|ENC_NA, pinfo->pool, &lockername);
+ offset += MAXLOCKNAMELEN; /* some reason this 114 seems to be incorrect... cutting 4 short to compensate.... */
+ col_append_fstr (pinfo->cinfo, COL_INFO, " LockerName: %s", lockername);
+
+ /* byte charSpares[50]; */
+ proto_tree_add_item_ret_string(tree, hf_fldb_vldbentry_charspares, tvb, offset, 50,
+ ENC_ASCII|ENC_NA, pinfo->pool, &charspares);
+ offset += 50; /* some reason this 114 seems to be incorrect... cutting 4 short to compensate.... */
+ col_append_fstr (pinfo->cinfo, COL_INFO, " charSpares:%s", charspares);
+
+ proto_item_set_len (item, offset - old_offset);
+
+ return offset;
+}
+
+
+static int
+fldb_dissect_getcellinfo_resp (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+/* [out] vlconf_cell *MyCell */
+ offset = dissect_vlconf_cell (tvb, offset, pinfo, tree, di, drep);
+
+ return offset;
+}
+
+
+static int
+fldb_dissect_getentrybyname_rqst (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+ /*
+ * [in] volumeName volName,
+ */
+
+ offset += 4;
+ offset = dissect_afsNameString_t (tvb, offset, pinfo, tree, di, drep);
+
+ return offset;
+}
+
+
+static int
+fldb_dissect_getentrybyname_resp (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ /*
+ [out] vldbentry *entry
+ */
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+ offset = dissect_vldbentry (tvb, offset, pinfo, tree, di, drep);
+
+ MACRO_ST_CLEAR ("GetEntryByName reply");
+ return offset;
+}
+
+
+static int
+fldb_dissect_getsiteinfo_rqst (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+ /*
+ * [in] afsNetAddr *OldAddr,
+ *
+ */
+
+ offset = dissect_afsnetaddr (tvb, offset, pinfo, tree, di, drep);
+
+ /*
+ *
+ * [in] afsNetAddr *OldAddr,
+ * unsigned16 type;
+ unsigned8 data[14];
+ */
+
+ return offset;
+}
+
+
+static int
+fldb_dissect_getsiteinfo_resp (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ const guint8 *namestring;
+ e_guid_t owner, objid;
+ guint32 creationquota, creationuses, deletedflag;
+ guint32 spare2, spare3, spare4, spare5;
+
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+ /*
+ [out] siteDessiib *FullSiteInfo
+ afsNetAddr Addr[ADDRSINSITE];
+ byte KerbPrin[MAXKPRINCIPALLEN] 64;
+ afsUUID Owner;
+ afsUUID ObjID;
+ unsigned32 CreationQuota;
+ unsigned32 CreationUses;
+ unsigned32 DeletedFlag;
+ unsigned32 spare2;
+ unsigned32 spare3;
+ unsigned32 spare4;
+ unsigned32 spare5;
+ */
+
+ offset = dissect_afsnetaddr (tvb, offset, pinfo, tree, di, drep);
+
+ /* handle byte KerbPrin[64]. */
+
+ offset += 48; /* part of kerbprin before name... */
+
+ proto_tree_add_item_ret_string(tree, hf_fldb_namestring, tvb, offset, 64, ENC_ASCII|ENC_NA, pinfo->pool, &namestring);
+ offset += 64;
+ col_append_fstr (pinfo->cinfo, COL_INFO, " %s", namestring);
+
+ offset = dissect_ndr_uuid_t (tvb, offset, pinfo, tree, di, drep, hf_fldb_uuid_owner, &owner);
+ col_append_fstr (pinfo->cinfo, COL_INFO,
+ " Owner - %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+ owner.data1, owner.data2, owner.data3, owner.data4[0],
+ owner.data4[1], owner.data4[2], owner.data4[3],
+ owner.data4[4], owner.data4[5], owner.data4[6],
+ owner.data4[7]);
+
+ offset =
+ dissect_ndr_uuid_t (tvb, offset, pinfo, tree, di, drep, hf_fldb_uuid_objid,
+ &objid);
+ col_append_fstr (pinfo->cinfo, COL_INFO,
+ " ObjID - %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+ objid.data1, objid.data2, objid.data3, objid.data4[0],
+ objid.data4[1], objid.data4[2], objid.data4[3],
+ objid.data4[4], objid.data4[5], objid.data4[6],
+ objid.data4[7]);
+
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fldb_creationquota,
+ &creationquota);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fldb_creationuses,
+ &creationuses);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fldb_deletedflag,
+ &deletedflag);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fldb_spare2,
+ &spare2);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fldb_spare3,
+ &spare3);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fldb_spare4,
+ &spare4);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fldb_spare5,
+ &spare5);
+
+ col_append_fstr (pinfo->cinfo, COL_INFO,
+ " CreationQuota:%u CreationUses:%u DeletedFlag:%u Spare2:%u Spare3:%u Spare4:%u Spare5:%u",
+ creationquota, creationuses, deletedflag, spare2, spare3,
+ spare4, spare5);
+
+ MACRO_ST_CLEAR ("GetSiteInfo reply");
+
+ return offset;
+}
+
+
+static int
+fldb_dissect_listentry_rqst (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ guint32 var1, previous_index;
+
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+ /*
+ * [in] unsigned32 previous_index,
+ * [out] unsigned32 *count,
+ * [out] unsigned32 *next_index,
+ * [out] vldbentry *entry
+ */
+
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_listentry_rqst_previous_index,
+ &previous_index);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_listentry_rqst_var1, &var1);
+
+
+ col_append_fstr (pinfo->cinfo, COL_INFO, " :PrevIndex: %u",
+ previous_index);
+
+ return offset;
+}
+
+
+static int
+fldb_dissect_listentry_resp (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ guint32 count, next_index;
+
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+ /*
+ * [out] unsigned32 *count,
+ * [out] unsigned32 *next_index,
+ * [out] vldbentry *entry
+ */
+
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_listentry_resp_count, &count);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_listentry_resp_next_index, &next_index);
+ offset = dissect_vldbentry (tvb, offset, pinfo, tree, di, drep);
+ return offset;
+}
+
+
+static int
+fldb_dissect_setlock_rqst (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ guint32 fsid_high, fsid_low, voltype, voloper;
+
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_setlock_rqst_fsid_high, &fsid_high);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_setlock_rqst_fsid_low, &fsid_low);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_setlock_rqst_voltype, &voltype);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_setlock_rqst_voloper, &voloper);
+
+ col_append_fstr (pinfo->cinfo, COL_INFO,
+ " :FSID:%u/%u VolType:0x%x VolOper:%u", fsid_high,
+ fsid_low, voltype, voloper);
+
+ return offset;
+}
+
+
+static int
+fldb_dissect_setlock_resp (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+ MACRO_ST_CLEAR ("SetLock reply");
+
+ return offset;
+}
+
+
+static int
+fldb_dissect_deleteentry_resp (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+ MACRO_ST_CLEAR ("DeleteEntry reply");
+
+ return offset;
+}
+
+
+static int
+fldb_dissect_deleteentry_rqst (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+/*
+ [in] afsHyper *Volid,
+ [in] unsigned32 voltype
+*/
+
+ guint32 fsid_high, fsid_low, voltype, voloper;
+
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_deleteentry_rqst_fsid_high, &fsid_high);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_deleteentry_rqst_fsid_low, &fsid_low);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_deleteentry_rqst_voltype, &voltype);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_deleteentry_rqst_voloper, &voloper);
+
+ col_append_fstr (pinfo->cinfo, COL_INFO, " :FSID:%u/%u", fsid_high,
+ fsid_low);
+
+
+ return offset;
+}
+
+
+static int
+fldb_dissect_createentry_resp (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+ MACRO_ST_CLEAR ("CreateEntry reply");
+
+ return offset;
+}
+
+
+static int
+fldb_dissect_createentry_rqst (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+ offset = dissect_vldbentry (tvb, offset, pinfo, tree, di, drep);
+ return offset;
+}
+
+
+static int
+fldb_dissect_getentrybyid_rqst (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ guint32 volid_high, volid_low, voltype;
+
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+/*
+ [in] afsHyper *Volid,
+ [in] unsigned32 voltype,
+*/
+
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fldb_volid_high,
+ &volid_high);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fldb_volid_low,
+ &volid_low);
+
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fldb_voltype,
+ &voltype);
+
+ col_append_fstr (pinfo->cinfo, COL_INFO, " VolID:%u/%u VolType:0x%x",
+ volid_high, volid_low, voltype);
+
+ return offset;
+}
+
+
+static int
+fldb_dissect_getnewvolumeids_rqst (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+/* [in] unsigned32 numWanted,
+ [in] afsNetAddr *ServerAddr,
+*/
+ guint32 numwanted;
+
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fldb_numwanted,
+ &numwanted);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " numWanted:%u", numwanted);
+
+ offset = dissect_afsnetaddr (tvb, offset, pinfo, tree, di, drep);
+
+ return offset;
+}
+
+
+static int
+fldb_dissect_getentrybyid_resp (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+ offset = dissect_vldbentry (tvb, offset, pinfo, tree, di, drep);
+ return offset;
+}
+
+
+static int
+fldb_dissect_releaselock_resp (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+ MACRO_ST_CLEAR ("ReleaseLock reply");
+
+
+ return offset;
+}
+
+
+static int
+fldb_dissect_releaselock_rqst (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ guint32 fsid_high, fsid_low, voltype, voloper;
+
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_releaselock_rqst_fsid_high, &fsid_high);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_releaselock_rqst_fsid_low, &fsid_low);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_releaselock_rqst_voltype, &voltype);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_releaselock_rqst_voloper, &voloper);
+
+ col_append_fstr (pinfo->cinfo, COL_INFO, " :FSID:%u/%u", fsid_high,
+ fsid_low);
+
+ return offset;
+
+}
+
+
+static int
+fldb_dissect_replaceentry_resp (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+ MACRO_ST_CLEAR ("ReplaceEntry reply");
+
+ return offset;
+}
+
+
+static int
+fldb_dissect_getnextserversbyid_resp (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ guint32 nextstartp, flagsp;
+
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+ /* [out] unsigned32 *nextStartP, */
+/* XXX */
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fldb_nextstartp,
+ &nextstartp);
+ col_append_fstr (pinfo->cinfo, COL_INFO, " nextStartP:%u", nextstartp);
+
+ /* [out] vldbentry *entry, */
+ offset = dissect_vldbentry (tvb, offset, pinfo, tree, di, drep);
+
+
+ /* [out] unsigned32 *flagsP */
+
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_fldb_flagsp,
+ &flagsp);
+
+ col_append_fstr (pinfo->cinfo, COL_INFO, " flagsp:%u", flagsp);
+
+ return offset;
+}
+
+
+static int
+fldb_dissect_replaceentry_rqst (tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree,
+ dcerpc_info *di, guint8 *drep)
+{
+ guint32 fsid_high, fsid_low, voltype;
+
+ if (di->conformant_run)
+ {
+ return offset;
+ }
+
+ /*
+ * [in] afsHyper *Volid,
+ * [in] unsigned32 voltype,
+ * [in] vldbentry *newentry,
+ * [in] unsigned32 ReleaseType
+ */
+
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_replaceentry_rqst_fsid_high, &fsid_high);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_replaceentry_rqst_fsid_low, &fsid_low);
+ offset =
+ dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep,
+ hf_fldb_replaceentry_rqst_voltype, &voltype);
+
+ col_append_fstr (pinfo->cinfo, COL_INFO, " FSID:%u/%u Name:", fsid_high,
+ fsid_low);
+
+ offset = dissect_vldbentry (tvb, offset, pinfo, tree, di, drep);
+
+ return offset;
+
+}
+
+
+static dcerpc_sub_dissector fldb_dissectors[] = {
+ {0, "GetEntryByID", fldb_dissect_getentrybyid_rqst,
+ fldb_dissect_getentrybyid_resp},
+ {1, "GetEntryByName", fldb_dissect_getentrybyname_rqst,
+ fldb_dissect_getentrybyname_resp},
+ {2, "Probe", NULL, NULL},
+ {3, "GetCellInfo", NULL, fldb_dissect_getcellinfo_resp},
+ {4, "GetNextServersByID", NULL, fldb_dissect_getnextserversbyid_resp},
+ {5, "GetNextServersByName", NULL, NULL},
+ {6, "GetSiteInfo", fldb_dissect_getsiteinfo_rqst,
+ fldb_dissect_getsiteinfo_resp},
+ {7, "GetCEntryByID", NULL, NULL},
+ {8, "GetCEntryByName", NULL, NULL},
+ {9, "GetCNextServersByID", NULL, NULL},
+ {10, "GetCNextServersByName", NULL, NULL},
+ {11, "ExpandSiteCookie", NULL, NULL},
+ {12, "GetServerInterfaces", NULL, NULL},
+ {13, "CreateEntry", fldb_dissect_createentry_rqst,
+ fldb_dissect_createentry_resp},
+ {14, "DeleteEntry", fldb_dissect_deleteentry_rqst,
+ fldb_dissect_deleteentry_resp},
+ {15, "GetNewVolumeId", NULL, NULL},
+ {16, "ReplaceEntry", fldb_dissect_replaceentry_rqst,
+ fldb_dissect_replaceentry_resp},
+ {17, "SetLock", fldb_dissect_setlock_rqst, fldb_dissect_setlock_resp},
+ {18, "ReleaseLock", fldb_dissect_releaselock_rqst,
+ fldb_dissect_releaselock_resp},
+ {19, "ListEntry", fldb_dissect_listentry_rqst, fldb_dissect_listentry_resp},
+ {20, "ListByAttributes", NULL, NULL},
+ {21, "GetStats", NULL, NULL},
+ {22, "AddAddress", NULL, NULL},
+ {23, "RemoveAddress", NULL, NULL},
+ {24, "ChangeAddress", NULL, NULL},
+ {25, "GenerateSites", NULL, NULL},
+ {26, "GetNewVolumeIds", fldb_dissect_getnewvolumeids_rqst, NULL},
+ {27, "CreateServer", NULL, NULL},
+ {28, "AlterServer", NULL, NULL},
+ {0, NULL, NULL, NULL},
+};
+
+
+void
+proto_register_fldb (void)
+{
+ static hf_register_info hf[] = {
+ {&hf_fldb_releaselock_rqst_fsid_low,
+ {"FSID releaselock Low", "fldb.releaselock_rqst_fsid_low", FT_UINT32,
+ BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_releaselock_rqst_voltype,
+ {"voltype", "fldb.releaselock_rqst_voltype", FT_UINT32, BASE_DEC,
+ NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_releaselock_rqst_voloper,
+ {"voloper", "fldb.releaselock_rqst_voloper", FT_UINT32, BASE_DEC,
+ NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_setlock_rqst_fsid_high,
+ {"FSID setlock Hi", "fldb.setlock_rqst_fsid_high", FT_UINT32,
+ BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_setlock_rqst_fsid_low,
+ {"FSID setlock Low", "fldb.setlock_rqst_fsid_low", FT_UINT32,
+ BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_setlock_rqst_voltype,
+ {"voltype", "fldb.setlock_rqst_voltype", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_setlock_rqst_voloper,
+ {"voloper", "fldb.setlock_rqst_voloper", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+#if 0
+ {&hf_fldb_setlock_resp_st,
+ {"Error", "fldb.setlock_resp_st", FT_UINT32, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_setlock_resp_st2,
+ {"Error", "fldb.setlock_resp_st2", FT_UINT32, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+#endif
+ {&hf_fldb_listentry_rqst_previous_index,
+ {"Previous Index", "fldb.listentry_rqst_previous_index", FT_UINT32,
+ BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_listentry_rqst_var1,
+ {"Var 1", "fldb.listentry_rqst_var1", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_listentry_resp_count,
+ {"Count", "fldb.listentry_resp_count", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_listentry_resp_next_index,
+ {"Next Index", "fldb.listentry_resp_next_index", FT_UINT32, BASE_DEC,
+ NULL, 0x0, NULL, HFILL}},
+#if 0
+ {&hf_fldb_listentry_resp_key_size,
+ {"Key Size", "fldb.listentry_resp_key_size", FT_UINT32, BASE_DEC,
+ NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_listentry_resp_key_t,
+ {"Volume", "fldb.listentry_resp_key_t", FT_STRING, BASE_NONE, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_listentry_resp_voltype,
+ {"VolType", "fldb.listentry_resp_voltype", FT_UINT32, BASE_HEX, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_listentry_resp_key_size2,
+ {"key_size2", "fldb.listentry_resp_key_size2", FT_UINT32, BASE_DEC,
+ NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_listentry_resp_key_t2,
+ {"Server", "fldb.listentry_resp_key_t2", FT_STRING, BASE_NONE, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_createentry_rqst_key_t,
+ {"Volume", "fldb.createentry_rqst_key_t", FT_STRING, BASE_NONE, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_createentry_rqst_key_size,
+ {"Volume Size", "fldb.createentry_rqst_key_size", FT_UINT32, BASE_DEC,
+ NULL, 0x0, NULL, HFILL}},
+#endif
+ {&hf_fldb_deleteentry_rqst_fsid_high,
+ {"FSID deleteentry Hi", "fldb.deleteentry_rqst_fsid_high", FT_UINT32,
+ BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_deleteentry_rqst_fsid_low,
+ {"FSID deleteentry Low", "fldb.deleteentry_rqst_fsid_low", FT_UINT32,
+ BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_deleteentry_rqst_voltype,
+ {"voltype", "fldb.deleteentry_rqst_voltype", FT_UINT32, BASE_DEC,
+ NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_deleteentry_rqst_voloper,
+ {"voloper", "fldb.deleteentry_rqst_voloper", FT_UINT32, BASE_DEC,
+ NULL, 0x0, NULL, HFILL}},
+#if 0
+ {&hf_fldb_getentrybyid_rqst_fsid_high,
+ {"FSID deleteentry Hi", "fldb.getentrybyid_rqst_fsid_high", FT_UINT32,
+ BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_getentrybyid_rqst_fsid_low,
+ {"FSID getentrybyid Low", "fldb.getentrybyid_rqst_fsid_low",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_getentrybyid_rqst_voltype,
+ {"voltype", "fldb.getentrybyid_rqst_voltype", FT_UINT32, BASE_DEC,
+ NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_getentrybyid_rqst_voloper,
+ {"voloper", "fldb.getentrybyid_rqst_voloper", FT_UINT32, BASE_DEC,
+ NULL, 0x0, NULL, HFILL}},
+#endif
+ {&hf_fldb_replaceentry_rqst_fsid_high,
+ {"FSID replaceentry Hi", "fldb.replaceentry_rqst_fsid_high",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_replaceentry_rqst_fsid_low,
+ {"FSID replaceentry Low", "fldb.replaceentry_rqst_fsid_low",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_replaceentry_rqst_voltype,
+ {"voltype", "fldb.replaceentry_rqst_voltype", FT_UINT32, BASE_DEC,
+ NULL, 0x0, NULL, HFILL}},
+#if 0
+ {&hf_fldb_replaceentry_rqst_key_t,
+ {"Key", "fldb.replaceentry_rqst_key_t", FT_STRING, BASE_NONE, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_replaceentry_rqst_key_size,
+ {"Key Size", "fldb.replaceentry_rqst_key_size", FT_UINT32, BASE_DEC,
+ NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_replaceentry_resp_st,
+ {"Error", "fldb.replaceentry_resp_st", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_replaceentry_resp_st2,
+ {"Error", "fldb.replaceentry_resp_st2", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_volumetype,
+ {"fldb_getentrybyname_resp_volumetype",
+ "fldb.getentrybyname_resp_volumetype", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_numservers,
+ {"fldb_getentrybyname_resp_numservers",
+ "fldb.getentrybyname_resp_numservers", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_sitecookies,
+ {"fldb_getentrybyname_resp_sitecookies",
+ "fldb.getentrybyname_resp_sitecookies", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_sitepartition,
+ {"fldb_getentrybyname_resp_sitepartition",
+ "fldb.getentrybyname_resp_sitepartition", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_siteflags,
+ {"fldb_getentrybyname_resp_siteflags",
+ "fldb.getentrybyname_resp_siteflags", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_sitemaxreplat,
+ {"fldb_getentrybyname_resp_sitemaxreplat",
+ "fldb.getentrybyname_resp_sitemaxreplat", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_volid_high,
+ {"fldb_getentrybyname_resp_volid_high",
+ "fldb.getentrybyname_resp_volid_high", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_volid_low,
+ {"fldb_getentrybyname_resp_volid_low",
+ "fldb.getentrybyname_resp_volid_low", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_voltype,
+ {"fldb_getentrybyname_resp_voltype",
+ "fldb.getentrybyname_resp_voltype", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_cloneid_high,
+ {"fldb_getentrybyname_resp_cloneid_high",
+ "fldb.getentrybyname_resp_cloneid_high", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_cloneid_low,
+ {"fldb_getentrybyname_resp_cloneid_low",
+ "fldb.getentrybyname_resp_cloneid_low", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_flags,
+ {"fldb_getentrybyname_resp_flags",
+ "fldb.getentrybyname_resp_flags", FT_UINT32, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_getentrybyname_resp_maxtotallat,
+ {"fldb_getentrybyname_resp_maxtotallat",
+ "fldb.getentrybyname_resp_maxtotallat", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_hardmaxtotlat,
+ {"fldb_getentrybyname_resp_hardmaxtotlat",
+ "fldb.getentrybyname_resp_hardmaxtotlat", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_minpouncedally,
+ {"fldb_getentrybyname_resp_minpouncedally",
+ "fldb.getentrybyname_resp_minpouncedally", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_defaultmaxreplat,
+ {"fldb_getentrybyname_resp_defaultmaxreplat",
+ "fldb.getentrybyname_resp_defaultmaxreplat", FT_UINT32, BASE_DEC,
+ NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_reclaimdally,
+ {"fldb_getentrybyname_resp_reclaimdally",
+ "fldb.getentrybyname_resp_reclaimdally", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_whenlocked,
+ {"fldb_getentrybyname_resp_whenlocked",
+ "fldb.getentrybyname_resp_whenlocked", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_spare1,
+ {"fldb_getentrybyname_resp_spare1",
+ "fldb.getentrybyname_resp_spare1", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_spare2,
+ {"fldb_getentrybyname_resp_spare2",
+ "fldb.getentrybyname_resp_spare2", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_spare3,
+ {"fldb_getentrybyname_resp_spare3",
+ "fldb.getentrybyname_resp_spare3", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_spare4,
+ {"fldb_getentrybyname_resp_spare4",
+ "fldb.getentrybyname_resp_spare4", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_key_t,
+ {"fldb_getentrybyname_resp_key_t",
+ "fldb.getentrybyname_resp_key_t", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_key_size,
+ {"fldb_getentrybyname_resp_key_size",
+ "fldb.getentrybyname_resp_key_size", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_getentrybyname_resp_test,
+ {"fldb_getentrybyname_resp_test", "fldb.getentrybyname_resp_test",
+ FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}},
+#endif
+ {&hf_fldb_releaselock_rqst_fsid_high,
+ {"FSID releaselock Hi", "fldb.releaselock_rqst_fsid_high", FT_UINT32,
+ BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_opnum,
+ {"Operation", "fldb.opnum", FT_UINT16, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_vldbentry_volumename,
+ {"VolumeName", "fldb.vldbentry.volumename", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_vldbentry_volumetype,
+ {"VolumeType", "fldb.vldbentry.volumetype", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_vldbentry_nservers,
+ {"Number of Servers", "fldb.vldbentry.nservers", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_afsnetaddr_type,
+ {"Type", "fldb.afsnetaddr.type", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_afsnetaddr_data,
+ {"IP Data", "fldb.afsnetaddr.data", FT_UINT8, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_vldbentry_sitepartition,
+ {"Site Partition", "fldb.vldbentry.sitepartition", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_siteflags,
+ {"Site Flags", "fldb.vldbentry.siteflags", FT_UINT32, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_vldbentry_sitemaxreplicalatency,
+ {"Site Max Replica Latench", "fldb.vldbentry.sitemaxreplatency", FT_UINT32,
+ BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_vldbentry_siteprincipal,
+ {"Principal Name", "fldb.vldbentry.siteprincipal", FT_STRING, BASE_NONE, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_vldbentry_siteowner,
+ {"Site Owner", "fldb.vldbentry.siteowner", FT_GUID, BASE_NONE, NULL, 0x0,
+ "UUID", HFILL}},
+ {&hf_fldb_vldbentry_siteobjid,
+ {"Site Object ID", "fldb.vldbentry.siteobjid", FT_GUID, BASE_NONE, NULL,
+ 0x0, "UUID", HFILL}},
+ {&hf_fldb_vldbentry_volids_high,
+ {"VolIDs high", "fldb.vldbentry.volidshigh", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_vldbentry_volids_low,
+ {"VolIDs low", "fldb.vldbentry.volidslow", FT_UINT32, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_vldbentry_voltypes,
+ {"VolTypes", "fldb.vldbentry.voltypes", FT_UINT32, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_vldbentry_cloneid_high,
+ {"CloneID High", "fldb.vldbentry.cloneidhigh", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_vldbentry_cloneid_low,
+ {"CloneID Low", "fldb.vldbentry.cloneidlow", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_afsflags_flags,
+ {"AFS Flags", "fldb.vldbentry.afsflags", FT_UINT32, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_vldbentry_maxtotallatency,
+ {"Max Total Latency", "fldb.vldbentry.maxtotallatency", FT_UINT32, BASE_DEC,
+ NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_vldbentry_hardmaxtotallatency,
+ {"Hard Max Total Latency", "fldb.vldbentry.hardmaxtotallatency", FT_UINT32,
+ BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_vldbentry_minimumpouncedally,
+ {"Minimum Pounce Dally", "fldb.vldbentry.minimumpouncedally", FT_UINT32,
+ BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_vldbentry_defaultmaxreplicalatency,
+ {"Default Max Replica Latency", "fldb.vldbentry.defaultmaxreplicalatency",
+ FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_vldbentry_reclaimdally,
+ {"Reclaim Dally", "fldb.vldbentry.reclaimdally", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_vldbentry_whenlocked,
+ {"When Locked", "fldb.vldbentry.whenlocked", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_vldbentry_spare1,
+ {"Spare 1", "fldb.vldbentry.spare1", FT_UINT32, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_vldbentry_spare2,
+ {"Spare 2", "fldb.vldbentry.spare2", FT_UINT32, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_vldbentry_spare3,
+ {"Spare 3", "fldb.vldbentry.spare3", FT_UINT32, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_vldbentry_spare4,
+ {"Spare 4", "fldb.vldbentry.spare4", FT_UINT32, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_vldbentry_lockername,
+ {"Locker Name", "fldb.vldbentry.lockername", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_vldbentry_charspares,
+ {"Char Spares", "fldb.vldbentry.charspares", FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_vlconf_cell_name,
+ {"Name", "fldb.vlconf.name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_vlconf_cell_cellid_high,
+ {"CellID High", "fldb.vlconf.cellidhigh", FT_UINT32, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_vlconf_cell_cellid_low,
+ {"CellID Low", "fldb.vlconf.cellidlow", FT_UINT32, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_vlconf_cell_numservers,
+ {"Number of Servers", "fldb.vlconf.numservers", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+ {&hf_fldb_vlconf_cell_hostname,
+ {"hostName", "fldb.vlconf.hostname", FT_STRING, BASE_NONE, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_vlconf_cell_spare1,
+ {"Spare1", "fldb.vlconf.spare1", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_vlconf_cell_spare2,
+ {"Spare2", "fldb.vlconf.spare2", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_vlconf_cell_spare3,
+ {"Spare3", "fldb.vlconf.spare3", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_vlconf_cell_spare4,
+ {"Spare4", "fldb.vlconf.spare4", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_vlconf_cell_spare5,
+ {"Spare5", "fldb.vlconf.spare5", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_flagsp,
+ {"flagsp", "fldb.flagsp", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_nextstartp,
+ {"nextstartp", "fldb.nextstartp", FT_UINT32, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_afsNameString_t_principalName_size,
+ {"Principal Name Size", "fldb.principalName_size", FT_UINT32, BASE_DEC,
+ NULL, 0x0, NULL, HFILL}},
+#if 0
+ {&hf_fldb_afsNameString_t_principalName_size2,
+ {"Principal Name Size2", "fldb.principalName_size2", FT_UINT32, BASE_DEC,
+ NULL, 0x0, NULL, HFILL}},
+#endif
+ {&hf_fldb_afsNameString_t_principalName_string,
+ {"Principal Name", "fldb.NameString_principal", FT_STRING, BASE_NONE,
+ NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_namestring,
+ {"Name string", "fldb.NameString", FT_STRING, BASE_NONE, NULL,
+ 0x0, NULL, HFILL}},
+#if 0
+ {&hf_dcerpc_error_status,
+ {"Error Status", "fldb.error_status", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+#endif
+ {&hf_error_st,
+ {"Error Status 2", "fldb.error_st", FT_UINT32, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_creationquota,
+ {"creation quota", "fldb.creationquota", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_creationuses,
+ {"creation uses", "fldb.creationuses", FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ {&hf_fldb_deletedflag,
+ {"deletedflag", "fldb.deletedflag", FT_UINT32, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+#if 0
+ {&hf_fldb_getentrybyname_rqst_key_size,
+ {"getentrybyname", "fldb.getentrybyname_rqst_key_size", FT_UINT32,
+ BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_getentrybyname_rqst_var1,
+ {"getentrybyname var1", "fldb.getentrybyname_rqst_var1", FT_UINT32,
+ BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_namestring_size,
+ {"namestring size", "fldb.namestring_size", FT_UINT32, BASE_DEC, NULL,
+ 0x0, NULL, HFILL}},
+#endif
+ {&hf_fldb_numwanted,
+ {"number wanted", "fldb.numwanted", FT_UINT32, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_spare2,
+ {"spare2", "fldb.spare2", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_spare3,
+ {"spare3", "fldb.spare3", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_spare4,
+ {"spare4", "fldb.spare4", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_spare5,
+ {"spare5", "fldb.spare5", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ {&hf_fldb_uuid_objid,
+ {"objid", "fldb.uuid_objid", FT_GUID, BASE_NONE, NULL, 0x0, "UUID",
+ HFILL}},
+ {&hf_fldb_uuid_owner,
+ {"owner", "fldb.uuid_owner", FT_GUID, BASE_NONE, NULL, 0x0, "UUID",
+ HFILL}},
+ {&hf_fldb_volid_high,
+ {"volid high", "fldb.volid_high", FT_UINT32, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_volid_low,
+ {"volid low", "fldb.volid_low", FT_UINT32, BASE_DEC, NULL, 0x0, NULL,
+ HFILL}},
+ {&hf_fldb_voltype,
+ {"voltype", "fldb.voltype", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}},
+ };
+
+ static gint *ett[] = {
+ &ett_fldb,
+ &ett_fldb_vldbentry,
+ &ett_fldb_afsnetaddr,
+ &ett_fldb_siteflags,
+ &ett_fldb_afsflags,
+ &ett_fldb_vlconf_cell,
+ &ett_fldb_afsNameString_t,
+ };
+
+ proto_fldb = proto_register_protocol ("DCE DFS Fileset Location Server", "FLDB", "fldb");
+ proto_register_field_array (proto_fldb, hf, array_length (hf));
+ proto_register_subtree_array (ett, array_length (ett));
+}
+
+
+void
+proto_reg_handoff_fldb (void)
+{
+ /* Register the protocol as dcerpc */
+ dcerpc_init_uuid (proto_fldb, ett_fldb, &uuid_fldb, ver_fldb,
+ fldb_dissectors, hf_fldb_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:
+ */