venus: Remove dedebug
[openafs.git] / src / volser / volint.xg
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  *
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 /*
11  *  Module:         Volint.xg
12  *  System:         Volser
13  *  Instituition:           ITC, CMU
14  *  Date:                   December, 88
15  */
16
17 package AFSVol
18 prefix S
19 statindex 16
20
21 #define     VOLCREATEVOLUME     100
22 #define     VOLDELETEVOLUME     101
23 #define     VOLRESTORE          102
24 #define     VOLFORWARD          103
25 #define     VOLENDTRANS         104
26 #define     VOLCLONE            105
27 #define     VOLSETFLAGS         106
28 #define     VOLGETFLAGS         107
29 #define     VOLTRANSCREATE      108
30 #define     VOLDUMP             109
31 #define     VOLGETNTHVOLUME     110
32 #define     VOLSETFORWARDING    111  /* defunct */
33 #define     VOLGETNAME          112
34 #define     VOLGETSTATUS        113
35 #define             VOLSIGRESTORE       114
36 #define     VOLLISTPARTITIONS   115
37 #define     VOLLISTVOLS         116
38 #define             VOLSETIDSTYPES      117
39 #define             VOLMONITOR          118
40 #define             VOLDISKPART 119
41 #define         VOLRECLONE      120
42 #define     VOLLISTONEVOL       121
43 #define         VOLNUKE         122
44 #define         VOLSETDATE      123
45 #define         VOLXLISTVOLS    124
46 #define         VOLXLISTONEVOL  125
47 #define     VOLSETINFO          126
48 #define     VOLXLISTPARTITIONS  127
49 #define     VOLFORWARDMULTIPLE  128
50 #define     VOLCONVERTRO        65536
51 #define     VOLGETSIZE          65537
52 #define     VOLDUMPV2           65538
53 #define     VOLDISKPART64       65539
54 #define     VOLOSDSUPPORT       65540
55 #define     VOLTRAVERSE         65541
56 #define     VOLWIPECAND         65542
57 #define     OLDVOLSALVAGE       65543
58 #define     VOLARCHCANDold      65544
59 #define     VOLSALVAGE          65545
60 #define     VOLLISTOBJECTS      65546
61 #define     VOLSPLIT            65547
62 #define     VOLARCHCAND         65548
63
64 /* Bits for flags for DumpV2 */
65 %#define     VOLDUMPV2_OMITDIRS 1
66
67 const SIZE = 1024;
68 const NMAXNSERVERS = 13;
69
70 struct volser_status {
71         afs_uint32 volID;               /* Volume id--unique over all systems */
72         afs_int32 nextUnique;           /* Next vnode uniquifier for this volume */
73         int type;                       /* readwrite, etc. */
74         afs_uint32 parentID;            /* Id of parent, if type==readonly or backup */
75         afs_uint32 cloneID;             /* Latest read-only clone, if type==readwrite */
76         afs_uint32 backupID;            /* Latest backup copy of this read write volume */
77         afs_uint32 restoredFromID;      /* The id in a dump this volume was restored from--used simply
78                                    to make sure that an incremental dump is not restored on top
79                                    of something inappropriate:  Note:  this field itself is NEVER
80                                    dumped!!! */
81         afs_int32 maxQuota;             /* Quota maximum, 1K blocks */
82         afs_int32 minQuota;             /* Quota minimum, 1K blocks */
83         afs_int32 owner;                /* The person responsible for this volume */
84         afs_int32 creationDate;         /* Creation date for a read/write
85                                    volume; cloning date for original copy of
86                                    a readonly volume (replicated volumes have
87                                    the same creation date) */
88         afs_int32 accessDate;           /* Last access time by a user, large granularity */
89         afs_int32 updateDate;           /* Last modification by user */
90         afs_int32 expirationDate;               /* 0 if it never expires */
91         afs_int32 backupDate;           /* last time a backup clone was taken */
92         afs_int32 copyDate;             /* Time that this copy of this volume was created */
93 };
94
95 struct destServer {
96     afs_int32 destHost;
97     afs_int32 destPort;
98     afs_int32 destSSID;
99 };
100
101
102 struct volintInfo {
103 #define VNAMESIZE 32
104     char name[VNAMESIZE];
105     afs_uint32 volid;           /* volume's id */
106     afs_int32 type;             /* read-only, read-write, backup */
107     afs_uint32 backupID;
108     afs_uint32 parentID;
109     afs_uint32 cloneID;
110     afs_int32 status;
111     afs_int32 copyDate;
112     unsigned char inUse;
113     unsigned char needsSalvaged;
114     unsigned char destroyMe;
115     afs_int32 creationDate;
116     afs_int32 accessDate;
117     afs_int32 updateDate;
118     afs_int32 backupDate;
119     int dayUse;
120     int filecount;
121     int maxquota;
122     int size;
123     afs_int32 flags;            /* used by the backup system */
124     afs_int32 spare0;           /* Used to hold the minquota value */
125     afs_int32 spare1;           /* Used to hold the weekuse value */
126     afs_int32 spare2;           /* Used to hold volUpdateCounter */
127     afs_int32 spare3;
128 };
129
130 /*
131  * Define some values needed for the detailed volume info structure.
132  */
133 const VOLINT_STATS_NUM_RWINFO_FIELDS = 4;
134
135 const VOLINT_STATS_SAME_NET      = 0;   /*Within same site (total)*/
136 const VOLINT_STATS_SAME_NET_AUTH = 1;   /*Within same site (authenticated);
137                                           (must be 1 more than above)*/
138 const VOLINT_STATS_DIFF_NET      = 2;   /*From external site (total)*/
139 const VOLINT_STATS_DIFF_NET_AUTH = 3;   /*From external site (authenticated)
140                                           (must be 1 more than above)*/
141
142 const VOLINT_STATS_NUM_TIME_RANGES = 6;
143
144 const VOLINT_STATS_TIME_CAP_0   =     60;  /*60 seconds*/
145 const VOLINT_STATS_TIME_CAP_1   =    600;  /*10 minutes, in seconds*/
146 const VOLINT_STATS_TIME_CAP_2   =   3600;  /*1 hour, in seconds*/
147 const VOLINT_STATS_TIME_CAP_3   =  86400;  /*1 day, in seconds*/
148 const VOLINT_STATS_TIME_CAP_4   = 604800;  /*1 week, in seconds*/
149
150 const VOLINT_STATS_NUM_TIME_FIELDS = 6;
151
152 const VOLINT_STATS_TIME_IDX_0 = 0;      /*0 secs to 60 secs*/
153 const VOLINT_STATS_TIME_IDX_1 = 1;      /*1 min to 10 mins*/
154 const VOLINT_STATS_TIME_IDX_2 = 2;      /*10 mins to 60 mins*/
155 const VOLINT_STATS_TIME_IDX_3 = 3;      /*1 hr to 24 hrs*/
156 const VOLINT_STATS_TIME_IDX_4 = 4;      /*1 day to 7 days*/
157 const VOLINT_STATS_TIME_IDX_5 = 5;      /*Greater than 1 week*/
158
159 /*
160  * More detailed volume info
161  */
162 struct volintXInfo {
163     char name[VNAMESIZE];
164     afs_uint32 volid;                   /*Volume's ID*/
165     afs_int32 type;                     /*RWVOL, ROVOL, BACKVOL*/
166     afs_uint32 backupID;                /*Backup volume ID*/
167     afs_uint32 parentID;                /*Parent volume ID*/
168     afs_uint32 cloneID;         /*Clone volume ID*/
169     afs_int32 status;           /*Volume status*/
170     afs_int32 copyDate;         /*Date when this volume INSTANCE created*/
171     unsigned char inUse;        /*In use at time of last crash?*/
172     afs_int32 creationDate;             /*Date when this volume was created*/
173     afs_int32 accessDate;               /*Date when this volume was last accessed*/
174     afs_int32 updateDate;               /*Date when this volume was last updated*/
175     afs_int32 backupDate;               /*Date when this volume was last backed up*/
176     int dayUse;                 /*Number of accesses since midnight*/
177     int filecount;              /*Number of files in the volume*/
178     int maxquota;               /*Max volume quota, in Kbytes*/
179     int size;                   /*Current size in Kbytes*/
180     /*
181      * Detailed statistics for reads/writes and authorship.
182      */
183     afs_int32 stat_reads[VOLINT_STATS_NUM_RWINFO_FIELDS];
184     afs_int32 stat_writes[VOLINT_STATS_NUM_RWINFO_FIELDS];
185     afs_int32 stat_fileSameAuthor[VOLINT_STATS_NUM_TIME_FIELDS];
186     afs_int32 stat_fileDiffAuthor[VOLINT_STATS_NUM_TIME_FIELDS];
187     afs_int32 stat_dirSameAuthor[VOLINT_STATS_NUM_TIME_FIELDS];
188     afs_int32 stat_dirDiffAuthor[VOLINT_STATS_NUM_TIME_FIELDS];
189 };
190
191 struct transDebugInfo {
192         afs_int32 tid;           /*transaction id */
193         afs_int32 time;  /* time transaction was last active (for timeouts) */
194         afs_int32 creationTime;    /* time the transaction started */
195         afs_int32 returnCode;       /* transaction error code */
196         afs_uint32 volid;       /*sequence number of the next packet to be read*/ /* open volume's id */
197         afs_int32 partition;        /* open volume's partition */
198         short iflags;       /* initial attach mode flags (IT*) */
199         char vflags;        /* current volume status flags (VT*) */
200         char tflags;        /* transaction flags (TT*) */
201         char lastProcName[30];  /* name of the last procedure which used transaction */
202         int callValid;  /*flag which determines if following data is valid*/
203         afs_int32 readNext;     /*sequence number of the next packet to be read*/
204         afs_int32 transmitNext; /*sequence number of the next packet to be transmitted*/
205         int lastSendTime;
206         int lastReceiveTime;
207 };
208
209 struct pIDs {
210         afs_int32 partIds[26];
211 };
212
213 struct diskPartition {
214         char    name[32];       /* Mounted partition name */
215         char    devName[32];
216         int     lock_fd;        /* assigned from DiskPartition FD_t
217                                    which is 64-bit HANDLE on Windows */
218         int     totalUsable;
219         int     free;
220         int     minFree;
221
222 };
223
224 struct diskPartition64 {
225         char            name[256];      /* Mounted partition name */
226         char            devName[256];
227         int             lock_fd;        /* assigned from DiskPartition64 FD_t
228                                            which is a 64-bit HANDLE on Windows */
229         afs_int64       totalUsable;
230         afs_int64       free;
231         afs_int64       minFree;
232 };
233
234 struct restoreCookie {
235         char name[32];
236         afs_int32 type;
237         afs_uint32 clone;
238         afs_uint32 parent;
239 };
240
241 struct replica {
242         afs_int32 trans;
243         struct destServer server;
244 };
245
246 /*  Various size parameters of the volume  */
247 struct volintSize {
248     afs_uint64 dump_size;
249 };
250
251 typedef  replica manyDests<NMAXNSERVERS>;
252 typedef  afs_int32 manyResults<>;
253 typedef  transDebugInfo transDebugEntries<>;
254 typedef  volintInfo volEntries<>;
255 typedef  afs_int32 partEntries<>;
256 typedef  volintXInfo volXEntries<>;
257
258 proc CreateVolume(
259   IN afs_int32 partition,
260   string name<VNAMESIZE>,
261   IN afs_int32 type,
262   IN afs_uint32 parent,
263   INOUT afs_uint32 *volid,
264   OUT afs_int32 *trans
265 ) = VOLCREATEVOLUME;
266
267 proc DeleteVolume(
268   IN afs_int32 trans
269 ) = VOLDELETEVOLUME;
270
271 proc Restore(
272   IN afs_int32 toTrans,
273   IN afs_int32 flags,
274   IN struct restoreCookie *cookie
275 ) split = VOLRESTORE;
276
277 proc Forward(
278   IN afs_int32 fromTrans,
279   IN afs_int32 fromDate,
280   IN struct destServer *destination,
281   IN afs_int32 destTrans,
282   IN struct restoreCookie *cookie
283 ) = VOLFORWARD;
284
285 proc EndTrans(
286   IN afs_int32 trans,
287   OUT afs_int32 *rcode
288 ) = VOLENDTRANS;
289
290 proc Clone(
291   IN afs_int32 trans,
292   IN afs_uint32 purgeVol,
293   IN afs_int32 newType,
294   IN string newName<VNAMESIZE>,
295   INOUT afs_uint32 *newVol
296 ) = VOLCLONE;
297
298 proc SetFlags(
299   IN afs_int32 trans,
300   IN afs_int32 flags
301 ) = VOLSETFLAGS;
302
303 proc GetFlags(
304   IN afs_int32 trans,
305   OUT afs_int32 *flags
306 ) = VOLGETFLAGS;
307
308 proc TransCreate(
309   IN afs_uint32 volume,
310   IN afs_int32 partition,
311   IN afs_int32 flags,
312   OUT afs_int32 *trans
313 ) = VOLTRANSCREATE;
314
315 proc Dump(
316   IN afs_int32 fromTrans,
317   IN afs_int32 fromDate
318 ) split = VOLDUMP;
319
320 proc GetNthVolume(
321   IN afs_int32 index,
322   OUT afs_uint32 *volume,
323   OUT afs_int32 *partition
324 ) = VOLGETNTHVOLUME;
325
326 proc SetForwarding(
327   IN afs_int32 tid,
328   IN afs_int32 newsite
329 ) = VOLSETFORWARDING;
330
331 proc GetName(
332   IN afs_int32 tid,
333   OUT string tname<256>
334 ) = VOLGETNAME;
335
336 proc GetStatus(
337   IN afs_int32 tid,
338   OUT struct volser_status *status
339 ) = VOLGETSTATUS;
340
341 proc SignalRestore(
342   IN string name<VNAMESIZE>,
343   int type,
344   afs_uint32 pid,
345   afs_uint32 cloneid
346 ) = VOLSIGRESTORE;
347
348 proc ListPartitions(
349   OUT struct pIDs *partIDs
350 ) = VOLLISTPARTITIONS;
351
352 proc ListVolumes(
353   IN afs_int32 partID,
354   afs_int32 flags,
355   OUT volEntries *resultEntries
356 ) = VOLLISTVOLS;
357
358 proc SetIdsTypes(
359   IN afs_int32 tId,
360   string name<VNAMESIZE>,
361   afs_int32 type,
362   afs_uint32 pId,
363   afs_uint32 cloneId,
364   afs_uint32 backupId
365 ) = VOLSETIDSTYPES;
366
367 proc Monitor(
368   OUT transDebugEntries *result
369 ) = VOLMONITOR;
370
371 proc PartitionInfo(
372   IN string name<4096>,
373   OUT struct diskPartition *partition
374 ) = VOLDISKPART;
375
376 proc ReClone(
377   IN afs_int32 tid,
378   afs_uint32 cloneID
379 ) = VOLRECLONE;
380
381 proc ListOneVolume(
382   IN afs_int32 partID,
383   afs_uint32 volid,
384   OUT volEntries *resultEntries
385 ) = VOLLISTONEVOL;
386
387 proc NukeVolume(
388   IN afs_int32 partID,
389   afs_uint32 volID
390 ) = VOLNUKE;
391
392 proc SetDate(
393   IN afs_int32 tid,
394   afs_int32 newDate
395 ) = VOLSETDATE;
396
397 proc XListVolumes(
398   IN afs_int32 partID,
399   afs_int32 flags,
400   OUT volXEntries *resultXEntriesP
401 ) = VOLXLISTVOLS;
402
403 proc XListOneVolume(
404   IN afs_int32 partID,
405   afs_uint32 volid,
406   OUT volXEntries *resultXEntries
407 ) = VOLXLISTONEVOL;
408
409 proc SetInfo(
410   IN afs_int32 tid,
411   struct volintInfo *status
412 ) = VOLSETINFO;
413
414 proc XListPartitions(
415   OUT struct partEntries *partIDs
416 ) = VOLXLISTPARTITIONS;
417
418 proc ForwardMultiple(
419   IN afs_int32 fromTrans,
420   IN afs_int32 fromDate,
421   IN manyDests *destinations,
422   IN afs_int32 spare,
423   IN struct restoreCookie *cookie,
424   OUT manyResults *results
425 ) = VOLFORWARDMULTIPLE;
426
427 proc ConvertROtoRWvolume(
428   IN afs_int32 partid,
429   IN afs_uint32 volid
430 ) = VOLCONVERTRO;
431
432 proc GetSize(
433   IN afs_int32 fromTrans,
434   IN afs_int32 fromDate,
435   OUT struct volintSize *size
436 ) = VOLGETSIZE;
437
438 proc DumpV2(
439   IN afs_int32 fromTrans,
440   IN afs_int32 fromDate,
441   IN afs_int32 flags
442 ) split = VOLDUMPV2;
443
444 proc PartitionInfo64(
445     IN string name<4096>,
446     OUT struct diskPartition64 *partition
447 ) = VOLDISKPART64;
448
449 proc SplitVolume (
450   IN afs_uint32 vid,
451   IN afs_uint32 newid,
452   IN afs_uint32 where,
453   IN afs_int32 verbose
454 ) split = VOLSPLIT;