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