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
10 #include <afsconfig.h>
11 #include <afs/param.h>
17 #include <afs/afsint.h>
18 #include <rx/rx_globals.h>
20 #include <sys/socket.h>
21 #include <netinet/in.h>
33 struct ubik_client *cstruct;
34 struct rx_connection *serverconns[MAXSERVERS];
37 extern int AFS_FetchData(), AFS_StoreData(), AFS_StoreACL();
38 extern int RXAFS_GetTime(), AFS_GetStatistics(), AFS_FetchStatus(),
40 extern int AFS_StoreStatus(), AFS_RemoveFile(), AFS_CreateFile();
41 extern int AFS_Rename(), AFS_Symlink(), AFS_HardLink(), AFS_MakeDir(),
43 extern int AFS_Readdir(), AFS_MakeMountPoint(), AFS_ReleaseTokens(),
45 extern int AFS_BulkStatus(), AFS_Lookup();
46 extern int AFS_BulkStatus(), AFS_BulkLookup(), AFS_RenewAllTokens();
47 extern int AFS_BulkFetchVV(), AFS_BulkKeepAlive();
48 extern int AFS_Spare1(), AFS_Spare2(), AFS_Spare3(), AFS_Spare4(),
49 AFS_Spare5(), AFS_Spare6();
52 pxclient_Initialize(int auth, afs_int32 serverAddr)
56 struct rx_securityClass *sc;
58 code = rx_Init(htons(2115) /*0 */ );
60 fprintf(stderr, "pxclient_Initialize: Could not initialize rx.\n");
67 sc = rxnull_NewClientSecurityObject();
70 #ifdef notdef /* security */
72 sc = rxvab_NewClientSecurityObject(&ttoken.sessionKey, ttoken.ticket,
77 sc = rxkad_NewClientSecurityObject(rxkad_clear, &ttoken.sessionKey,
78 ttoken.kvno, ttoken.ticketLen,
83 rx_NewConnection(serverAddr, htons(7000), 1, sc, scIndex);
85 code = ubik_ClientInit(serverconns, &cstruct);
88 fprintf(stderr, "pxclient_Initialize: ubik client init failed.\n");
96 #include "AFS_component_version_number.c"
99 main(int argc, char **argv)
102 struct sockaddr_in host;
103 register afs_int32 code;
104 extern struct hostent *gethostbyname();
109 int noAuth = 1; /* Default is authenticated connections */
113 printf("usage: pxclient <serverHost>\n");
116 memset((char *)&host, 0, sizeof(struct sockaddr_in));
117 host.sin_family = AF_INET;
118 host.sin_addr.s_addr = inet_addr(av[0]);
119 #ifdef STRUCT_SOCKADDR_HAS_SA_LEN
120 host.sin_len = sizeof(struct sockaddr_in);
122 if (host.sin_addr.s_addr != -1) {
123 strcpy(hnamebuf, av[0]);
126 hp = gethostbyname(av[0]);
128 host.sin_family = hp->h_addrtype;
129 memcpy((caddr_t) & host.sin_addr, hp->h_addr, hp->h_length);
130 hostname = hp->h_name;
132 printf("unknown server host %s\n", av[0]);
136 if (code = pxclient_Initialize(noAuth, host.sin_addr.s_addr)) {
137 printf("Couldn't initialize fs library (code=%d).\n", code);
141 code = ubik_Call(RXAFS_GetTime, cstruct, 0, &tv.tv_sec, &tv.tv_usec);
143 printf("AFS_GetTime on %s sec=%d, usec=%d\n", av[0], tv.tv_sec,
146 printf("return code is %d\n", code);
154 if (fgets(line, 499, stdin) != NULL) {
156 register char **argp = args;
157 GetArgs(line, argp, &nargs);
160 if (!strcmp(oper, "probe")) {
162 ubik_Call(RXAFS_GetTime, cstruct, 0, &tv.tv_sec,
164 printf("return code is %d\n", code);
166 printf("sec=%d\n", tv.tv_sec);
167 } else if (!strcmp(oper, "fsstats")) {
168 struct afsStatistics stats;
170 code = ubik_Call(AFS_GetStatistics, cstruct, 0, &stats);
171 printf("return code is %d\n", code);
172 } else if (!strcmp(oper, "fd")) {
173 code = FetchData(argp);
174 printf("return code is %d\n", code);
175 } else if (!strcmp(oper, "fs")) {
176 code = FetchStatus(argp);
177 printf("return code is %d\n", code);
178 } else if (!strcmp(oper, "fa")) {
179 code = FetchACL(argp);
180 printf("return code is %d\n", code);
181 } else if (!strcmp(oper, "sd")) {
182 code = StoreData(argp);
183 printf("return code is %d\n", code);
184 } else if (!strcmp(oper, "ss")) {
185 code = StoreStatus(argp);
186 printf("return code is %d\n", code);
187 } else if (!strcmp(oper, "sa")) {
188 code = StoreACL(argp);
189 printf("return code is %d\n", code);
190 } else if (!strcmp(oper, "cf")) {
191 code = CreateFile(argp);
192 printf("return code is %d\n", code);
193 } else if (!strcmp(oper, "rf")) {
194 code = RemoveFile(argp);
195 printf("return code is %d\n", code);
196 } else if (!strcmp(oper, "rn")) {
198 printf("return code is %d\n", code);
199 } else if (!strcmp(oper, "sl")) {
200 code = Symlink(argp);
201 printf("return code is %d\n", code);
202 } else if (!strcmp(oper, "hl")) {
203 code = HardLink(argp);
204 printf("return code is %d\n", code);
205 } else if (!strcmp(oper, "md")) {
206 code = MakeDir(argp);
207 printf("return code is %d\n", code);
208 } else if (!strcmp(oper, "rd")) {
209 code = RemoveDir(argp);
210 printf("return code is %d\n", code);
211 } else if (!strcmp(oper, "rdd")) {
212 code = Readdir(argp);
213 printf("return code is %d\n", code);
214 } else if (!strcmp(oper, "mm")) {
215 code = MakeMountPoint(argp);
216 printf("return code is %d\n", code);
217 } else if (!strcmp(oper, "rt")) {
218 code = ReleaseTokens(argp);
219 printf("return code is %d\n", code);
220 } else if (!strcmp(oper, "bs")) {
221 code = BulkStatus(argp);
222 printf("return code is %d\n", code);
223 } else if (!strcmp(oper, "lk")) {
225 printf("return code is %d\n", code);
226 } else if (!strcmp(oper, "gt")) {
227 code = GetToken(argp);
228 printf("return code is %d\n", code);
229 } else if (!strcmp(oper, "ka")) {
230 code = KeepAlive(argp);
231 printf("return code is %d\n", code);
232 } else if ((!strcmp(oper, "q")) || !strcmp(oper, "quit"))
235 printf("Unknown oper! Available operations: \n\n");
236 printf("fd <vnode> <unique> <pos> <len>\n");
237 printf("fs <vnode> <unique>\n");
238 printf("fa <vnode> <unique>\n");
240 ("sd <vnode> <unique> <pos> <len> <flen> [<mode>|-1] [<owner>|-1] [<length>|-1] <string>\n");
242 ("ss <vnode> <unique> [<mode>|-1] [<owner>|-1] [<length>|-1]\n");
243 printf("sa <vnode> <unique> <string>\n");
244 printf("rf <vnode> <unique> <name>\n");
246 ("cf <vnode> <unique> <name> [<mode>|-1] [<owner>|-1] [<length>|-1]\n");
248 ("rn <ovnode> <ounique> <oname> <nvnode> <nunique> <nname>\n");
250 ("sl <vnode> <unique> <name> <contents> [<mode>|-1] [<owner>|-1] [<length>|-1]\n");
251 printf("hl <dvnode> <dunique> <name> <evnode> <eunique>\n");
253 ("md <vnode> <unique> <name> [<mode>|-1] [<owner>|-1] [<length>|-1]\n");
254 printf("rd <vnode> <unique> <name>\n");
255 printf("rdd <vnode> <unique> <pos> <len>\n");
256 printf("lk <vnode> <unique> <name>\n");
257 printf("gt <vnode> <unique> <tokenID>\n");
258 printf("ka <vol.l> <vnode> <unique> <isExec> <kaTime>\n");
267 GetArgs(register char *line, register char **args, register int *nargs)
271 register char *last = line;
278 *args++ = line, (*nargs)++;
279 while (*line && *line != ' ')
286 FetchData(char **argp)
288 struct afsFetchStatus OutStatus;
289 struct afsToken Token;
290 struct afsVolSync tsync;
292 int vnode, unique, position, length;
294 struct rx_call *tcall;
296 sscanf(&(*argp)[0], "%d", &vnode);
298 sscanf(&(*argp)[0], "%d", &unique);
300 memset(&fid, 0, sizeof(struct afsFid));
301 fid.Volume.low = 10; /* XXX */
304 sscanf(&(*argp)[0], "%d", &position);
306 sscanf(&(*argp)[0], "%d", &length);
308 tcall = rx_NewCall(cstruct->conns[0]);
309 code = StartAFS_FetchData(tcall, &fid, &hyp0, position, length, 0);
311 code = FetchProc(tcall);
314 code = EndAFS_FetchData(tcall, &OutStatus, &Token, &tsync);
316 code = rx_EndCall(tcall, code);
322 FetchProc(register struct rx_call *acall)
324 extern char *malloc();
325 register char *tbuffer;
326 afs_int32 tlen, length, code;
328 code = rx_Read(acall, &length, sizeof(afs_int32));
329 length = ntohl(length);
330 if (code != sizeof(afs_int32))
332 tbuffer = malloc(256);
334 tlen = (length > 256 ? 256 : length);
335 code = rx_Read(acall, tbuffer, tlen);
348 FetchStatus(char **argp)
350 struct afsFetchStatus OutStatus;
351 struct afsToken Token;
352 struct afsVolSync tsync;
357 sscanf(&(*argp)[0], "%d", &vnode);
359 sscanf(&(*argp)[0], "%d", &unique);
361 memset(&fid, 0, sizeof(struct afsFid));
362 fid.Volume.low = 10; /* XXX */
366 ubik_Call(AFS_FetchStatus, cstruct, 0, &fid, &hyp0, 0, &OutStatus,
373 FetchACL(char **argp)
375 struct afsFetchStatus OutStatus;
376 struct afsACL AccessList;
377 struct afsToken Token;
378 struct afsVolSync tsync;
383 sscanf(&(*argp)[0], "%d", &vnode);
385 sscanf(&(*argp)[0], "%d", &unique);
387 memset(&fid, 0, sizeof(struct afsFid));
388 fid.Volume.low = 10; /* XXX */
392 ubik_Call(AFS_FetchACL, cstruct, 0, &fid, &hyp0, 0, &AccessList,
399 StoreData(char **argp)
401 struct afsStoreStatus InStatus;
402 struct afsFetchStatus OutStatus;
403 struct afsVolSync tsync;
405 int vnode, unique, position, length, filelength;
406 int mode, owner, len;
409 struct rx_call *tcall;
411 sscanf(&(*argp)[0], "%d", &vnode);
413 sscanf(&(*argp)[0], "%d", &unique);
415 memset(&fid, 0, sizeof(struct afsFid));
416 fid.Volume.low = 10; /* XXX */
419 sscanf(&(*argp)[0], "%d", &position);
421 sscanf(&(*argp)[0], "%d", &length);
423 sscanf(&(*argp)[0], "%d", &filelength);
425 memset(&InStatus, 0, sizeof(struct afsStoreStatus));
426 sscanf(&(*argp)[0], "%d", &mode);
428 sscanf(&(*argp)[0], "%d", &owner);
430 sscanf(&(*argp)[0], "%d", &len);
433 InStatus.mode = mode;
434 InStatus.mask |= AFS_SETMODE;
437 InStatus.owner = owner;
438 InStatus.mask |= AFS_SETOWNER;
441 InStatus.length = length;
442 InStatus.mask |= AFS_SETLENGTH;
444 string = &argp[0][0];
447 tcall = rx_NewCall(cstruct->conns[0]);
449 StartAFS_StoreData(tcall, &fid, &InStatus, position, length,
450 filelength, &hyp0, 0);
452 code = StoreProc(tcall, string, length);
455 code = EndAFS_StoreData(tcall, &OutStatus, &tsync);
457 code = rx_EndCall(tcall, code);
463 StoreProc(register struct rx_call *acall, char *string, int length)
465 afs_int32 tlen, code;
468 tlen = (length > 256 ? 256 : length);
469 code = rx_Write(acall, string, tlen);
480 StoreStatus(char **argp)
482 struct afsStoreStatus InStatus;
483 struct afsFetchStatus OutStatus;
484 struct afsVolSync tsync;
486 int vnode, unique, mode, owner, length;
489 sscanf(&(*argp)[0], "%d", &vnode);
491 sscanf(&(*argp)[0], "%d", &unique);
493 memset(&fid, 0, sizeof(struct afsFid));
494 fid.Volume.low = 10; /* XXX */
497 memset(&InStatus, 0, sizeof(struct afsStoreStatus));
498 sscanf(&(*argp)[0], "%d", &mode);
500 sscanf(&(*argp)[0], "%d", &owner);
502 sscanf(&(*argp)[0], "%d", &length);
505 InStatus.mode = mode;
506 InStatus.mask |= AFS_SETMODE;
509 InStatus.owner = owner;
510 InStatus.mask |= AFS_SETOWNER;
513 InStatus.length = length;
514 InStatus.mask |= AFS_SETLENGTH;
517 ubik_Call(AFS_StoreStatus, cstruct, 0, &fid, &InStatus, &hyp0, 0,
524 StoreACL(char **argp)
526 struct afsFetchStatus OutStatus;
527 struct afsACL AccessList;
528 struct afsToken Token;
529 struct afsVolSync tsync;
535 sscanf(&(*argp)[0], "%d", &vnode);
537 sscanf(&(*argp)[0], "%d", &unique);
539 memset(&fid, 0, sizeof(struct afsFid));
540 fid.Volume.low = 10; /* XXX */
543 string = &argp[0][0];
545 AccessList.afsACL_len = strlen(string) + 1;
546 AccessList.afsACL_val = string;
548 ubik_Call(AFS_StoreACL, cstruct, 0, &fid, &AccessList, &hyp0, 0,
555 RemoveFile(char **argp)
557 struct afsFetchStatus OutDirStatus, OutFidStatus;
558 struct afsVolSync tsync;
559 struct afsFidName nameFid;
560 struct afsFid fid, outFid;
565 sscanf(&(*argp)[0], "%d", &vnode);
567 sscanf(&(*argp)[0], "%d", &unique);
569 memset(&fid, 0, sizeof(struct afsFid));
570 fid.Volume.low = 10; /* XXX */
575 memset(&nameFid, 0, sizeof(struct afsFidName));
576 strcpy(nameFid.name, name);
578 ubik_Call(AFS_RemoveFile, cstruct, 0, &fid, &nameFid, &hyp0, 0,
579 &OutDirStatus, &OutFidStatus, &outFid, &tsync);
585 CreateFile(char **argp)
587 struct afsFetchStatus OutDirStatus, OutFidStatus;
588 struct afsStoreStatus InStatus;
589 struct afsVolSync tsync;
590 struct afsFid fid, outFid;
591 struct afsToken Token;
593 int vnode, unique, mode, owner, length;
596 sscanf(&(*argp)[0], "%d", &vnode);
598 sscanf(&(*argp)[0], "%d", &unique);
600 memset(&fid, 0, sizeof(struct afsFid));
601 fid.Volume.low = 10; /* XXX */
606 memset(&InStatus, 0, sizeof(struct afsStoreStatus));
607 sscanf(&(*argp)[0], "%d", &mode);
609 sscanf(&(*argp)[0], "%d", &owner);
611 sscanf(&(*argp)[0], "%d", &length);
614 InStatus.mode = mode;
615 InStatus.mask |= AFS_SETMODE;
618 InStatus.owner = owner;
619 InStatus.mask |= AFS_SETOWNER;
622 InStatus.length = length;
623 InStatus.mask |= AFS_SETLENGTH;
626 ubik_Call(AFS_CreateFile, cstruct, 0, &fid, name, &InStatus, &hyp0, 0,
627 &outFid, &OutFidStatus, &OutDirStatus, &Token, &tsync);
635 struct afsFetchStatus OutOldDirStatus, OutNewDirStatus;
636 struct afsFetchStatus OutOldFileStatus, OutNewFileStatus;
637 struct afsVolSync tsync;
638 struct afsFid OldDirFid, NewDirFid, OutOldFileFid, OutNewFileFid;
639 struct afsFidName OldName, NewName;
641 int ovnode, ounique, nvnode, nunique;
644 sscanf(&(*argp)[0], "%d", &ovnode);
646 sscanf(&(*argp)[0], "%d", &ounique);
648 memset(&OldDirFid, 0, sizeof(struct afsFid));
649 OldDirFid.Volume.low = 10; /* XXX */
650 OldDirFid.Vnode = ovnode;
651 OldDirFid.Unique = ounique;
654 memset(&OldName, 0, sizeof(struct afsFidName));
655 strcpy(OldName.name, oname);
656 sscanf(&(*argp)[0], "%d", &nvnode);
658 sscanf(&(*argp)[0], "%d", &nunique);
660 memset(&NewDirFid, 0, sizeof(struct afsFid));
661 NewDirFid.Volume.low = 10; /* XXX */
662 NewDirFid.Vnode = nvnode;
663 NewDirFid.Unique = nunique;
666 memset(&NewName, 0, sizeof(struct afsFidName));
667 strcpy(NewName.name, nname);
669 ubik_Call(AFS_Rename, cstruct, 0, &OldDirFid, &OldName, &NewDirFid,
670 &NewName, &hyp0, 0, &OutOldDirStatus, &OutNewDirStatus,
671 &OutOldFileFid, &OutOldFileStatus, &OutNewFileFid,
672 &OutNewFileStatus, &tsync);
680 struct afsFetchStatus OutDirStatus, OutFidStatus;
681 struct afsStoreStatus InStatus;
682 struct afsVolSync tsync;
683 struct afsFid fid, outFid;
684 struct afsToken Token;
685 char *name, *linkcontents;
686 int vnode, unique, mode, owner, length;
689 sscanf(&(*argp)[0], "%d", &vnode);
691 sscanf(&(*argp)[0], "%d", &unique);
693 memset(&fid, 0, sizeof(struct afsFid));
694 fid.Volume.low = 10; /* XXX */
699 linkcontents = &argp[0][0];
701 memset(&InStatus, 0, sizeof(struct afsStoreStatus));
702 sscanf(&(*argp)[0], "%d", &mode);
704 sscanf(&(*argp)[0], "%d", &owner);
706 sscanf(&(*argp)[0], "%d", &length);
709 InStatus.mode = mode;
710 InStatus.mask |= AFS_SETMODE;
713 InStatus.owner = owner;
714 InStatus.mask |= AFS_SETOWNER;
717 InStatus.length = length;
718 InStatus.mask |= AFS_SETLENGTH;
721 ubik_Call(AFS_Symlink, cstruct, 0, &fid, name, linkcontents,
722 &InStatus, &hyp0, 0, &outFid, &OutFidStatus, &OutDirStatus,
729 HardLink(char **argp)
731 struct afsFetchStatus OutDirStatus, OutFidStatus;
732 struct afsVolSync tsync;
733 struct afsFid fid, existingFid;
738 sscanf(&(*argp)[0], "%d", &vnode);
740 sscanf(&(*argp)[0], "%d", &unique);
742 memset(&fid, 0, sizeof(struct afsFid));
743 fid.Volume.low = 10; /* XXX */
748 sscanf(&(*argp)[0], "%d", &vnode);
750 sscanf(&(*argp)[0], "%d", &unique);
752 memset(&existingFid, 0, sizeof(struct afsFid));
753 existingFid.Volume.low = 10; /* XXX */
754 existingFid.Vnode = vnode;
755 existingFid.Unique = unique;
757 ubik_Call(AFS_HardLink, cstruct, 0, &fid, name, &existingFid, &hyp0,
758 0, &OutFidStatus, &OutDirStatus, &tsync);
766 struct afsFetchStatus OutDirStatus, OutFidStatus;
767 struct afsStoreStatus InStatus;
768 struct afsVolSync tsync;
769 struct afsFid fid, outFid;
770 struct afsToken Token;
772 int vnode, unique, mode, owner, length;
775 sscanf(&(*argp)[0], "%d", &vnode);
777 sscanf(&(*argp)[0], "%d", &unique);
779 memset(&fid, 0, sizeof(struct afsFid));
780 fid.Volume.low = 10; /* XXX */
785 memset(&InStatus, 0, sizeof(struct afsStoreStatus));
786 sscanf(&(*argp)[0], "%d", &mode);
788 sscanf(&(*argp)[0], "%d", &owner);
790 sscanf(&(*argp)[0], "%d", &length);
793 InStatus.mode = mode;
794 InStatus.mask |= AFS_SETMODE;
797 InStatus.owner = owner;
798 InStatus.mask |= AFS_SETOWNER;
801 InStatus.length = length;
802 InStatus.mask |= AFS_SETLENGTH;
805 ubik_Call(AFS_MakeDir, cstruct, 0, &fid, name, &InStatus, &hyp0, 0,
806 &outFid, &OutFidStatus, &OutDirStatus, &Token, &tsync);
812 RemoveDir(char **argp)
814 struct afsFetchStatus OutDirStatus;
815 struct afsVolSync tsync;
816 struct afsFid fid, outFid;
817 struct afsFidName nameFid;
822 sscanf(&(*argp)[0], "%d", &vnode);
824 sscanf(&(*argp)[0], "%d", &unique);
826 memset(&fid, 0, sizeof(struct afsFid));
827 fid.Volume.low = 10; /* XXX */
832 memset(&nameFid, 0, sizeof(struct afsFidName));
833 strcpy(nameFid.name, name);
835 ubik_Call(AFS_RemoveDir, cstruct, 0, &fid, &nameFid, &hyp0, 0,
836 &OutDirStatus, &outFid, &tsync);
844 struct afsFetchStatus OutDirStatus;
845 struct afsVolSync tsync;
847 struct afsToken Token;
849 struct rx_call *tcall;
850 int vnode, unique, offset, length, NextOffset;
853 sscanf(&(*argp)[0], "%d", &vnode);
855 sscanf(&(*argp)[0], "%d", &unique);
857 sscanf(&(*argp)[0], "%d", &offset);
859 sscanf(&(*argp)[0], "%d", &length);
861 memset(&fid, 0, sizeof(struct afsFid));
862 fid.Volume.low = 10; /* XXX */
865 tcall = rx_NewCall(cstruct->conns[0]);
866 code = StartAFS_Readdir(tcall, &fid, offset, length, &hyp0, 0);
868 code = FetchDir(tcall);
872 EndAFS_FetchData(tcall, &NextOffset, &OutDirStatus, &Token,
875 code = rx_EndCall(tcall, code);
881 FetchDir(register struct rx_call *acall)
883 extern char *malloc();
884 register char *tbuffer;
885 afs_int32 tlen, length, code;
889 tbuffer = malloc(256);
891 code = rx_Read(acall, &length, sizeof(afs_int32));
892 length = ntohl(length);
893 if (code != sizeof(afs_int32))
897 tlen = (length > 8192 ? 8192 : length);
898 code = rx_Read(acall, tbuffer, tlen);
905 dp = (struct dirent *)dp;
914 struct afsFetchStatus OutDirStatus, OutFidStatus;
915 struct afsVolSync tsync;
916 struct afsFid fid, outFid;
921 sscanf(&(*argp)[0], "%d", &vnode);
923 sscanf(&(*argp)[0], "%d", &unique);
925 memset(&fid, 0, sizeof(struct afsFid));
926 fid.Volume.low = 10; /* XXX */
932 ubik_Call(AFS_Lookup, cstruct, 0, &fid, name, &hyp0, 0, &outFid,
933 &OutFidStatus, &OutDirStatus, &tsync);
939 GetToken(char **argp)
941 struct afsFetchStatus OutStatus;
942 struct afsVolSync tsync;
943 struct afsToken MinToken, RealToken;
945 int vnode, unique, tokenId;
948 sscanf(&(*argp)[0], "%d", &vnode);
950 sscanf(&(*argp)[0], "%d", &unique);
952 memset(&fid, 0, sizeof(struct afsFid));
953 fid.Volume.low = 10; /* XXX */
956 sscanf(&(*argp)[0], "%d", &tokenId);
958 memset(&MinToken, 0, sizeof(struct afsToken));
959 MinToken.tokenID.low = tokenId; /* XXX */
961 ubik_Call(AFS_GetToken, cstruct, 0, &fid, &MinToken, &hyp0, 0,
962 &RealToken, &OutStatus, &tsync);
968 MakeMountPoint(char **argp)
974 ReleaseTokens(char **argp)
980 BulkStatus(char **argp)
984 /* printf("ka <vol.l> <vnode> <unique> <isExec> <kaTime>\n"); */
986 KeepAlive(char **argp)
988 struct afsBulkFEX fex;
989 afs_uint32 numExec, spare4;
993 memset(&fx, 0, sizeof(struct afsFidExp));
994 sscanf(&(*argp)[0], "%d", &fx.fid.Volume.low);
996 sscanf(&(*argp)[0], "%d", &fx.fid.Vnode);
998 sscanf(&(*argp)[0], "%d", &fx.fid.Unique);
1000 sscanf(&(*argp)[0], "%d", &numExec);
1002 sscanf(&(*argp)[0], "%d", &fx.keepAliveTime);
1003 memset(&fex, 0, sizeof(struct afsBulkFEX));
1004 fex.afsBulkFEX_val = &fx;
1005 fex.afsBulkFEX_len = 1;
1007 ubik_Call(AFS_BulkKeepAlive, cstruct, 0, &fex, numExec, 0, 0, 0,