initial checkin of modified idl file for autogenerating the BUTC interface

svn path=/trunk/; revision=13281
This commit is contained in:
Ronnie Sahlberg 2005-02-04 04:58:03 +00:00
parent 975a76b44f
commit 4fead805d5
5 changed files with 621 additions and 0 deletions

View File

@ -0,0 +1,16 @@
# $Id: Makefile 13071 2005-01-16 10:19:21Z guy $
DISSECTOR_FILES=packet-dcerpc-butc.c packet-dcerpc-butc.h
all: generate_dissector
generate_dissector: $(DISSECTOR_FILES)
$(DISSECTOR_FILES): ../idl2eth butc.idl butc.cnf template.c template.h
../idl2eth butc
clean:
rm -f ETH_* $(DISSECTOR_FILES)
copy_files: generate_dissector
cp $(DISSECTOR_FILES) ../..

View File

@ -0,0 +1,6 @@
#
#
TYPE butcNameString_t butc_dissect_NameString_t FT_STRING BASE_NONE 0 NULL 4
#
UNION_TAG_SIZE tc_statusInfoSwitch 4
#

View File

@ -0,0 +1,482 @@
/* This idl file originally came from the DCE project but has been
significantly refactored to pass through the idl2eth idl-lite
compiler.
DCE has been released as LGPL, hats off to TheOpenGroup
The original copyright of the IDL file follos below:
*/
/*
* @OSF_COPYRIGHT@
* COPYRIGHT NOTICE
* Copyright (c) 1990, 1991, 1992, 1993, 1994 Open Software Foundation, Inc.
* ALL RIGHTS RESERVED (DCE). See the file named COPYRIGHT.DCE for
* the full copyright text.
*/
/*
* HISTORY
* $Log: butc.idl,v $
* Revision 1.1.41.1 1996/10/02 17:05:24 damon
* Newest DFS from Transarc
* [1996/10/01 18:05:16 damon]
*
* Revision 1.1.35.2 1994/06/09 13:52:46 annie
* fixed copyright in src/file
* [1994/06/08 21:26:40 annie]
*
* Revision 1.1.35.1 1994/02/04 20:06:46 devsrc
* Merged from 1.0.3a to 1.1
* [1994/02/04 15:06:52 devsrc]
*
* Revision 1.1.33.1 1993/12/07 17:13:22 jaffe
* 1.0.3a update from Transarc
* [1993/12/03 12:59:50 jaffe]
*
* Revision 1.1.2.5 1993/01/18 20:47:57 cjd
* embedded copyright notice
* [1993/01/18 17:33:13 cjd]
*
* Revision 1.1.2.4 1993/01/13 15:53:56 shl
* Transarc delta: cfe-ot6054-genl-and-i18n-spares 1.1
* Selected comments:
* Add spares to several RPC structures, with two goals:
* - general future usage
* - allow for at least some internationalization designs
* The only tricky part of this work is that the on-the-wire representation for
* directory contents is expanded.
* Transarc delta: vijay-ot6381-correct-handling-of-device-queue-lock 1.4
* Selected comments:
*
* The aim of this delta is to get bak restore to succeed. The problems in restore
* were some spurious thread exceptions and assertions that made bak dump core.
* Upon investigation it turned out that there were some locking problems in
* backup and butc. The delta cleans up locking in backup and butc.
* The delta is not ready for export. Much more needs to be done to get all the
* locking issues right. This is just a checkpoint.
* Second set of changes to get locking issues in order. This time the changes
* are mostly in bakserver. The changes introduced are
* 1. Establish a global lock so that two RPCs do not interfere with each other.
* This was introduced because there are some global data structures in
* backup that might get affected. These global structures now have
* individual locks to serialize changes. The global lock in temporary, and
* will go away once we have serialized all accesses to all global data
* structures.
* 2. Disable cancels in bakserver RPCs. Care is taken to not disable cancels in
* operations that can be cancelled. There is some more work that needs to be
* done in this area.
* 3. Accesses to the database are controlled by memoryDB.lock. The accesses are
* by means of dbread and dbwrite. The hash tables too are protected by this
* mechanism.
* 4. Changes to the backup database dump code to simplify the dump operation. In
* particular, the Unix pipe mechanism is used to synchronize reader and
* writer without need for condition variables.
* 5. Get rid of any pthread_mutex and pthread_cond operations. Use afslk and
* afsos routines instead.
* 6. Continue the work described by the previous revision of the delta in bak
* and butc. This should be it for changes in bak and butc.
* Fix compilation problems on the RIOS.
* This is hopefully the final revision of this delta. The fixes here are
* 1. Changes to the bakserver and butc RPC interfaces.
* The RPCs that handle variable size arrays now use conformant arrays.
* This avoids allocating lots of memory on the client thread stack which
* was the cause of the exceptions in restoreft. The server allocates
* memory which is freed by the server stub on the way out. The client thread
* frees the memory allocated by the client stub.
* 2. get database dump and restore to handle status correctly.
* 3. Get the locking hierarchy right in bakserver, bak and butc.
* 4. Other minor nits.
* There is still a problem with scantape -dbadd that has to be addressed. With
* this delta, all backup commands should work when used in a straightforward
* manner. Some error cases are still not handled properly though. Subsequent
* deltas would fix those.
* Transarc delta: vijay-ot6604-butc-add-spares 1.1
* Selected comments:
*
* Add spares to butc structures wherever necessary.
* [1993/01/12 18:39:46 shl]
*
* Revision 1.1.2.3 1992/11/24 15:42:03 bolinger
* Change include file install directory from .../afs to .../dcedfs.
* [1992/11/22 16:10:10 bolinger]
*
* Revision 1.1.2.2 1992/08/31 18:37:26 jaffe
* Transarc delta: cfe-ot4029-portable-rpc-data-types 1.2
* Selected comments:
* If ``long'' could possibly mean ``64 bits'' any time soon, we need to keep
* our RPC interfaces from breaking.
* More of the same. Forgot a couple of .idl files, and needed to change
* a couple of procedure signatures to match.
* forgot this one too
* [1992/08/28 20:59:01 jaffe]
*
* Revision 1.1 1992/01/19 02:57:17 devrcs
* Initial revision
*
* $EndLog$
*/
/* changed to the following types:
time_t 4 bytes, aligned at 4 bytes holding a unix time_t
uint32 4 byte unsigned integer
int32 4 byte signed integer
renamed error_status_t WERROR a 32bit integer ststus code
removed handle_t it has no wire encoding
rewrote the unions so that idl2eth can parse them
changed all varying strings to the type butcNameString_t which is
implemented in the template
changed the structs so they are compatible with idl2eth
afshyper is called udlong in idl2eth 8 bytes, aligned at 4 bytes
added afsnetaddr definition
*/
[
uuid("1d193c08-000b-11ca-ba1d-02608c2ea96e"),
version(4.0),
/*provider_version(1)*/
pointer_default(ptr) /* All pointers are by default Full pointers */
] interface butc
{
const long TC_DEFAULT_STACK_SIZE = 153600; /* stack size for tc threads */
const long TC_MAXGENNAMELEN = 512; /* length of generic name */
const long TC_MAXDUMPPATH = 256; /* dump path names*/
const long TC_MAXNAMELEN = 128; /* name length */
const long TC_MAXFORMATLEN = 100; /*size of the format statement */
const long TC_MAXHOSTLEN = 128; /*for server/machine names */
const long TC_MAXTAPELEN = 256; /*max tape name allowed */
const long TC_STAT_DONE = 1; /* all done */
const long TC_STAT_OPRWAIT = 2; /* waiting for user interaction */
const long TC_STAT_DUMP = 4; /* true if dump, false if restore */
const long TC_STAT_ABORTED = 8; /* the operation was aborted */
const long TC_STAT_ERROR = 16; /* error ocuured in the operation */
const long TSK_STAT_FIRST = 0x1; /* get id of first task */
const long TSK_STAT_END = 0x2; /* no more tasks */
const long TSK_STAT_NOTFOUND= 0x4; /* couldn't find task id requested */
const long TCOP_NONE = 0;
const long TCOP_READLABEL = 1;
const long TCOP_LABELTAPE = 2;
const long TCOP_DUMP = 3;
const long TCOP_RESTORE = 4;
const long TCOP_SCANTAPE = 5;
const long TCOP_SAVEDB = 6;
const long TCOP_RESTOREDB = 7;
const long TCOP_STATUS = 8;
const long TCOP_SPARE = 9;
/*typedef [string] byte butcNameString_t[TC_MAXGENNAMELEN];*/
typedef struct {
uint16 type;
uint8 data[14];
} afsNetAddr;
typedef struct {
udlong vid; /* volume to dump */
butcNameString_t name; /* name of volume whose clone is to
be dumped*/
int32 partition; /* partition at which to find the volume */
time_t date; /* date from which to do the dump */
time_t cloneDate; /* clone date of the volume */
afsNetAddr hostAddr; /* file server for this volume */
uint32 spare1;
uint32 spare2;
uint32 spare3;
uint32 spare4;
} tc_dumpDesc;
typedef struct {
int32 frag; /* fragment number, 1..n */
butcNameString_t tapeName; /*name of tape frag is on*/
int32 position; /*start position of frag on tape */
udlong origVid; /* original volume id */
udlong vid; /* 0 means allocate new volid */
int32 partition; /* where to restore the volume */
int32 flags; /* flags */
afsNetAddr hostAddr; /* file server to restore volume to */
uint32 realDumpId; /* dump id associated with this tape */
uint32 spare2;
uint32 spare3;
uint32 spare4;
butcNameString_t oldName; /* volume whose clone is to
be dumped */
butcNameString_t newName; /* new name suffix */
} tc_restoreDesc;
/*describes the current status of a dump */
typedef struct {
int32 dumpID; /* dump id we're returning */
int32 bytesDumped; /* bytes dumped so far */
udlong volumeBeingDumped; /* guess ?*/
int32 numVolErrs; /* # of volumes that had errors */
int32 flags; /* true if the dump is done */
uint32 spare1;
uint32 spare2;
uint32 spare3;
uint32 spare4;
} tc_dumpStat;
/*identifier for a tape */
typedef struct {
uint32 size; /* size of tape in bytes */
uint32 size_ext;
uint32 spare1;
uint32 spare2;
uint32 spare3;
uint32 spare4;
uint32 nameLen; /* length of tape name */
butcNameString_t name;
} tc_tapeLabel;
/* restore flags */
const long TC_RESTORE_CREATE = 1; /* create new volume; fail if there */
const long TC_RESTORE_INCR = 2; /* incremental, must already exist */
typedef struct { /* describes a tape sequence */
int32 id; /* unique id of tapeSet,
assigned by budb */
butcNameString_t tapeServer; /* name of server where
this tape is */
butcNameString_t format; /* using printf to make
tape name */
int32 maxTapes; /* maximum number of tapes in seq. */
int32 a; int32 b; /* linear transforms for tape */
int32 expDate; /* expiration date */
int32 expType; /* absolute or relative expiration */
uint32 spare1;
uint32 spare2;
uint32 spare3;
uint32 spare4;
} tc_tapeSet;
/* identifies the tape coordinator interface */
typedef struct {
int32 tcVersion; /* for the interface & this struct */
uint32 spare1;
uint32 spare2;
uint32 spare3;
uint32 spare4;
} tc_tcInfo;
typedef struct {
uint32 tc_restoreArray_len; /* count of restore descriptors */
[size_is(tc_restoreArray_len),ptr] tc_restoreDesc tc_restoreArray_val[*];
} tc_restoreArray;
typedef struct {
uint32 tc_dumpArray_len; /* count of dump descriptors */
[size_is(tc_dumpArray_len),ptr] tc_dumpDesc tc_dumpArray[*];
} tc_dumpArray;
/* interface structure */
typedef struct {
butcNameString_t dumpPath; /* full dump path */
butcNameString_t volumeSetName; /* volume set name */
butcNameString_t dumpName; /* volset.dump */
tc_tapeSet tapeSet;
int32 parentDumpId;
int32 dumpLevel;
uint32 spare1;
uint32 spare2;
uint32 spare3;
uint32 spare4;
} tc_dumpInterface;
/* The status structure returns information about the task running in butc.
It contains a union that returns the info about the particular operation
currently running in butc.
*/
typedef struct {
uint32 nKBytes; /* bytes xferred */
butcNameString_t volumeName; /* current volume (if any) */
int32 volsFailed; /* # operation failures */
uint32 spare1;
} tc_statusInfoSwitchVol;
typedef struct {
tc_tapeLabel tapeLabel;
uint32 spare1;
} tc_statusInfoSwitchLabel;
/* 32bit tag */
typedef union {
[case(TCOP_NONE)] uint32 none;
[case(TCOP_DUMP)] tc_statusInfoSwitchVol vol;
[case(TCOP_RESTORE)] tc_statusInfoSwitchVol vol;
[case(TCOP_LABELTAPE)] tc_statusInfoSwitchLabel label;
[case(TCOP_READLABEL)] tc_statusInfoSwitchLabel label;
[case(TCOP_SCANTAPE)] uint32 spare1;
[case(TCOP_STATUS)] uint32 spare2;
[case(TCOP_SAVEDB)] uint32 spare3;
[case(TCOP_RESTOREDB)] uint32 spare4;
[case(TCOP_SPARE)] uint32 spare5;
} tc_statusInfoSwitch;
typedef struct {
/* general info */
butcNameString_t taskName; /* task name */
uint32 flags; /* as above */
time_t lastPolled; /* last successful poll */
/* op specific info */
tc_statusInfoSwitch info;
uint32 taskId;
/* nominal spares */
uint32 spare2;
uint32 spare3;
uint32 spare4;
} tciStatusS;
/*
* Procedure Definitions
*/
/* Start a dump, given a dump set name, a tape set name and the volumes to
* dump.
*/
/*
* provider_version(1)
*/
WERROR BUTC_PerformDump
(
[ref, in] tc_dumpInterface *tcdiPtr,
[ref, in] tc_dumpArray *dumps,
[ref, out] int32 *dumpID
);
/* Start a restore, given a dump set name, a tape set name and the volumes to
* dump.
*/
/*
* provider_version(1)
*/
WERROR BUTC_PerformRestore
(
[in] butcNameString_t *dumpSetName,
[ref, in] tc_restoreArray *restores,
[ref, out] int32 *dumpID
);
/* abort a dump */
/*
* provider_version(1)
*/
WERROR BUTC_AbortDump
(
[in] int32 dumpID
);
/*
* provider_version(1)
*/
WERROR BUTC_LabelTape
(
[ref, in] tc_tapeLabel *label,
[ref, out] uint32 *taskId
);
/*
* provider_version(1)
*/
WERROR BUTC_ReadLabel
(
[ref, out] uint32 *taskId /* unused */
);
/*
* provider_version(1)
*/
WERROR BUTC_ScanDumps
(
[in] int32 addDbFlag,
[ref, out] uint32 *taskId
);
/* For returning information about the butc interface.
* Currently this is just the version number
*/
/*
* provider_version(1)
*/
WERROR BUTC_TCInfo
(
[ref, out] tc_tcInfo *tciptr
);
/* for database dump/restores */
/*
* provider_version(1)
*/
WERROR BUTC_SaveDb
(
[ref, out] uint32 *taskId
);
/*
* provider_version(1)
*/
WERROR BUTC_RestoreDb
(
[ref, out] uint32 *taskId
);
/* new status management */
/*
* provider_version(1)
*/
WERROR BUTC_EndStatus
(
[in] uint32 taskId
);
/*
* provider_version(1)
*/
WERROR BUTC_GetStatus
(
[in] uint32 taskId,
[ref, out] tciStatusS *statusPtr
);
/*
* provider_version(1)
*/
WERROR BUTC_RequestAbort
(
[in] uint32 taskId
);
/*
* provider_version(1)
*/
WERROR BUTC_ScanStatus
(
[ref, in, out] uint32 *taskId,
[ref, out] tciStatusS *statusPtr,
[ref, in, out] uint32 *flags
);
/*
* provider_version(1)
*/
WERROR BUTC_GetServerInterfaces
(
/* [ref, in, out] dfs_interfaceList *serverInterfacesP*/
);
}

View File

@ -0,0 +1,84 @@
/* DO NOT EDIT
* This dissector is autogenerated
*/
/* packet-dcerpc-butc.c
* Routines for BUTC packet disassembly
*
* $Id: packet-dcerpc-butc.c 11592 2004-08-03 02:28:49Z guy $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
* Copyright 1998 Gerald Combs
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <glib.h>
#include <string.h>
#include <epan/packet.h>
#include "packet-dcerpc.h"
#include "packet-dcerpc-nt.h"
#include "packet-windows-common.h"
#include "packet-dcerpc-butc.h"
static int proto_butc = -1;
ETH_HF
ETH_ETT
static int
butc_dissect_NameString_t(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param _U_)
{
offset=dissect_ndr_vstring(tvb, offset, pinfo, tree, drep, 1, hf_index, FALSE, NULL);
return offset;
}
ETH_CODE
void
proto_register_butc(void)
{
static hf_register_info hf[] = {
ETH_HFARR
};
static gint *ett[] = {
ETH_ETTARR
};
proto_butc = proto_register_protocol(
"DCE/RPC BUTC",
"BUTC", "butc");
proto_register_field_array(proto_butc, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
}
static dcerpc_sub_dissector function_dissectors[] = {
ETH_FT
{ 0, NULL, NULL, NULL },
};
void
proto_reg_handoff_butc(void)
{
ETH_HANDOFF
}

View File

@ -0,0 +1,33 @@
/* DO NOT EDIT
* This dissector is autogenerated
*/
/* packet-dcerpc-butc.h
* Routines for BUTC packet disassembly
*
* $Id: packet-dcerpc-butc.h 11410 2004-07-18 18:06:47Z gram $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
* Copyright 1998 Gerald Combs
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __PACKET_DCERPC_BUTC_H
#define __PACKET_DCERPC_BUTC_H
ETH_HDR
#endif /* packet-dcerpc-butc.h */