Standardize License information
[openafs.git] / src / libadmin / vos / afs_vosAdmin.h
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 #ifndef TRANSARC_AFS_VOS_ADMIN_H
11 #define TRANSARC_AFS_VOS_ADMIN_H
12
13 #include <afs/param.h>
14 #include <afs/afs_Admin.h>
15 #include <sys/types.h>
16 #ifdef AFS_NT40_ENV
17 #include <winsock2.h>
18 #else
19 #include <sys/socket.h>
20 #endif
21
22 #define VOS_MAX_PARTITION_NAME_LEN 32
23 #define VOS_MAX_VOLUME_NAME_LEN 32
24 #define VOS_MAX_VOLUME_TYPES 3
25 #define VOS_MAX_REPLICA_SITES 13
26 #define VOS_MAX_SERVER_ADDRESS 16
27
28 typedef enum {
29   VOS_NORMAL,
30   VOS_FORCE
31 } vos_force_t, *vos_force_p;
32
33 typedef enum {
34   VOS_INCLUDE,
35   VOS_EXCLUDE
36 } vos_exclude_t, *vos_exclude_p;
37
38 typedef enum {
39   VOS_OK,
40   VOS_SALVAGE,
41   VOS_NO_VNODE,
42   VOS_NO_VOL,
43   VOS_VOL_EXISTS,
44   VOS_NO_SERVICE,
45   VOS_OFFLINE,
46   VOS_ONLINE,
47   VOS_DISK_FULL,
48   VOS_OVER_QUOTA,
49   VOS_BUSY,
50   VOS_MOVED
51 } vos_volumeStatus_t, *vos_volumeStatus_p;
52
53 typedef enum {
54   VOS_READ_WRITE_VOLUME,
55   VOS_READ_ONLY_VOLUME,
56   VOS_BACKUP_VOLUME
57 } vos_volumeType_t, *vos_volumeType_p;
58
59 typedef struct vos_fileServerEntry {
60     int serverAddress[ VOS_MAX_SERVER_ADDRESS ];
61     int count;
62 } vos_fileServerEntry_t, *vos_fileServerEntry_p;
63
64 typedef enum {
65   VOS_VOLUME_READ_WRITE_STATS_SAME_NETWORK,
66   VOS_VOLUME_READ_WRITE_STATS_SAME_NETWORK_AUTHENTICATED,
67   VOS_VOLUME_READ_WRITE_STATS_DIFFERENT_NETWORK,
68   VOS_VOLUME_READ_WRITE_STATS_DIFFERENT_NETWORK_AUTHENTICATED
69 } vos_volumeReadWriteStats_t, *vos_volumeReadWriteStats_p;
70
71 #define VOS_VOLUME_READ_WRITE_STATS_NUMBER 4
72
73 typedef enum {
74   VOS_VOLUME_TIME_STATS_0_TO_60_SECONDS,
75   VOS_VOLUME_TIME_STATS_1_TO_10_MINUTES,
76   VOS_VOLUME_TIME_STATS_10_TO_60_MINUTES,
77   VOS_VOLUME_TIME_STATS_1_TO_24_HOURS,
78   VOS_VOLUME_TIME_STATS_1_TO_7_DAYS,
79   VOS_VOLUME_TIME_STATS_GREATER_THAN_7_DAYS
80 } vos_volumeTimeStats_t, *vos_volumeTimeStats_p;
81
82 #define VOS_VOLUME_TIME_STATS_NUMBER 6
83
84 typedef struct vos_volumeEntry {
85     unsigned int id;
86     unsigned int readWriteId;
87     unsigned int readOnlyId;
88     unsigned int backupId;
89     unsigned long creationDate;
90     unsigned long lastAccessDate;
91     unsigned long lastUpdateDate;
92     unsigned long lastBackupDate;
93     unsigned long copyCreationDate;
94     int accessesSinceMidnight;
95     int fileCount;
96     int maxQuota;
97     int currentSize;
98     int readStats[VOS_VOLUME_READ_WRITE_STATS_NUMBER];
99     int writeStats[VOS_VOLUME_READ_WRITE_STATS_NUMBER];
100     int fileAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_NUMBER];
101     int fileAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_NUMBER];
102     int dirAuthorWriteSameNetwork[VOS_VOLUME_TIME_STATS_NUMBER];
103     int dirAuthorWriteDifferentNetwork[VOS_VOLUME_TIME_STATS_NUMBER];
104     vos_volumeStatus_t status;
105     vos_volumeStatus_t volumeDisposition;
106     vos_volumeType_t type;
107     char name[VOS_MAX_VOLUME_NAME_LEN];
108 } vos_volumeEntry_t, *vos_volumeEntry_p;
109
110 typedef struct vos_partitionEntry {
111     char name[VOS_MAX_PARTITION_NAME_LEN];
112     char deviceName[VOS_MAX_PARTITION_NAME_LEN];
113     int lockFileDescriptor;
114     int totalSpace;
115     int totalFreeSpace;
116 } vos_partitionEntry_t, *vos_partitionEntry_p;
117
118 typedef enum {
119   VOS_VLDB_ENTRY_OK = 0x1,
120   VOS_VLDB_ENTRY_MOVE = 0x2,
121   VOS_VLDB_ENTRY_RELEASE = 0x4,
122   VOS_VLDB_ENTRY_BACKUP = 0x8,
123   VOS_VLDB_ENTRY_DELETE = 0x10,
124   VOS_VLDB_ENTRY_DUMP = 0x20,
125   VOS_VLDB_ENTRY_LOCKED = 0x40,
126   VOS_VLDB_ENTRY_RWEXISTS = 0x1000,
127   VOS_VLDB_ENTRY_ROEXISTS = 0x2000,
128   VOS_VLDB_ENTRY_BACKEXISTS = 0x4000
129 } vos_vldbEntryStatus_t, *vos_vldbEntryStatus_p;
130
131 typedef enum {
132   VOS_VLDB_NEW_REPSITE = 0x1,
133   VOS_VLDB_READ_ONLY = 0x2,
134   VOS_VLDB_READ_WRITE = 0x4,
135   VOS_VLDB_BACKUP = 0x8,
136   VOS_VLDB_DONT_USE = 0x10
137 } vos_vldbServerFlag_t, *vos_vldbServerFlag_p;
138
139 typedef struct vos_vldbEntry {
140     int numServers;
141     unsigned int volumeId[VOS_MAX_VOLUME_TYPES];
142     unsigned int cloneId;
143     vos_vldbEntryStatus_t status;
144     struct {
145         int serverAddress;
146         int serverPartition;
147         vos_vldbServerFlag_t serverFlags;
148     } volumeSites[ VOS_MAX_REPLICA_SITES ];
149     char name[VOS_MAX_VOLUME_NAME_LEN];
150 } vos_vldbEntry_t, *vos_vldbEntry_p;
151
152 #define VOS_PROCEDURE_NAME_LEN 30
153
154 typedef enum {
155   VOS_VOLUME_ATTACH_MODE_OK,
156   VOS_VOLUME_ATTACH_MODE_OFFLINE,
157   VOS_VOLUME_ATTACH_MODE_BUSY,
158   VOS_VOLUME_ATTACH_MODE_READONLY,
159   VOS_VOLUME_ATTACH_MODE_CREATE,
160   VOS_VOLUME_ATTACH_MODE_CREATE_VOLID
161 } vol_volumeAttachMode_t, *vol_volumeAttachMode_p;
162
163 typedef enum {
164   VOS_VOLUME_ACTIVE_STATUS_OK,
165   VOS_VOLUME_ACTIVE_STATUS_DELETE_ON_SALVAGE,
166   VOS_VOLUME_ACTIVE_STATUS_OUT_OF_SERVICE,
167   VOS_VOLUME_ACTIVE_STATUS_DELETED
168 } vos_volumeActiveStatus_t, *vos_volumeActiveStatus_p;
169
170 typedef enum {
171   VOS_VOLUME_TRANSACTION_STATUS_OK,
172   VOS_VOLUME_TRANSACTION_STATUS_DELETED
173 } vos_volumeTransactionStatus_t, *vos_volumeTransactionStatus_p;
174
175 typedef struct vos_serverTransactionStatus {
176     int transactionId;
177     int lastActiveTime;
178     int creationTime;
179     int errorCode;
180     unsigned int volumeId;
181     int partition;
182     char lastProcedureName[VOS_PROCEDURE_NAME_LEN];
183     int nextReceivePacketSequenceNumber;
184     int nextSendPacketSequenceNumber;
185     int lastReceiveTime;
186     int lastSendTime;
187     vol_volumeAttachMode_t volumeAttachMode;
188     vos_volumeActiveStatus_t volumeActiveStatus;
189     vos_volumeTransactionStatus_t volumeTransactionStatus;
190 } vos_serverTransactionStatus_t, *vos_serverTransactionStatus_p;
191
192 typedef enum {
193   VOS_RESTORE_FULL,
194   VOS_RESTORE_INCREMENTAL
195 } vos_volumeRestoreType_t, *vos_volumeRestoreType_p;
196
197 typedef enum {
198   VOS_ONLINE_BUSY,
199   VOS_ONLINE_OFFLINE
200 } vos_volumeOnlineType_t, *vos_volumeOnlineType_p;
201
202 typedef enum {
203   VOS_DEBUG_MESSAGE = 0x1,
204   VOS_ERROR_MESSAGE = 0x2,
205   VOS_VERBOSE_MESSAGE = 0x4
206 } vos_messageType_t, *vos_messageType_p;
207
208 typedef void
209 (ADMINAPI *vos_MessageCallBack_t)(vos_messageType_t type,
210                                   char *message);
211
212 extern int ADMINAPI vos_BackupVolumeCreate(
213   const void *cellHandle,
214   vos_MessageCallBack_t callBack,
215   unsigned int volumeId,
216   afs_status_p st
217 );
218
219 extern int ADMINAPI vos_BackupVolumeCreateMultiple(
220   const void *cellHandle,
221   const void *serverHandle,
222   vos_MessageCallBack_t callBack,
223   const unsigned int *partition,
224   const char *volumePrefix,
225   vos_exclude_t excludePrefix,
226   afs_status_p st
227 );
228
229 extern int ADMINAPI vos_PartitionGet(
230   const void *cellHandle,
231   const void *serverHandle,
232   vos_MessageCallBack_t callBack,
233   unsigned int partition,
234   vos_partitionEntry_p partitionP,
235   afs_status_p st
236 );
237
238 extern int ADMINAPI vos_PartitionGetBegin(
239   const void *cellHandle,
240   const void *serverHandle,
241   vos_MessageCallBack_t callBack,
242   void **iterationIdP,
243   afs_status_p st
244 );
245
246 extern int ADMINAPI vos_PartitionGetNext(
247   const void *iterationId,
248   vos_partitionEntry_p partitionP,
249   afs_status_p st
250 );
251
252 extern int ADMINAPI vos_PartitionGetDone(
253   const void *iterationId,
254   afs_status_p st
255 );
256
257 extern int ADMINAPI vos_ServerOpen(
258   const void *cellHandle,
259   const char *serverName,
260   void **serverHandleP,
261   afs_status_p st
262 );
263
264 extern int ADMINAPI vos_ServerClose(
265   const void *serverHandle,
266   afs_status_p st
267 );
268
269 extern int ADMINAPI vos_ServerSync(
270   const void *cellHandle,
271   const void *serverHandle,
272   vos_MessageCallBack_t callBack,
273   const unsigned int *partition,
274   afs_status_p st
275 );
276
277 extern int ADMINAPI vos_FileServerAddressChange(
278   const void *cellHandle,
279   vos_MessageCallBack_t callBack,
280   int oldAddress,
281   int newAddress,
282   afs_status_p st
283 );
284
285 extern int ADMINAPI vos_FileServerAddressRemove(
286   const void *cellHandle,
287   vos_MessageCallBack_t callBack,
288   int serverAddress,
289   afs_status_p st
290 );
291
292 extern int ADMINAPI vos_FileServerGetBegin(
293   const void *cellHandle,
294   vos_MessageCallBack_t callBack,
295   void **iterationIdP,
296   afs_status_p st
297 );
298
299 extern int ADMINAPI vos_FileServerGetNext(
300   void *iterationId,
301   vos_fileServerEntry_p serverEntryP,
302   afs_status_p st
303 );
304
305 extern int ADMINAPI vos_FileServerGetDone(
306   void *iterationId,
307   afs_status_p st
308 );
309
310 extern int ADMINAPI vos_ServerTransactionStatusGetBegin(
311   const void *cellHandle,
312   const void *serverHandle,
313   vos_MessageCallBack_t callBack,
314   void **iterationIdP,
315   afs_status_p st
316 );
317
318 extern int ADMINAPI vos_ServerTransactionStatusGetNext(
319   const void *iterationId,
320   vos_serverTransactionStatus_p serverTransactionStatusP,
321   afs_status_p st
322 );
323
324 extern int ADMINAPI vos_ServerTransactionStatusGetDone(
325   const void *iterationId,
326   afs_status_p st
327 );
328
329 extern int ADMINAPI vos_VLDBGet(
330   const void *cellHandle,
331   vos_MessageCallBack_t callBack,
332   const unsigned int *volumeId,
333   const char *volumeName,
334   vos_vldbEntry_p vldbEntry,
335   afs_status_p st
336 );
337
338 extern int ADMINAPI vos_VLDBGetBegin(
339   const void *cellHandle,
340   const void *serverHandle,
341   vos_MessageCallBack_t callBack,
342   unsigned int *partition,
343   void **iterationIdP,
344   afs_status_p st
345 );
346
347 extern int ADMINAPI vos_VLDBGetNext(
348   const void *iterationId,
349   vos_vldbEntry_p vldbEntry,
350   afs_status_p st
351 );
352
353 extern int ADMINAPI vos_VLDBGetDone(
354   const void *iterationId,
355   afs_status_p st
356 );
357
358 extern int ADMINAPI vos_VLDBEntryRemove(
359   const void *cellHandle,
360   const void *serverHandle,
361   vos_MessageCallBack_t callBack,
362   const unsigned int *partition,
363   unsigned int *volumeId,
364   afs_status_p st
365 );
366
367 extern int ADMINAPI vos_VLDBUnlock(
368   const void *cellHandle,
369   const void *serverHandle,
370   vos_MessageCallBack_t callBack,
371   const unsigned int *partition,
372   afs_status_p st
373 );
374
375 extern int ADMINAPI vos_VLDBEntryLock(
376   const void *cellHandle,
377   vos_MessageCallBack_t callBack,
378   unsigned int volumeId,
379   afs_status_p st
380 );
381
382 extern int ADMINAPI vos_VLDBEntryUnlock(
383   const void *cellHandle,
384   vos_MessageCallBack_t callBack,
385   unsigned int volumeId,
386   afs_status_p st
387 );
388
389 extern int ADMINAPI vos_VLDBReadOnlySiteCreate(
390   const void *cellHandle,
391   const void *serverHandle,
392   vos_MessageCallBack_t callBack,
393   unsigned int partition,
394   unsigned int volumeId,
395   afs_status_p st
396 );
397
398 extern int ADMINAPI vos_VLDBReadOnlySiteDelete(
399   const void *cellHandle,
400   const void *serverHandle,
401   vos_MessageCallBack_t callBack,
402   unsigned int partition,
403   unsigned int volumeId,
404   afs_status_p st
405 );
406
407 extern int ADMINAPI vos_VLDBSync(
408   const void *cellHandle,
409   const void *serverHandle,
410   vos_MessageCallBack_t callBack,
411   const unsigned int *partition,
412   vos_force_t force,
413   afs_status_p st
414 );
415
416 extern int ADMINAPI vos_VolumeCreate(
417   const void *cellHandle,
418   const void *serverHandle,
419   vos_MessageCallBack_t callBack,
420   unsigned int partition,
421   const char *volumeName,
422   unsigned int quota,
423   unsigned int *volumeId,
424   afs_status_p st
425 );
426
427 extern int ADMINAPI vos_VolumeDelete(
428   const void *cellHandle,
429   const void *serverHandle,
430   vos_MessageCallBack_t callBack,
431   unsigned int partition,
432   unsigned int volumeId,
433   afs_status_p st
434 );
435
436 extern int ADMINAPI vos_VolumeRename(
437   const void *cellHandle,
438   vos_MessageCallBack_t callBack,
439   unsigned int readWriteVolumeId,
440   const char *newVolumeName,
441   afs_status_p st
442 );
443
444 extern int ADMINAPI vos_VolumeDump(
445   const void *cellHandle,
446   const void *serverHandle,
447   vos_MessageCallBack_t callBack,
448   unsigned int *partition,
449   unsigned int volumeId,
450   unsigned int startTime,
451   const char *dumpFile,
452   afs_status_p st
453 );
454
455 extern int ADMINAPI vos_VolumeRestore(
456   const void *cellHandle,
457   const void *serverHandle,
458   vos_MessageCallBack_t callBack,
459   unsigned int partition,
460   unsigned int *volumeId,
461   const char *volumeName,
462   const char *dumpFile,
463   vos_volumeRestoreType_t dumpType,
464   afs_status_p st
465 );
466
467 extern int ADMINAPI vos_VolumeOnline(
468   const void *serverHandle,
469   vos_MessageCallBack_t callBack,
470   unsigned int partition,
471   unsigned int volumeId,
472   unsigned int sleepTime,
473   vos_volumeOnlineType_t volumeStatus,
474   afs_status_p st
475 );
476
477 extern int ADMINAPI vos_VolumeOffline(
478   const void *serverHandle,
479   vos_MessageCallBack_t callBack,
480   unsigned int partition,
481   unsigned int volumeId,
482   afs_status_p st
483 );
484
485 extern int ADMINAPI vos_VolumeGet(
486   const void *cellHandle,
487   const void *serverHandle,
488   vos_MessageCallBack_t callBack,
489   unsigned int partition,
490   unsigned int volumeId,
491   vos_volumeEntry_p volumeP,
492   afs_status_p st
493 );
494
495 extern int ADMINAPI vos_VolumeGetBegin(
496   const void *cellHandle,
497   const void *serverHandle,
498   vos_MessageCallBack_t callBack,
499   unsigned int partition,
500   void **iterationIdP,
501   afs_status_p st
502 );
503
504 extern int ADMINAPI vos_VolumeGetNext(
505   const void *iterationId,
506   vos_volumeEntry_p volumeP,
507   afs_status_p st
508 );
509
510 extern int ADMINAPI vos_VolumeGetDone(
511   const void *iterationId,
512   afs_status_p st
513 );
514
515 extern int ADMINAPI vos_VolumeMove(
516   const void *cellHandle,
517   vos_MessageCallBack_t callBack,
518   unsigned int volumeId,
519   const void *fromServer,
520   unsigned int fromPartition,
521   const void *toServer,
522   unsigned int toPartition,
523   afs_status_p st
524 );
525
526 extern int ADMINAPI vos_VolumeRelease(
527   const void *cellHandle,
528   vos_MessageCallBack_t callBack,
529   unsigned int volumeId,
530   vos_force_t force,
531   afs_status_p st
532 );
533
534 extern int ADMINAPI vos_VolumeZap(
535   const void *cellHandle,
536   const void *serverHandle,
537   vos_MessageCallBack_t callBack,
538   unsigned int partition,
539   unsigned int volumeId,
540   vos_force_t force,
541   afs_status_p st
542 );
543
544 extern int ADMINAPI vos_PartitionNameToId(
545   const char *partitionName,
546   unsigned int *partitionId,
547   afs_status_p st
548 );
549
550 extern int ADMINAPI vos_PartitionIdToName(
551   unsigned int partitionId,
552   char *partitionName,
553   afs_status_p st
554 );
555
556 extern int ADMINAPI vos_VolumeQuotaChange(
557   const void *cellHandle,
558   const void *serverHandle,
559   vos_MessageCallBack_t callBack,
560   unsigned int partition,
561   unsigned int volumeId,
562   unsigned int volumeQuota,
563   afs_status_p st
564 );
565
566 #endif /* TRANSARC_AFS_VOS_ADMIN_H */