2 * Copyright 2000, International Business Machines Corporation and others.
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
11 * This file implements the vos related funtions for afscp
14 #include <afsconfig.h>
15 #include <afs/param.h>
19 #include <afs/afsutil.h>
28 * Generic fuction for converting input string to an integer. Pass
29 * the error_msg you want displayed if there is an error converting
34 GetIntFromString(const char *int_str
, const char *error_msg
)
37 char *bad_char
= NULL
;
39 i
= strtoul(int_str
, &bad_char
, 10);
40 if ((bad_char
== NULL
) || (*bad_char
== 0)) {
48 * Generic fuction for converting input string to a volume number
49 * It will accept integer strings as well as volume names.
53 GetVolumeIdFromString(const char *volume
)
55 unsigned int volume_id
;
56 char *bad_char
= NULL
;
58 vos_vldbEntry_t entry
;
60 volume_id
= strtoul(volume
, &bad_char
, 10);
61 if ((bad_char
== NULL
) || (*bad_char
== 0)) {
66 * We failed to convert the string to a number, so see if it
70 (cellHandle
, 0, NULL
, (char *)volume
, &entry
, &st
)) {
71 return entry
.volumeId
[VOS_READ_WRITE_VOLUME
];
73 ERR_EXT("failed to convert specified volume to an id");
78 * Generic fuction for converting input string to a partition number
79 * It will accept integer strings as well as partition names.
83 GetPartitionIdFromString(const char *partition
)
85 unsigned int partition_id
;
86 char *bad_char
= NULL
;
91 partition_id
= strtoul(partition
, &bad_char
, 10);
92 if ((bad_char
== NULL
) || (*bad_char
== 0)) {
97 * We failed to convert the string to a number, so see if it
101 pname_len
= strlen(partition
);
103 sprintf(pname
, "%s", "/vicep");
104 if (pname_len
<= 2) {
105 strcat(pname
, partition
);
106 } else if (!strncmp(partition
, "/vicep", 6)) {
107 strcat(pname
, partition
+ 6);
108 } else if (!strncmp(partition
, "vicep", 5)) {
109 strcat(pname
, partition
+ 5);
111 ERR_EXT("invalid partition");
114 if (!vos_PartitionNameToId((const char *)pname
, &partition_id
, &st
)) {
115 ERR_ST_EXT("invalid partition", st
);
122 * Generic fuction for converting input string to an address in host order.
123 * It will accept strings in the form "128.98.12.1"
127 GetAddressFromString(const char *addr_str
)
129 int addr
= inet_addr(addr_str
);
132 ERR_EXT("failed to convert specified address");
140 PrintMessage(vos_messageType_t type
, char *message
)
142 printf("%s\n", message
);
147 DoVosBackupVolumeCreate(struct cmd_syndesc
*as
, void *arock
)
151 unsigned int volume_id
= 0;
153 if (as
->parms
[VOLUME
].items
) {
154 const char *volume
= as
->parms
[VOLUME
].items
->data
;
155 volume_id
= GetVolumeIdFromString(volume
);
158 if (!vos_BackupVolumeCreate(cellHandle
, 0, volume_id
, &st
)) {
159 ERR_ST_EXT("vos_BackupVolumeCreate", st
);
165 DoVosBackupVolumeCreateMultiple(struct cmd_syndesc
*as
, void *arock
)
167 enum { SERVER
, PARTITION
, PREFIX
,
171 void *vos_server
= NULL
;
172 unsigned int partition_id
;
173 const unsigned int *part_ptr
= NULL
;
174 const char *prefix
= NULL
;
175 vos_exclude_t exclude
= VOS_INCLUDE
;
177 if (as
->parms
[SERVER
].items
) {
179 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
180 ERR_ST_EXT("vos_ServerOpen", st
);
184 if (as
->parms
[PARTITION
].items
) {
186 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
187 part_ptr
= &partition_id
;
190 if (as
->parms
[PREFIX
].items
) {
191 prefix
= as
->parms
[PREFIX
].items
->data
;
194 if (as
->parms
[EXCLUDE
].items
) {
195 exclude
= VOS_EXCLUDE
;
198 if (!vos_BackupVolumeCreateMultiple
199 (cellHandle
, vos_server
, (vos_MessageCallBack_t
) 0, part_ptr
, prefix
,
201 ERR_ST_EXT("vos_BackupVolumeCreate", st
);
207 Print_vos_partitionEntry_p(vos_partitionEntry_p part
, const char *prefix
)
209 printf("%sInformation for partition %s\n", prefix
, part
->name
);
210 printf("%s\tDevice name: %s\n", prefix
, part
->deviceName
);
211 printf("%s\tlockFileDescriptor: %d\n", prefix
, part
->lockFileDescriptor
);
212 printf("%s\tTotal space: %d\n", prefix
, part
->totalSpace
);
213 printf("%s\tTotal Free space: %d\n", prefix
, part
->totalFreeSpace
);
217 DoVosPartitionGet(struct cmd_syndesc
*as
, void *arock
)
219 enum { SERVER
, PARTITION
};
221 void *vos_server
= NULL
;
222 unsigned int partition_id
= 0;
223 vos_partitionEntry_t entry
;
225 if (as
->parms
[SERVER
].items
) {
227 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
228 ERR_ST_EXT("vos_ServerOpen", st
);
232 if (as
->parms
[PARTITION
].items
) {
234 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
237 if (!vos_PartitionGet
238 (cellHandle
, vos_server
, 0, partition_id
, &entry
, &st
)) {
239 ERR_ST_EXT("vos_PartitionGet", st
);
242 Print_vos_partitionEntry_p(&entry
, "");
248 DoVosPartitionList(struct cmd_syndesc
*as
, void *arock
)
252 void *vos_server
= NULL
;
254 vos_partitionEntry_t entry
;
256 if (as
->parms
[SERVER
].items
) {
258 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
259 ERR_ST_EXT("vos_ServerOpen", st
);
263 if (!vos_PartitionGetBegin(cellHandle
, vos_server
, 0, &iter
, &st
)) {
264 ERR_ST_EXT("vos_PartitionGetBegin", st
);
267 printf("Listing partitions at server %s\n",
268 as
->parms
[SERVER
].items
->data
);
269 while (vos_PartitionGetNext(iter
, &entry
, &st
)) {
270 Print_vos_partitionEntry_p(&entry
, " ");
273 if (st
!= ADMITERATORDONE
) {
274 ERR_ST_EXT("vos_PartitionGetNext", st
);
277 if (!vos_PartitionGetDone(iter
, &st
)) {
278 ERR_ST_EXT("vos_PartitionGetDone", st
);
284 DoVosServerSync(struct cmd_syndesc
*as
, void *arock
)
286 enum { SERVER
, PARTITION
};
288 void *vos_server
= NULL
;
289 unsigned int partition_id
;
290 const unsigned int *part_ptr
= NULL
;
292 if (as
->parms
[SERVER
].items
) {
294 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
295 ERR_ST_EXT("vos_ServerOpen", st
);
299 if (as
->parms
[PARTITION
].items
) {
301 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
302 part_ptr
= &partition_id
;
305 if (!vos_ServerSync(cellHandle
, vos_server
, 0, part_ptr
, &st
)) {
306 ERR_ST_EXT("vos_PartitionGetDone", st
);
312 DoVosFileServerAddressChange(struct cmd_syndesc
*as
, void *arock
)
321 if (as
->parms
[OLDADDRESS
].items
) {
322 const char *addr
= as
->parms
[OLDADDRESS
].items
->data
;
323 old_addr
= GetAddressFromString(addr
);
326 if (as
->parms
[NEWADDRESS
].items
) {
327 const char *addr
= as
->parms
[OLDADDRESS
].items
->data
;
328 new_addr
= GetAddressFromString(addr
);
331 if (!vos_FileServerAddressChange(cellHandle
, 0, old_addr
, new_addr
, &st
)) {
332 ERR_ST_EXT("vos_FileServerAddressChange", st
);
338 DoVosFileServerAddressRemove(struct cmd_syndesc
*as
, void *arock
)
344 if (as
->parms
[ADDRESS
].items
) {
345 const char *addr
= as
->parms
[ADDRESS
].items
->data
;
346 address
= GetAddressFromString(addr
);
349 if (!vos_FileServerAddressRemove(cellHandle
, 0, address
, &st
)) {
350 ERR_ST_EXT("vos_FileServerAddressRemove", st
);
356 Print_vos_fileServerEntry_p(vos_fileServerEntry_p serv
, const char *prefix
)
360 for (i
= 0; i
< serv
->count
; i
++) {
361 printf("%s%x ", prefix
, serv
->serverAddress
[i
]);
367 DoVosFileServerList(struct cmd_syndesc
*as
, void *arock
)
371 vos_fileServerEntry_t entry
;
373 if (!vos_FileServerGetBegin(cellHandle
, 0, &iter
, &st
)) {
374 ERR_ST_EXT("vos_FileServerGetBegin", st
);
377 while (vos_FileServerGetNext(iter
, &entry
, &st
)) {
378 Print_vos_fileServerEntry_p(&entry
, "");
381 if (st
!= ADMITERATORDONE
) {
382 ERR_ST_EXT("vos_FileServerGetNext", st
);
385 if (!vos_FileServerGetDone(iter
, &st
)) {
386 ERR_ST_EXT("vos_FileServerGetDone", st
);
393 Print_vos_serverTransactionStatus_p(vos_serverTransactionStatus_p tran
,
396 printf("%sTransaction id\t\t\t%d\n", prefix
, tran
->transactionId
);
397 printf("%sLast active time\t\t\t%d\n", prefix
, tran
->lastActiveTime
);
398 printf("%sCreation time\t\t\t%d\n", prefix
, tran
->creationTime
);
399 printf("%sError code\t\t\t%d\n", prefix
, tran
->errorCode
);
400 printf("%sVolume id\t\t\t\t%u\n", prefix
, tran
->volumeId
);
401 printf("%sPartition\t\t\t\t%d\n", prefix
, tran
->partition
);
402 printf("%sLast procedure name\t\t\t%s\n", prefix
,
403 tran
->lastProcedureName
);
404 printf("%sNext receive packet seq num\t\t\t%d\n", prefix
,
405 tran
->nextReceivePacketSequenceNumber
);
406 printf("%sNext send packet seq num\t\t\t%d\n", prefix
,
407 tran
->nextSendPacketSequenceNumber
);
408 printf("%sLast receive time\t\t\t%d\n", prefix
, tran
->lastReceiveTime
);
409 printf("%sLast send time\t\t\t%d\n", prefix
, tran
->lastSendTime
);
410 printf("%sVolume attach mode\t\t\t%d\n", prefix
, tran
->volumeAttachMode
);
411 printf("%sVolume active status\t\t\t%d\n", prefix
,
412 tran
->volumeActiveStatus
);
413 printf("%sVolume tran status\t\t\t%d\n", prefix
,
414 tran
->volumeTransactionStatus
);
418 DoVosServerTransactionStatusList(struct cmd_syndesc
*as
, void *arock
)
422 void *vos_server
= NULL
;
424 vos_serverTransactionStatus_t tran
;
427 if (as
->parms
[SERVER
].items
) {
429 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
430 ERR_ST_EXT("vos_ServerOpen", st
);
434 if (!vos_ServerTransactionStatusGetBegin
435 (cellHandle
, vos_server
, 0, &iter
, &st
)) {
436 ERR_ST_EXT("vos_ServerTransactionStatusGetBegin", st
);
439 while (vos_ServerTransactionStatusGetNext(iter
, &tran
, &st
)) {
440 Print_vos_serverTransactionStatus_p(&tran
, "");
443 if (st
!= ADMITERATORDONE
) {
444 ERR_ST_EXT("vos_ServerTransactionStatusGetNext", st
);
447 if (!vos_ServerTransactionStatusGetDone(iter
, &st
)) {
448 ERR_ST_EXT("vos_ServerTransactionStatusGetDone", st
);
454 Print_vos_vldbEntry_p(vos_vldbEntry_p entry
, const char *prefix
)
458 printf("%sVolume entry %s\n", prefix
, entry
->name
);
459 printf("%sNumber of servers %d\n", prefix
, entry
->numServers
);
460 printf("%sRead write volume %u\n", prefix
,
461 entry
->volumeId
[VOS_READ_WRITE_VOLUME
]);
462 printf("%sRead only volume %u\n", prefix
,
463 entry
->volumeId
[VOS_READ_ONLY_VOLUME
]);
464 printf("%sBackup volume %u\n", prefix
,
465 entry
->volumeId
[VOS_BACKUP_VOLUME
]);
466 printf("%sClone volume %u\n", prefix
, entry
->cloneId
);
468 printf("%sVolume entry status:\n", prefix
);
469 if (entry
->status
& VOS_VLDB_ENTRY_OK
) {
470 printf("%s\tVOS_VLDB_ENTRY_OK\n", prefix
);
472 if (entry
->status
& VOS_VLDB_ENTRY_MOVE
) {
473 printf("%s\tVOS_VLDB_ENTRY_MOVE\n", prefix
);
475 if (entry
->status
& VOS_VLDB_ENTRY_RELEASE
) {
476 printf("%s\tVOS_VLDB_ENTRY_RELEASE\n", prefix
);
478 if (entry
->status
& VOS_VLDB_ENTRY_BACKUP
) {
479 printf("%s\tVOS_VLDB_ENTRY_BACKUP\n", prefix
);
481 if (entry
->status
& VOS_VLDB_ENTRY_DELETE
) {
482 printf("%s\tVOS_VLDB_ENTRY_DELETE\n", prefix
);
484 if (entry
->status
& VOS_VLDB_ENTRY_DUMP
) {
485 printf("%s\tVOS_VLDB_ENTRY_DUMP\n", prefix
);
487 if (entry
->status
& VOS_VLDB_ENTRY_LOCKED
) {
488 printf("%s\tVOS_VLDB_ENTRY_LOCKED\n", prefix
);
490 if (entry
->status
& VOS_VLDB_ENTRY_RWEXISTS
) {
491 printf("%s\tVOS_VLDB_ENTRY_RWEXISTS\n", prefix
);
493 if (entry
->status
& VOS_VLDB_ENTRY_ROEXISTS
) {
494 printf("%s\tVOS_VLDB_ENTRY_ROEXISTS\n", prefix
);
496 if (entry
->status
& VOS_VLDB_ENTRY_BACKEXISTS
) {
497 printf("%s\tVOS_VLDB_ENTRY_BACKEXISTS\n", prefix
);
500 printf("%sVolume location information for replicas:\n", prefix
);
501 for (i
= 0; i
< entry
->numServers
; i
++) {
502 printf("%s\tServer %x\n", prefix
,
503 entry
->volumeSites
[i
].serverAddress
);
504 printf("%s\tPartition %x\n", prefix
,
505 entry
->volumeSites
[i
].serverPartition
);
506 if (entry
->volumeSites
[i
].serverFlags
& VOS_VLDB_NEW_REPSITE
) {
507 printf("%s\tVOS_VLDB_NEW_REPSITE\n", prefix
);
509 if (entry
->volumeSites
[i
].serverFlags
& VOS_VLDB_READ_ONLY
) {
510 printf("%s\tVOS_VLDB_READ_ONLY\n", prefix
);
512 if (entry
->volumeSites
[i
].serverFlags
& VOS_VLDB_READ_WRITE
) {
513 printf("%s\tVOS_VLDB_READ_WRITE\n", prefix
);
515 if (entry
->volumeSites
[i
].serverFlags
& VOS_VLDB_BACKUP
) {
516 printf("%s\tVOS_VLDB_BACKUP\n", prefix
);
518 if (entry
->volumeSites
[i
].serverFlags
& VOS_VLDB_DONT_USE
) {
519 printf("%s\tVOS_VLDB_DONT_USE\n", prefix
);
526 DoVosVLDBGet(struct cmd_syndesc
*as
, void *arock
)
530 vos_vldbEntry_t entry
;
531 unsigned int volume_id
;
532 char *volume_name
= NULL
;
534 if (as
->parms
[VOLUME
].items
) {
535 const char *volume
= as
->parms
[VOLUME
].items
->data
;
536 volume_id
= GetVolumeIdFromString(volume
);
540 if (!vos_VLDBGet(cellHandle
, 0, &volume_id
, volume_name
, &entry
, &st
)) {
541 ERR_ST_EXT("vos_VLDBGet", st
);
544 Print_vos_vldbEntry_p(&entry
, "");
550 DoVosVLDBList(struct cmd_syndesc
*as
, void *arock
)
552 enum { SERVER
, PARTITION
};
554 void *vos_server
= NULL
;
555 unsigned int partition_id
;
556 unsigned int *part_ptr
= NULL
;
558 vos_vldbEntry_t entry
;
561 if (as
->parms
[SERVER
].items
) {
563 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
564 ERR_ST_EXT("vos_ServerOpen", st
);
569 if (as
->parms
[PARTITION
].items
) {
571 ERR_EXT("must specify server when specifying partition");
574 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
575 part_ptr
= &partition_id
;
578 if (!vos_VLDBGetBegin(cellHandle
, vos_server
, 0, part_ptr
, &iter
, &st
)) {
579 ERR_ST_EXT("vos_VLDBGetBegin", st
);
582 while (vos_VLDBGetNext(iter
, &entry
, &st
)) {
583 Print_vos_vldbEntry_p(&entry
, "");
586 if (st
!= ADMITERATORDONE
) {
587 ERR_ST_EXT("vos_VLDBGetNext", st
);
590 if (!vos_VLDBGetDone(iter
, &st
)) {
591 ERR_ST_EXT("vos_VLDBGetDone", st
);
598 DoVosVLDBEntryRemove(struct cmd_syndesc
*as
, void *arock
)
600 enum { SERVER
, PARTITION
, VOLUME
};
602 void *vos_server
= NULL
;
603 unsigned int partition_id
;
604 unsigned int *part_ptr
= NULL
;
606 unsigned int volume_id
;
607 unsigned int *vol_ptr
= NULL
;
609 if (as
->parms
[SERVER
].items
) {
611 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
612 ERR_ST_EXT("vos_ServerOpen", st
);
617 if (as
->parms
[PARTITION
].items
) {
619 ERR_EXT("must specify server when specifying partition");
622 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
623 part_ptr
= &partition_id
;
626 if (as
->parms
[VOLUME
].items
) {
627 const char *volume
= as
->parms
[VOLUME
].items
->data
;
628 volume_id
= GetVolumeIdFromString(volume
);
629 vol_ptr
= &volume_id
;
632 if (!vos_VLDBEntryRemove
633 (cellHandle
, vos_server
, 0, part_ptr
, vol_ptr
, &st
)) {
634 ERR_ST_EXT("vos_VLDBEntryRemove", st
);
641 DoVosVLDBUnlock(struct cmd_syndesc
*as
, void *arock
)
643 enum { SERVER
, PARTITION
};
645 void *vos_server
= NULL
;
646 unsigned int partition_id
;
647 unsigned int *part_ptr
= NULL
;
650 if (as
->parms
[SERVER
].items
) {
652 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
653 ERR_ST_EXT("vos_ServerOpen", st
);
658 if (as
->parms
[PARTITION
].items
) {
660 ERR_EXT("must specify server when specifying partition");
663 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
664 part_ptr
= &partition_id
;
667 if (!vos_VLDBUnlock(cellHandle
, vos_server
, 0, part_ptr
, &st
)) {
668 ERR_ST_EXT("vos_VLDBUnlock", st
);
675 DoVosVLDBEntryLock(struct cmd_syndesc
*as
, void *arock
)
679 unsigned int volume_id
= 0;
681 if (as
->parms
[VOLUME
].items
) {
682 const char *volume
= as
->parms
[VOLUME
].items
->data
;
683 volume_id
= GetVolumeIdFromString(volume
);
686 if (!vos_VLDBEntryLock(cellHandle
, 0, volume_id
, &st
)) {
687 ERR_ST_EXT("vos_VLDBEntryLock", st
);
694 DoVosVLDBEntryUnlock(struct cmd_syndesc
*as
, void *arock
)
698 unsigned int volume_id
= 0;
700 if (as
->parms
[VOLUME
].items
) {
701 const char *volume
= as
->parms
[VOLUME
].items
->data
;
702 volume_id
= GetVolumeIdFromString(volume
);
705 if (!vos_VLDBEntryUnlock(cellHandle
, 0, volume_id
, &st
)) {
706 ERR_ST_EXT("vos_VLDBEntryUnlock", st
);
713 DoVosVLDBReadOnlySiteCreate(struct cmd_syndesc
*as
, void *arock
)
715 enum { SERVER
, PARTITION
,
719 void *vos_server
= NULL
;
720 unsigned int partition_id
= 0;
721 unsigned int volume_id
= 0;
723 if (as
->parms
[SERVER
].items
) {
725 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
726 ERR_ST_EXT("vos_ServerOpen", st
);
730 if (as
->parms
[PARTITION
].items
) {
732 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
735 if (as
->parms
[VOLUME
].items
) {
736 const char *volume
= as
->parms
[VOLUME
].items
->data
;
737 volume_id
= GetVolumeIdFromString(volume
);
740 if (!vos_VLDBReadOnlySiteCreate
741 (cellHandle
, vos_server
, 0, partition_id
, volume_id
, &st
)) {
742 ERR_ST_EXT("vos_VLDBReadOnlySiteCreate", st
);
748 DoVosVLDBReadOnlySiteDelete(struct cmd_syndesc
*as
, void *arock
)
750 enum { SERVER
, PARTITION
,
754 void *vos_server
= NULL
;
755 unsigned int partition_id
= 0;
756 unsigned int volume_id
= 0;
758 if (as
->parms
[SERVER
].items
) {
760 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
761 ERR_ST_EXT("vos_ServerOpen", st
);
765 if (as
->parms
[PARTITION
].items
) {
767 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
770 if (as
->parms
[VOLUME
].items
) {
771 const char *volume
= as
->parms
[VOLUME
].items
->data
;
772 volume_id
= GetVolumeIdFromString(volume
);
775 if (!vos_VLDBReadOnlySiteDelete
776 (cellHandle
, vos_server
, 0, partition_id
, volume_id
, &st
)) {
777 ERR_ST_EXT("vos_VLDBReadOnlySiteDelete", st
);
784 DoVosVLDBSync(struct cmd_syndesc
*as
, void *arock
)
786 enum { SERVER
, PARTITION
, FORCE
};
788 void *vos_server
= NULL
;
789 unsigned int partition_id
;
790 unsigned int *part_ptr
= NULL
;
792 vos_force_t force
= VOS_NORMAL
;
794 if (as
->parms
[SERVER
].items
) {
796 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
797 ERR_ST_EXT("vos_ServerOpen", st
);
802 if (as
->parms
[PARTITION
].items
) {
804 ERR_EXT("must specify server when specifying partition");
807 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
808 part_ptr
= &partition_id
;
811 if (as
->parms
[FORCE
].items
) {
815 if (!vos_VLDBSync(cellHandle
, vos_server
, 0, part_ptr
, force
, &st
)) {
816 ERR_ST_EXT("vos_VLDBSync", st
);
823 DoVosVolumeCreate(struct cmd_syndesc
*as
, void *arock
)
825 enum { SERVER
, PARTITION
, VOLUME
,
829 void *vos_server
= NULL
;
830 unsigned int partition_id
= 0;
831 unsigned int volume_id
;
833 unsigned int quota
= 0;
835 if (as
->parms
[SERVER
].items
) {
837 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
838 ERR_ST_EXT("vos_ServerOpen", st
);
842 if (as
->parms
[PARTITION
].items
) {
844 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
847 if (as
->parms
[VOLUME
].items
) {
848 volume
= as
->parms
[VOLUME
].items
->data
;
851 if (as
->parms
[QUOTA
].items
) {
853 GetIntFromString(as
->parms
[QUOTA
].items
->data
, "invalid quota");
856 if (!vos_VolumeCreate
857 (cellHandle
, vos_server
, 0, partition_id
, volume
, quota
, &volume_id
,
859 ERR_ST_EXT("vos_VolumeCreate", st
);
862 printf("Created volume %u\n", volume_id
);
868 DoVosVolumeDelete(struct cmd_syndesc
*as
, void *arock
)
870 enum { SERVER
, PARTITION
, VOLUME
};
872 void *vos_server
= NULL
;
873 unsigned int partition_id
= 0;
874 unsigned int volume_id
= 0;
876 if (as
->parms
[SERVER
].items
) {
878 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
879 ERR_ST_EXT("vos_ServerOpen", st
);
883 if (as
->parms
[PARTITION
].items
) {
885 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
888 if (as
->parms
[VOLUME
].items
) {
889 const char *volume
= as
->parms
[VOLUME
].items
->data
;
890 volume_id
= GetVolumeIdFromString(volume
);
893 if (!vos_VolumeDelete
894 (cellHandle
, vos_server
, 0, partition_id
, volume_id
, &st
)) {
895 ERR_ST_EXT("vos_VolumeDelete", st
);
902 DoVosVolumeRename(struct cmd_syndesc
*as
, void *arock
)
904 enum { OLDVOLUME
, NEWVOLUME
};
906 unsigned int old_volume
= 0;
907 char *new_volume
= NULL
;
909 if (as
->parms
[OLDVOLUME
].items
) {
910 const char *volume
= as
->parms
[OLDVOLUME
].items
->data
;
911 old_volume
= GetVolumeIdFromString(volume
);
914 if (as
->parms
[NEWVOLUME
].items
) {
915 new_volume
= as
->parms
[NEWVOLUME
].items
->data
;
918 if (!vos_VolumeRename(cellHandle
, 0, old_volume
, new_volume
, &st
)) {
919 ERR_ST_EXT("vos_VolumeRename", st
);
926 DoVosVolumeDump(struct cmd_syndesc
*as
, void *arock
)
928 enum { SERVER
, PARTITION
, VOLUME
, STARTTIME
,
932 void *vos_server
= NULL
;
933 unsigned int partition_id
;
934 unsigned int *part_ptr
= NULL
;
936 unsigned int volume_id
= 0;
937 unsigned int start_time
= 0;
938 const char *dumpfile
= NULL
;
940 if (as
->parms
[SERVER
].items
) {
942 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
943 ERR_ST_EXT("vos_ServerOpen", st
);
948 if (as
->parms
[PARTITION
].items
) {
950 ERR_EXT("must specify server when specifying partition");
953 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
954 part_ptr
= &partition_id
;
957 if (as
->parms
[VOLUME
].items
) {
958 const char *volume
= as
->parms
[VOLUME
].items
->data
;
959 volume_id
= GetVolumeIdFromString(volume
);
962 if (as
->parms
[STARTTIME
].items
) {
964 GetIntFromString(as
->parms
[STARTTIME
].items
->data
,
965 "invalid start time");
968 if (as
->parms
[DUMPFILE
].items
) {
969 dumpfile
= as
->parms
[DUMPFILE
].items
->data
;
973 (cellHandle
, vos_server
, 0, part_ptr
, volume_id
, start_time
, dumpfile
,
975 ERR_ST_EXT("vos_VolumeDump", st
);
982 DoVosVolumeRestore(struct cmd_syndesc
*as
, void *arock
)
984 enum { SERVER
, PARTITION
, ID
, VOLUME
, DUMPFILE
,
988 void *vos_server
= NULL
;
989 unsigned int partition_id
= 0;
990 unsigned int volume_id
;
991 unsigned int *vol_ptr
= NULL
;
992 const char *dumpfile
= NULL
;
993 char *volume_name
= NULL
;
994 vos_volumeRestoreType_t restore
= VOS_RESTORE_INCREMENTAL
;
996 if (as
->parms
[SERVER
].items
) {
998 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
999 ERR_ST_EXT("vos_ServerOpen", st
);
1003 if (as
->parms
[PARTITION
].items
) {
1005 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
1008 if (as
->parms
[VOLUME
].items
) {
1009 volume_name
= as
->parms
[VOLUME
].items
->data
;
1012 if (as
->parms
[ID
].items
) {
1013 const char *volume
= as
->parms
[ID
].items
->data
;
1014 volume_id
= GetVolumeIdFromString(volume
);
1015 vol_ptr
= &volume_id
;
1018 if (as
->parms
[DUMPFILE
].items
) {
1019 dumpfile
= as
->parms
[DUMPFILE
].items
->data
;
1022 if (as
->parms
[FULL
].items
) {
1023 restore
= VOS_RESTORE_FULL
;
1026 if (!vos_VolumeRestore
1027 (cellHandle
, vos_server
, 0, partition_id
, vol_ptr
, volume_name
,
1028 dumpfile
, restore
, &st
)) {
1029 ERR_ST_EXT("vos_VolumeRestore", st
);
1036 DoVosVolumeOnline(struct cmd_syndesc
*as
, void *arock
)
1038 enum { SERVER
, PARTITION
, VOLUME
, SLEEP
,
1041 afs_status_t st
= 0;
1042 void *vos_server
= NULL
;
1043 unsigned int partition_id
= 0;
1044 unsigned int volume_id
= 0;
1045 unsigned int sleep
= 0;
1046 vos_volumeOnlineType_t type
= VOS_ONLINE_OFFLINE
;
1048 if (as
->parms
[SERVER
].items
) {
1050 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
1051 ERR_ST_EXT("vos_ServerOpen", st
);
1055 if (as
->parms
[PARTITION
].items
) {
1057 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
1060 if (as
->parms
[VOLUME
].items
) {
1061 const char *volume
= as
->parms
[VOLUME
].items
->data
;
1062 volume_id
= GetVolumeIdFromString(volume
);
1065 if (as
->parms
[SLEEP
].items
) {
1067 GetIntFromString(as
->parms
[SLEEP
].items
->data
,
1068 "invalid sleep time");
1071 if (as
->parms
[BUSY
].items
) {
1072 type
= VOS_ONLINE_BUSY
;
1075 if (!vos_VolumeOnline
1076 (vos_server
, 0, partition_id
, volume_id
, sleep
, type
, &st
)) {
1077 ERR_ST_EXT("vos_VolumeOnline", st
);
1084 DoVosVolumeOffline(struct cmd_syndesc
*as
, void *arock
)
1086 enum { SERVER
, PARTITION
, VOLUME
};
1087 afs_status_t st
= 0;
1088 void *vos_server
= NULL
;
1089 unsigned int partition_id
= 0;
1090 unsigned int volume_id
= 0;
1092 if (as
->parms
[SERVER
].items
) {
1094 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
1095 ERR_ST_EXT("vos_ServerOpen", st
);
1099 if (as
->parms
[PARTITION
].items
) {
1101 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
1104 if (as
->parms
[VOLUME
].items
) {
1105 const char *volume
= as
->parms
[VOLUME
].items
->data
;
1106 volume_id
= GetVolumeIdFromString(volume
);
1109 if (!vos_VolumeOffline(vos_server
, 0, partition_id
, volume_id
, &st
)) {
1110 ERR_ST_EXT("vos_VolumeOffline", st
);
1117 Print_vos_volumeEntry_p(vos_volumeEntry_p entry
, const char *prefix
)
1119 if (entry
->status
== VOS_OK
) {
1120 printf("%sVolume name %s id %u\n", prefix
, entry
->name
, entry
->id
);
1121 printf("%sRead write id %u\n", prefix
, entry
->readWriteId
);
1122 printf("%sRead only id %u\n", prefix
, entry
->readOnlyId
);
1123 printf("%sBackup id %u\n", prefix
, entry
->backupId
);
1124 printf("%sCreation date %lu\n", prefix
, entry
->creationDate
);
1125 printf("%sLast access date %lu\n", prefix
, entry
->lastAccessDate
);
1126 printf("%sLast update date %lu\n", prefix
, entry
->lastUpdateDate
);
1127 printf("%sLast backup date %lu\n", prefix
, entry
->lastBackupDate
);
1128 printf("%sLast copy creation date %lu\n", prefix
,
1129 entry
->copyCreationDate
);
1130 printf("%sAccesses since midnight %d\n", prefix
,
1131 entry
->accessesSinceMidnight
);
1132 printf("%sFile count %d\n", prefix
, entry
->fileCount
);
1133 printf("%sMax quota %d\n", prefix
, entry
->maxQuota
);
1134 printf("%sCurrent size %d\n", prefix
, entry
->currentSize
);
1136 printf("%sVolume status: VOS_OK\n", prefix
);
1138 printf("%sVolume disposition:\n", prefix
);
1140 switch (entry
->volumeDisposition
) {
1142 printf("%s\tVOS_OK\n", prefix
);
1145 printf("%s\tVOS_SALVAGE\n", prefix
);
1148 printf("%s\tVOS_NO_VNODE\n", prefix
);
1151 printf("%s\tVOS_NO_VOL\n", prefix
);
1153 case VOS_VOL_EXISTS
:
1154 printf("%s\tVOS_VOL_EXISTS\n", prefix
);
1156 case VOS_NO_SERVICE
:
1157 printf("%s\tVOS_NO_SERVICE\n", prefix
);
1160 printf("%s\tVOS_OFFLINE\n", prefix
);
1163 printf("%s\tVOS_ONLINE\n", prefix
);
1166 printf("%s\tVOS_DISK_FULL\n", prefix
);
1168 case VOS_OVER_QUOTA
:
1169 printf("%s\tVOS_OVER_QUOTA\n", prefix
);
1172 printf("%s\tVOS_BUSY\n", prefix
);
1175 printf("%s\tVOS_MOVED\n", prefix
);
1178 printf("Unknown volume disposition %d\n",
1179 entry
->volumeDisposition
);
1183 printf("%sVolume type: ", prefix
);
1185 if (entry
->type
== VOS_READ_WRITE_VOLUME
) {
1186 printf("read write\n");
1187 } else if (entry
->type
== VOS_READ_ONLY_VOLUME
) {
1188 printf("read only\n");
1193 printf("\n%s\tSame Network\tSame Network Authenticated"
1194 "\tDifferent Network\tDifferent Network Authenticated\n\n",
1196 printf("%sRead\t%d\t%d\t%d\t%d\n", prefix
,
1197 entry
->readStats
[VOS_VOLUME_READ_WRITE_STATS_SAME_NETWORK
],
1200 [VOS_VOLUME_READ_WRITE_STATS_SAME_NETWORK_AUTHENTICATED
],
1202 readStats
[VOS_VOLUME_READ_WRITE_STATS_DIFFERENT_NETWORK
],
1205 [VOS_VOLUME_READ_WRITE_STATS_DIFFERENT_NETWORK_AUTHENTICATED
]);
1206 printf("%sWrite\t%d\t%d\t%d\t%d\n", prefix
,
1207 entry
->writeStats
[VOS_VOLUME_READ_WRITE_STATS_SAME_NETWORK
],
1210 [VOS_VOLUME_READ_WRITE_STATS_SAME_NETWORK_AUTHENTICATED
],
1212 writeStats
[VOS_VOLUME_READ_WRITE_STATS_DIFFERENT_NETWORK
],
1215 [VOS_VOLUME_READ_WRITE_STATS_DIFFERENT_NETWORK_AUTHENTICATED
]);
1218 ("\n%s\t0 to 60 secs\t1 to 10 mins\t10 to 60 mins\t1 to 24 hrs\t1 to 7 days\t more than 7 days\n",
1220 printf("%sFile Author Write Same Network\t%d\t%d\t%d\t%d\t%d\t%d\n",
1223 fileAuthorWriteSameNetwork
1224 [VOS_VOLUME_TIME_STATS_0_TO_60_SECONDS
],
1226 fileAuthorWriteSameNetwork
1227 [VOS_VOLUME_TIME_STATS_1_TO_10_MINUTES
],
1229 fileAuthorWriteSameNetwork
1230 [VOS_VOLUME_TIME_STATS_10_TO_60_MINUTES
],
1232 fileAuthorWriteSameNetwork
1233 [VOS_VOLUME_TIME_STATS_1_TO_24_HOURS
],
1235 fileAuthorWriteSameNetwork
[VOS_VOLUME_TIME_STATS_1_TO_7_DAYS
],
1237 fileAuthorWriteSameNetwork
1238 [VOS_VOLUME_TIME_STATS_GREATER_THAN_7_DAYS
]);
1239 printf("%sFile Author Write Diff Network\t%d\t%d\t%d\t%d\t%d\t%d\n",
1242 fileAuthorWriteDifferentNetwork
1243 [VOS_VOLUME_TIME_STATS_0_TO_60_SECONDS
],
1245 fileAuthorWriteDifferentNetwork
1246 [VOS_VOLUME_TIME_STATS_1_TO_10_MINUTES
],
1248 fileAuthorWriteDifferentNetwork
1249 [VOS_VOLUME_TIME_STATS_10_TO_60_MINUTES
],
1251 fileAuthorWriteDifferentNetwork
1252 [VOS_VOLUME_TIME_STATS_1_TO_24_HOURS
],
1254 fileAuthorWriteDifferentNetwork
1255 [VOS_VOLUME_TIME_STATS_1_TO_7_DAYS
],
1257 fileAuthorWriteDifferentNetwork
1258 [VOS_VOLUME_TIME_STATS_GREATER_THAN_7_DAYS
]);
1259 printf("%sDir Author Write Same Network\t%d\t%d\t%d\t%d\t%d\t%d\n",
1262 dirAuthorWriteSameNetwork
1263 [VOS_VOLUME_TIME_STATS_0_TO_60_SECONDS
],
1265 dirAuthorWriteSameNetwork
1266 [VOS_VOLUME_TIME_STATS_1_TO_10_MINUTES
],
1268 dirAuthorWriteSameNetwork
1269 [VOS_VOLUME_TIME_STATS_10_TO_60_MINUTES
],
1271 dirAuthorWriteSameNetwork
[VOS_VOLUME_TIME_STATS_1_TO_24_HOURS
],
1273 dirAuthorWriteSameNetwork
[VOS_VOLUME_TIME_STATS_1_TO_7_DAYS
],
1275 dirAuthorWriteSameNetwork
1276 [VOS_VOLUME_TIME_STATS_GREATER_THAN_7_DAYS
]);
1277 printf("%sDir Author Write Diff Network\t%d\t%d\t%d\t%d\t%d\t%d\n",
1280 dirAuthorWriteDifferentNetwork
1281 [VOS_VOLUME_TIME_STATS_0_TO_60_SECONDS
],
1283 dirAuthorWriteDifferentNetwork
1284 [VOS_VOLUME_TIME_STATS_1_TO_10_MINUTES
],
1286 dirAuthorWriteDifferentNetwork
1287 [VOS_VOLUME_TIME_STATS_10_TO_60_MINUTES
],
1289 dirAuthorWriteDifferentNetwork
1290 [VOS_VOLUME_TIME_STATS_1_TO_24_HOURS
],
1292 dirAuthorWriteDifferentNetwork
1293 [VOS_VOLUME_TIME_STATS_1_TO_7_DAYS
],
1295 dirAuthorWriteDifferentNetwork
1296 [VOS_VOLUME_TIME_STATS_GREATER_THAN_7_DAYS
]);
1298 printf("%sUnable to print volume because volume status:\n", prefix
);
1299 switch (entry
->status
) {
1301 printf("%s\tVOS_SALVAGE\n", prefix
);
1304 printf("%s\tVOS_NO_VNODE\n", prefix
);
1307 printf("%s\tVOS_NO_VOL\n", prefix
);
1309 case VOS_VOL_EXISTS
:
1310 printf("%s\tVOS_VOL_EXISTS\n", prefix
);
1312 case VOS_NO_SERVICE
:
1313 printf("%s\tVOS_NO_SERVICE\n", prefix
);
1316 printf("%s\tVOS_OFFLINE\n", prefix
);
1319 printf("%s\tVOS_ONLINE\n", prefix
);
1322 printf("%s\tVOS_DISK_FULL\n", prefix
);
1324 case VOS_OVER_QUOTA
:
1325 printf("%s\tVOS_OVER_QUOTA\n", prefix
);
1328 printf("%s\tVOS_BUSY\n", prefix
);
1331 printf("%s\tVOS_MOVED\n", prefix
);
1334 printf("Unknown volume status %d\n", entry
->status
);
1341 DoVosVolumeGet(struct cmd_syndesc
*as
, void *arock
)
1343 enum { SERVER
, PARTITION
, VOLUME
};
1344 afs_status_t st
= 0;
1345 void *vos_server
= NULL
;
1346 unsigned int partition_id
= 0;
1347 unsigned int volume_id
= 0;
1348 vos_volumeEntry_t entry
;
1350 if (as
->parms
[SERVER
].items
) {
1352 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
1353 ERR_ST_EXT("vos_ServerOpen", st
);
1357 if (as
->parms
[PARTITION
].items
) {
1359 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
1362 if (as
->parms
[VOLUME
].items
) {
1363 const char *volume
= as
->parms
[VOLUME
].items
->data
;
1364 volume_id
= GetVolumeIdFromString(volume
);
1368 (cellHandle
, vos_server
, 0, partition_id
, volume_id
, &entry
, &st
)) {
1369 ERR_ST_EXT("vos_VolumeGet", st
);
1372 Print_vos_volumeEntry_p(&entry
, "");
1378 DoVosVolumeList(struct cmd_syndesc
*as
, void *arock
)
1380 enum { SERVER
, PARTITION
};
1381 afs_status_t st
= 0;
1382 void *vos_server
= NULL
;
1384 unsigned int partition_id
= 0;
1385 vos_volumeEntry_t entry
;
1387 if (as
->parms
[SERVER
].items
) {
1389 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
1390 ERR_ST_EXT("vos_ServerOpen", st
);
1394 if (as
->parms
[PARTITION
].items
) {
1396 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
1399 if (!vos_VolumeGetBegin
1400 (cellHandle
, vos_server
, 0, partition_id
, &iter
, &st
)) {
1401 ERR_ST_EXT("vos_VolumeGetBegin", st
);
1404 printf("Volumes located at %s partition %s\n",
1405 as
->parms
[SERVER
].items
->data
, as
->parms
[PARTITION
].items
->data
);
1407 while (vos_VolumeGetNext(iter
, &entry
, &st
)) {
1408 Print_vos_volumeEntry_p(&entry
, " ");
1412 if (st
!= ADMITERATORDONE
) {
1413 ERR_ST_EXT("vos_VolumeGetNext", st
);
1416 if (!vos_VolumeGetDone(iter
, &st
)) {
1417 ERR_ST_EXT("vos_VolumeGetDone", st
);
1424 DoVosVolumeMove(struct cmd_syndesc
*as
, void *arock
)
1426 enum { VOLUME
, FROMSERVER
, FROMPARTITION
, TOSERVER
,
1429 afs_status_t st
= 0;
1430 void *from_server
= NULL
;
1431 void *to_server
= NULL
;
1432 unsigned int from_partition
= 0;
1433 unsigned int to_partition
= 0;
1434 unsigned int volume_id
= 0;
1436 if (as
->parms
[FROMSERVER
].items
) {
1438 (cellHandle
, as
->parms
[FROMSERVER
].items
->data
, &from_server
,
1440 ERR_ST_EXT("vos_ServerOpen", st
);
1444 if (as
->parms
[TOSERVER
].items
) {
1446 (cellHandle
, as
->parms
[TOSERVER
].items
->data
, &to_server
, &st
)) {
1447 ERR_ST_EXT("vos_ServerOpen", st
);
1451 if (as
->parms
[FROMPARTITION
].items
) {
1453 GetPartitionIdFromString(as
->parms
[FROMPARTITION
].items
->data
);
1456 if (as
->parms
[TOPARTITION
].items
) {
1458 GetPartitionIdFromString(as
->parms
[TOPARTITION
].items
->data
);
1461 if (as
->parms
[VOLUME
].items
) {
1462 const char *volume
= as
->parms
[VOLUME
].items
->data
;
1463 volume_id
= GetVolumeIdFromString(volume
);
1467 (cellHandle
, 0, volume_id
, from_server
, from_partition
, to_server
,
1468 to_partition
, &st
)) {
1469 ERR_ST_EXT("vos_VolumeMove", st
);
1476 DoVosVolumeRelease(struct cmd_syndesc
*as
, void *arock
)
1478 enum { VOLUME
, FORCE
};
1479 afs_status_t st
= 0;
1480 unsigned int volume_id
= 0;
1481 vos_force_t force
= VOS_NORMAL
;
1483 if (as
->parms
[VOLUME
].items
) {
1484 const char *volume
= as
->parms
[VOLUME
].items
->data
;
1485 volume_id
= GetVolumeIdFromString(volume
);
1488 if (as
->parms
[FORCE
].items
) {
1492 if (!vos_VolumeRelease(cellHandle
, 0, volume_id
, force
, &st
)) {
1493 ERR_ST_EXT("vos_VolumeRelease", st
);
1499 DoVosVolumeZap(struct cmd_syndesc
*as
, void *arock
)
1501 enum { SERVER
, PARTITION
, VOLUME
, FORCE
};
1502 afs_status_t st
= 0;
1503 void *vos_server
= NULL
;
1504 unsigned int partition_id
= 0;
1505 unsigned int volume_id
= 0;
1506 vos_force_t force
= VOS_NORMAL
;
1508 if (as
->parms
[SERVER
].items
) {
1510 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
1511 ERR_ST_EXT("vos_ServerOpen", st
);
1515 if (as
->parms
[PARTITION
].items
) {
1517 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
1520 if (as
->parms
[VOLUME
].items
) {
1521 const char *volume
= as
->parms
[VOLUME
].items
->data
;
1522 volume_id
= GetVolumeIdFromString(volume
);
1525 if (as
->parms
[FORCE
].items
) {
1530 (cellHandle
, vos_server
, 0, partition_id
, volume_id
, force
, &st
)) {
1531 ERR_ST_EXT("vos_VolumeZap", st
);
1538 DoVosPartitionNameToId(struct cmd_syndesc
*as
, void *arock
)
1541 unsigned int partition_id
= 0;
1543 if (as
->parms
[PARTITION
].items
) {
1545 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
1548 printf("The id for partition %s is %u\n",
1549 as
->parms
[PARTITION
].items
->data
, partition_id
);
1555 DoVosPartitionIdToName(struct cmd_syndesc
*as
, void *arock
)
1557 enum { PARTITIONID
};
1558 afs_status_t st
= 0;
1559 unsigned int partition_id
= 0;
1560 char partition
[VOS_MAX_PARTITION_NAME_LEN
];
1562 if (as
->parms
[PARTITIONID
].items
) {
1564 GetIntFromString(as
->parms
[PARTITIONID
].items
->data
,
1565 "bad partition id");
1568 if (!vos_PartitionIdToName(partition_id
, partition
, &st
)) {
1569 ERR_ST_EXT("bad partition id", st
);
1572 printf("The partition for id %u is %s\n", partition_id
, partition
);
1578 DoVosVolumeQuotaChange(struct cmd_syndesc
*as
, void *arock
)
1580 enum { SERVER
, PARTITION
, VOLUME
,
1583 afs_status_t st
= 0;
1584 void *vos_server
= NULL
;
1585 unsigned int partition_id
= 0;
1586 unsigned int volume_id
= 0;
1587 unsigned int quota
= 0;
1589 if (as
->parms
[SERVER
].items
) {
1591 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
1592 ERR_ST_EXT("vos_ServerOpen", st
);
1596 if (as
->parms
[PARTITION
].items
) {
1598 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
1601 if (as
->parms
[VOLUME
].items
) {
1602 const char *volume
= as
->parms
[VOLUME
].items
->data
;
1603 volume_id
= GetVolumeIdFromString(volume
);
1606 if (as
->parms
[QUOTA
].items
) {
1608 GetIntFromString(as
->parms
[QUOTA
].items
->data
, "invalid quota");
1611 if (!vos_VolumeQuotaChange
1612 (cellHandle
, vos_server
, 0, partition_id
, volume_id
, quota
, &st
)) {
1613 ERR_ST_EXT("vos_VolumeQuotaChange", st
);
1620 * Parse a server name/address and return the address in HOST BYTE order
1623 GetServer(char *aname
)
1629 char hostname
[MAXHOSTCHARS
];
1631 code
= sscanf(aname
, "%d.%d.%d.%d", &b1
, &b2
, &b3
, &b4
);
1633 addr
= (b1
<< 24) | (b2
<< 16) | (b3
<< 8) | b4
;
1634 addr
= ntohl(addr
); /* convert to host order */
1636 th
= gethostbyname(aname
);
1639 memcpy(&addr
, th
->h_addr
, sizeof(addr
));
1642 if (rx_IsLoopbackAddr(ntohl(addr
))) { /* local host */
1643 code
= gethostname(hostname
, MAXHOSTCHARS
);
1646 th
= gethostbyname(hostname
); /* returns host byte order */
1649 memcpy(&addr
, th
->h_addr
, sizeof(addr
));
1656 Print_vos_volintInfo(afs_uint32 server
, afs_uint32 partition
, volintInfo
* pinfo
, const char *prefix
)
1658 static afs_uint32 server_cache
;
1659 static int cache_valid
= 0;
1660 static char hostname
[256], address
[32];
1662 if (!cache_valid
|| server
!= server_cache
) {
1666 strcpy(hostname
, hostutil_GetNameByINet(server
));
1667 strcpy(address
, inet_ntoa(s
));
1668 server_cache
= server
;
1673 printf("%sname\t\t%s\n",prefix
, pinfo
->name
);
1674 printf("%sid\t\t%lu\n",prefix
, afs_printable_uint32_lu(pinfo
->volid
));
1675 printf("%sserv\t\t%s\t%s\n",prefix
, address
,hostname
);
1676 printf("%spart\t\t%u\n", prefix
,partition
);
1678 switch (pinfo
->status
) {
1680 printf("%sstatus\t\tOK\n",prefix
);
1682 case 101: /* VBUSY */
1683 printf("%sstatus\t\tBUSY\n",prefix
);
1686 printf("%sstatus\t\tUNATTACHABLE\n",prefix
);
1689 printf("%sbackupID\t%lu\n",prefix
,
1690 afs_printable_uint32_lu(pinfo
->backupID
));
1691 printf("%sparentID\t%lu\n",prefix
,
1692 afs_printable_uint32_lu(pinfo
->parentID
));
1693 printf("%scloneID\t%lu\n",prefix
,
1694 afs_printable_uint32_lu(pinfo
->cloneID
));
1695 printf("%sinUse\t\t%s\n",prefix
, pinfo
->inUse
? "Y" : "N");
1696 printf("%sneedsSalvaged\t%s\n",prefix
, pinfo
->needsSalvaged
? "Y" : "N");
1697 /* 0xD3 is from afs/volume.h since I had trouble including the file */
1698 printf("%sdestroyMe\t%s\n",prefix
, pinfo
->destroyMe
== 0xD3 ? "Y" : "N");
1699 switch (pinfo
->type
) {
1701 printf("%stype\t\tRW\n",prefix
);
1704 printf("%stype\t\tRO\n",prefix
);
1707 printf("%stype\t\tBK\n",prefix
);
1710 printf("%stype\t\t?\n",prefix
);
1713 printf("%screationDate\t%-9lu\n", prefix
,
1714 afs_printable_uint32_lu(pinfo
->creationDate
));
1715 printf("%saccessDate\t%-9lu\n", prefix
,
1716 afs_printable_uint32_lu(pinfo
->accessDate
));
1717 printf("%supdateDate\t%-9lu\n", prefix
,
1718 afs_printable_uint32_lu(pinfo
->updateDate
));
1719 printf("%sbackupDate\t%-9lu\n", prefix
,
1720 afs_printable_uint32_lu(pinfo
->backupDate
));
1721 printf("%scopyDate\t%-9lu\n", prefix
,
1722 afs_printable_uint32_lu(pinfo
->copyDate
));
1724 printf("%sflags\t\t%#lx\t(Optional)\n",prefix
, afs_printable_int32_ld(pinfo
->flags
));
1725 printf("%sdiskused\t%u\n",prefix
, pinfo
->size
);
1726 printf("%smaxquota\t%u\n",prefix
, pinfo
->maxquota
);
1727 printf("%sminquota\t%lu\t(Optional)\n",prefix
,
1728 afs_printable_uint32_lu(pinfo
->spare0
));
1729 printf("%sfilecount\t%u\n",prefix
, pinfo
->filecount
);
1730 printf("%sdayUse\t\t%u\n",prefix
, pinfo
->dayUse
);
1731 printf("%sweekUse\t%lu\t(Optional)\n",prefix
,
1732 afs_printable_uint32_lu(pinfo
->spare1
));
1733 printf("%svolUpdateCounter\t\t%lu\t(Optional)\n",prefix
,
1734 afs_printable_uint32_lu(pinfo
->spare2
));
1735 printf("%sspare3\t\t%lu\t(Optional)\n",prefix
,
1736 afs_printable_uint32_lu(pinfo
->spare3
));
1740 DoVosVolumeGet2(struct cmd_syndesc
*as
, void *arock
)
1742 enum { SERVER
, PARTITION
, VOLUME
};
1743 afs_status_t st
= 0;
1744 void *vos_server
= NULL
;
1745 afs_uint32 partition_id
= 0;
1746 afs_uint32 volume_id
= 0;
1749 memset(&info
, 0, sizeof(struct volintInfo
));
1751 if (as
->parms
[SERVER
].items
) {
1753 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
1754 ERR_ST_EXT("vos_ServerOpen", st
);
1758 if (as
->parms
[PARTITION
].items
) {
1760 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
1763 if (as
->parms
[VOLUME
].items
) {
1764 const char *volume
= as
->parms
[VOLUME
].items
->data
;
1765 volume_id
= GetVolumeIdFromString(volume
);
1770 (cellHandle
, vos_server
, 0, partition_id
, volume_id
, &info
, &st
)) {
1771 ERR_ST_EXT("vos_VolumeGet2", st
);
1775 Print_vos_volintInfo(GetServer(as
->parms
[SERVER
].items
->data
),partition_id
,&info
," ");
1782 DoVos_ClearVolUpdateCounter(struct cmd_syndesc
*as
, void *arock
)
1784 enum { SERVER
, PARTITION
, VOLUME
};
1785 afs_status_t st
= 0;
1786 void *vos_server
= NULL
;
1787 unsigned int partition_id
= 0;
1788 unsigned int volume_id
= 0;
1790 if (as
->parms
[SERVER
].items
) {
1792 (cellHandle
, as
->parms
[SERVER
].items
->data
, &vos_server
, &st
)) {
1793 ERR_ST_EXT("vos_ServerOpen", st
);
1797 if (as
->parms
[PARTITION
].items
) {
1799 GetPartitionIdFromString(as
->parms
[PARTITION
].items
->data
);
1802 if (as
->parms
[VOLUME
].items
) {
1803 const char *volume
= as
->parms
[VOLUME
].items
->data
;
1804 volume_id
= GetVolumeIdFromString(volume
);
1807 if (!vos_ClearVolUpdateCounter
1808 (cellHandle
, vos_server
,partition_id
, volume_id
, &st
)) {
1809 ERR_ST_EXT("vos_ClearVolUpdateCounter", st
);
1816 SetupVosAdminCmd(void)
1818 struct cmd_syndesc
*ts
;
1820 ts
= cmd_CreateSyntax("VosBackupVolumeCreate", DoVosBackupVolumeCreate
, NULL
, 0,
1821 "create a backup volume");
1822 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_REQUIRED
, "volume to back up");
1823 SetupCommonCmdArgs(ts
);
1825 ts
= cmd_CreateSyntax("VosBackupVolumeCreateMultiple",
1826 DoVosBackupVolumeCreateMultiple
, NULL
, 0,
1827 "create a backup volume");
1828 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_OPTIONAL
,
1829 "server housing volumes to back up");
1830 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_OPTIONAL
,
1831 "partition housing volumes to back up");
1832 cmd_AddParm(ts
, "-prefix", CMD_SINGLE
, CMD_OPTIONAL
,
1833 "common prefix of volumes to back up");
1834 cmd_AddParm(ts
, "-exclude", CMD_FLAG
, CMD_OPTIONAL
,
1835 "exclude volumes from backup that match prefix");
1836 SetupCommonCmdArgs(ts
);
1838 ts
= cmd_CreateSyntax("VosPartitionGet", DoVosPartitionGet
, NULL
, 0,
1839 "get information about a partition");
1840 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_REQUIRED
,
1841 "server housing partition of interest");
1842 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_REQUIRED
,
1843 "partition to query");
1844 SetupCommonCmdArgs(ts
);
1846 ts
= cmd_CreateSyntax("VosPartitionList", DoVosPartitionList
, NULL
, 0,
1847 "list information about all partitions at a server");
1848 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_REQUIRED
,
1849 "server housing partitions of interest");
1850 SetupCommonCmdArgs(ts
);
1852 ts
= cmd_CreateSyntax("VosServerSync", DoVosServerSync
, NULL
, 0,
1853 "sync server with vldb");
1854 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_REQUIRED
, "server to sync");
1855 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_OPTIONAL
,
1856 "partition to sync");
1857 SetupCommonCmdArgs(ts
);
1859 ts
= cmd_CreateSyntax("VosFileServerAddressChange",
1860 DoVosFileServerAddressChange
, NULL
, 0,
1861 "change a server's address in the vldb");
1862 cmd_AddParm(ts
, "-oldaddress", CMD_SINGLE
, CMD_REQUIRED
,
1863 "old address to change");
1864 cmd_AddParm(ts
, "-newaddress", CMD_SINGLE
, CMD_REQUIRED
, "new address");
1865 SetupCommonCmdArgs(ts
);
1867 ts
= cmd_CreateSyntax("VosFileServerAddressRemove",
1868 DoVosFileServerAddressRemove
, NULL
, 0,
1869 "remove a server's address from the vldb");
1870 cmd_AddParm(ts
, "-address", CMD_SINGLE
, CMD_REQUIRED
,
1871 "address to remove");
1872 SetupCommonCmdArgs(ts
);
1874 ts
= cmd_CreateSyntax("VosFileServerList", DoVosFileServerList
, NULL
, 0,
1875 "list the file servers in a cell");
1876 SetupCommonCmdArgs(ts
);
1878 ts
= cmd_CreateSyntax("VosServerTransactionStatusList",
1879 DoVosServerTransactionStatusList
, NULL
, 0,
1880 "list the active transactions at a server");
1881 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_REQUIRED
, "server to query");
1882 SetupCommonCmdArgs(ts
);
1884 ts
= cmd_CreateSyntax("VosVLDBGet", DoVosVLDBGet
, NULL
, 0,
1885 "get a vldb entry for a volume");
1886 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_REQUIRED
,
1887 "volume to retrieve");
1888 SetupCommonCmdArgs(ts
);
1890 ts
= cmd_CreateSyntax("VosVLDBList", DoVosVLDBList
, NULL
, 0,
1891 "list a group of vldb entries");
1892 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_OPTIONAL
,
1893 "limit entries to a particular server");
1894 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_OPTIONAL
,
1895 "limit entries to a particular partition");
1896 SetupCommonCmdArgs(ts
);
1898 ts
= cmd_CreateSyntax("VosVLDBEntryRemove", DoVosVLDBEntryRemove
, NULL
, 0,
1899 "remove vldb entries");
1900 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_OPTIONAL
,
1901 "limit entries to a particular server");
1902 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_OPTIONAL
,
1903 "limit entries to a particular partition");
1904 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_OPTIONAL
, "volume to remove");
1905 SetupCommonCmdArgs(ts
);
1907 ts
= cmd_CreateSyntax("VosVLDBUnlock", DoVosVLDBUnlock
, NULL
, 0,
1908 "unlock a group of vldb entries");
1909 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_OPTIONAL
,
1910 "limit entries to a particular server");
1911 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_OPTIONAL
,
1912 "limit entries to a particular partition");
1913 SetupCommonCmdArgs(ts
);
1915 ts
= cmd_CreateSyntax("VosVLDBEntryLock", DoVosVLDBList
, NULL
, 0,
1916 "lock a single vldb entry");
1917 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_REQUIRED
, "volume to lock");
1918 SetupCommonCmdArgs(ts
);
1920 ts
= cmd_CreateSyntax("VosVLDBEntryUnlock", DoVosVLDBEntryUnlock
, NULL
, 0,
1921 "unlock a single vldb entry");
1922 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_REQUIRED
, "volume to unlock");
1923 SetupCommonCmdArgs(ts
);
1925 ts
= cmd_CreateSyntax("VosVLDBReadOnlySiteCreate",
1926 DoVosVLDBReadOnlySiteCreate
, NULL
, 0,
1927 "create a read only site");
1928 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_REQUIRED
,
1929 "server where read only will be created");
1930 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_REQUIRED
,
1931 "partition where read only will be created");
1932 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_REQUIRED
,
1933 "volume to replicate");
1934 SetupCommonCmdArgs(ts
);
1936 ts
= cmd_CreateSyntax("VosVLDBReadOnlySiteDelete",
1937 DoVosVLDBReadOnlySiteDelete
, NULL
, 0,
1938 "delete a read only site before initial replication");
1939 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_OPTIONAL
,
1940 "server where read only will be deleted");
1941 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_OPTIONAL
,
1942 "partition where read only will be deleted");
1943 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_REQUIRED
, "volume to delete");
1944 SetupCommonCmdArgs(ts
);
1946 ts
= cmd_CreateSyntax("VosVLDBSync", DoVosVLDBSync
, NULL
, 0,
1947 "sync vldb with server");
1948 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_REQUIRED
, "server to sync");
1949 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_OPTIONAL
,
1950 "limit sync to a particular partition");
1951 cmd_AddParm(ts
, "-force", CMD_FLAG
, CMD_OPTIONAL
, "force sync to occur");
1952 SetupCommonCmdArgs(ts
);
1954 ts
= cmd_CreateSyntax("VosVolumeCreate", DoVosVolumeCreate
, NULL
, 0,
1955 "create a read write volume");
1956 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_REQUIRED
,
1957 "server where volume will be created");
1958 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_REQUIRED
,
1959 "partition where volume will be created");
1960 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_REQUIRED
,
1961 "name of new volume");
1962 cmd_AddParm(ts
, "-quota", CMD_SINGLE
, CMD_REQUIRED
,
1963 "size quota of new volume in 1kb units");
1964 SetupCommonCmdArgs(ts
);
1966 ts
= cmd_CreateSyntax("VosVolumeDelete", DoVosVolumeDelete
, NULL
, 0,
1968 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_REQUIRED
,
1969 "server where volume exists");
1970 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_REQUIRED
,
1971 "partition where volume exists");
1972 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_REQUIRED
, "volume to delete");
1973 SetupCommonCmdArgs(ts
);
1975 ts
= cmd_CreateSyntax("VosVolumeRename", DoVosVolumeRename
, NULL
, 0,
1977 cmd_AddParm(ts
, "-oldname", CMD_SINGLE
, CMD_REQUIRED
, "old volume name");
1978 cmd_AddParm(ts
, "-newname", CMD_SINGLE
, CMD_REQUIRED
, "new volume name");
1979 SetupCommonCmdArgs(ts
);
1981 ts
= cmd_CreateSyntax("VosVolumeDump", DoVosVolumeDump
, NULL
, 0,
1982 "dump a volume to a file");
1983 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_OPTIONAL
,
1984 "dump volume at a particular server");
1985 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_OPTIONAL
,
1986 "dump volume at a particular partition");
1987 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_REQUIRED
, "volume to dump");
1988 cmd_AddParm(ts
, "-starttime", CMD_SINGLE
, CMD_REQUIRED
,
1989 "files modified after this time will be dumped");
1990 cmd_AddParm(ts
, "-dumpfile", CMD_SINGLE
, CMD_REQUIRED
,
1991 "file to contain dump results");
1992 SetupCommonCmdArgs(ts
);
1994 ts
= cmd_CreateSyntax("VosVolumeRestore", DoVosVolumeRestore
, NULL
, 0,
1995 "restore a volume from a dumpfile");
1996 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_REQUIRED
,
1997 "server that houses volume to restore");
1998 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_REQUIRED
,
1999 "partition that houses volume to restore");
2000 cmd_AddParm(ts
, "-id", CMD_SINGLE
, CMD_OPTIONAL
, "id of volume restored");
2001 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_REQUIRED
,
2002 "name of volume restored");
2003 cmd_AddParm(ts
, "-dumpfile", CMD_SINGLE
, CMD_REQUIRED
,
2004 "file contained dump of volume");
2005 cmd_AddParm(ts
, "-full", CMD_FLAG
, CMD_OPTIONAL
,
2006 "does a full restore of volume");
2007 SetupCommonCmdArgs(ts
);
2009 ts
= cmd_CreateSyntax("VosVolumeOnline", DoVosVolumeOnline
, NULL
, 0,
2010 "bring a volume online");
2011 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_REQUIRED
,
2012 "server that houses volume");
2013 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_REQUIRED
,
2014 "partition that houses volume");
2015 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_REQUIRED
,
2016 "volume to bring online");
2017 cmd_AddParm(ts
, "-sleep", CMD_SINGLE
, CMD_REQUIRED
, "seconds to sleep");
2018 cmd_AddParm(ts
, "-busy", CMD_FLAG
, CMD_OPTIONAL
, "mark volume busy");
2019 SetupCommonCmdArgs(ts
);
2021 ts
= cmd_CreateSyntax("VosVolumeOffline", DoVosVolumeOffline
, NULL
, 0,
2022 "take a volume offline");
2023 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_REQUIRED
,
2024 "server that houses volume");
2025 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_REQUIRED
,
2026 "partition that houses volume");
2027 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_REQUIRED
,
2028 "volume to bring offline");
2029 SetupCommonCmdArgs(ts
);
2031 ts
= cmd_CreateSyntax("VosVolumeGet", DoVosVolumeGet
, NULL
, 0,
2032 "get a volume entry");
2033 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_REQUIRED
,
2034 "server that houses volume");
2035 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_REQUIRED
,
2036 "partition that houses volume");
2037 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_REQUIRED
,
2038 "volume to retrieve");
2039 SetupCommonCmdArgs(ts
);
2041 ts
= cmd_CreateSyntax("VosVolumeList", DoVosVolumeList
, NULL
, 0,
2042 "list a group of volumes");
2043 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_REQUIRED
,
2044 "limit volumes to a particular server");
2045 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_REQUIRED
,
2046 "limit volumes to a particular partition");
2047 SetupCommonCmdArgs(ts
);
2049 ts
= cmd_CreateSyntax("VosVolumeMove", DoVosVolumeMove
, NULL
, 0,
2051 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_REQUIRED
, "volume to move");
2052 cmd_AddParm(ts
, "-fromserver", CMD_SINGLE
, CMD_REQUIRED
, "source server");
2053 cmd_AddParm(ts
, "-frompartition", CMD_SINGLE
, CMD_REQUIRED
,
2054 "source partition");
2055 cmd_AddParm(ts
, "-toserver", CMD_SINGLE
, CMD_REQUIRED
,
2056 "destination server");
2057 cmd_AddParm(ts
, "-topartition", CMD_SINGLE
, CMD_REQUIRED
,
2058 "destination partition");
2059 SetupCommonCmdArgs(ts
);
2061 ts
= cmd_CreateSyntax("VosVolumeRelease", DoVosVolumeRelease
, NULL
, 0,
2062 "release updates to read only");
2063 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_REQUIRED
,
2064 "volume to replicate");
2065 cmd_AddParm(ts
, "-force", CMD_FLAG
, CMD_OPTIONAL
,
2066 "force release to occur");
2067 SetupCommonCmdArgs(ts
);
2069 ts
= cmd_CreateSyntax("VosVolumeZap", DoVosVolumeZap
, NULL
, 0, "zap a volume");
2070 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_REQUIRED
,
2071 "server that houses the volume to zap");
2072 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_REQUIRED
,
2073 "partition that houses the volume to zap");
2074 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_REQUIRED
, "volume to zap");
2075 cmd_AddParm(ts
, "-force", CMD_FLAG
, CMD_OPTIONAL
, "force zap");
2076 SetupCommonCmdArgs(ts
);
2078 ts
= cmd_CreateSyntax("VosPartitionNameToId", DoVosPartitionNameToId
, NULL
, 0,
2079 "convert a partition name to a number");
2080 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_REQUIRED
,
2081 "partition to convert");
2082 SetupCommonCmdArgs(ts
);
2084 ts
= cmd_CreateSyntax("VosPartitionIdToName", DoVosPartitionIdToName
, NULL
, 0,
2085 "convert a number to a partition");
2086 cmd_AddParm(ts
, "-id", CMD_SINGLE
, CMD_REQUIRED
, "number to convert");
2087 SetupCommonCmdArgs(ts
);
2089 ts
= cmd_CreateSyntax("VosVolumeQuotaChange", DoVosVolumeQuotaChange
, NULL
, 0,
2090 "change the quota for a partition");
2091 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_REQUIRED
,
2092 "server that houses the volume");
2093 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_REQUIRED
,
2094 "partition that houses the volume");
2095 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_REQUIRED
, "volume to change");
2096 cmd_AddParm(ts
, "-quota", CMD_SINGLE
, CMD_REQUIRED
,
2097 "new quota in 1kb units");
2098 SetupCommonCmdArgs(ts
);
2100 ts
= cmd_CreateSyntax("VosVolumeGet2", DoVosVolumeGet2
, NULL
, 0,
2101 "get a volume entry");
2102 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_REQUIRED
,
2103 "server that houses volume");
2104 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_REQUIRED
,
2105 "partition that houses volume");
2106 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_REQUIRED
,
2107 "volume to retrieve");
2108 SetupCommonCmdArgs(ts
);
2110 ts
= cmd_CreateSyntax("ClearVolUpdateCounter", DoVos_ClearVolUpdateCounter
, NULL
, 0,
2111 "clear volUpdateCounter");
2112 cmd_AddParm(ts
, "-server", CMD_SINGLE
, CMD_REQUIRED
,
2113 "server that houses volume");
2114 cmd_AddParm(ts
, "-partition", CMD_SINGLE
, CMD_REQUIRED
,
2115 "partition that houses volume");
2116 cmd_AddParm(ts
, "-volume", CMD_SINGLE
, CMD_REQUIRED
,
2118 SetupCommonCmdArgs(ts
);