--- /dev/null
+/*
+ * Copyright (c) 2002 Kungliga Tekniska Högskolan
+ * (Royal Institute of Technology, Stockholm, Sweden).
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the Institute nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+%#ifndef _AFSUUID_COMMON_
+%#define _AFSUUID_COMMON_
+
+/* $Id: afsuuid.h,v 1.2 2004/08/27 11:14:44 lha Exp $ */
+
+#ifndef AFSUUID_GENERATE
+#define AFSUUID_GENERATE __attribute__((__nogenerate__))
+#endif
+
+struct afsUUID {
+ u_long time_low;
+ u_short time_mid;
+ u_short time_hi_and_version;
+ char clock_seq_hi_and_reserved;
+ char clock_seq_low;
+ char node[6];
+} AFSUUID_GENERATE;
+
+%#endif /* _AFSUUID_COMMON_ */
--- /dev/null
+/* This is -*-c-*- */
+
+/*
+ * Copyright (c) 1999 - 2002 Kungliga Tekniska Högskolan
+ * (Royal Institute of Technology, Stockholm, Sweden).
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the Institute nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* $Id: bos.xg,v 1.9 2004/08/27 11:14:44 lha Exp $ */
+
+/*
+ * Interface to BOS server
+ */
+
+package BOZO_
+
+%#include <fs_errors.h>
+
+error-function conv_to_arla_errno
+
+const BZNOTACTIVE = 39424;
+const BZNOENT = 39425;
+const BZBUSY = 39426;
+const BZEXISTS = 39427;
+const BZNOCREATE = 39428;
+const BZDOM = 39429;
+const BZACCESS = 39430;
+const BZSYNTAX = 39431;
+const BZIO = 39432;
+const BZNET = 39433;
+const BZBADTYPE = 39434;
+
+const BOZO_BSSIZE = 256;
+
+/*
+ *
+ */
+
+const BSTAT_SHUTDOWN = 0;
+const BSTAT_NORMAL = 1;
+const BSTAT_SHUTTINGDOWN = 2;
+const BSTAT_STARTINGUP = 3;
+
+const BOZO_PRUNEOLD = 1;
+const BOZO_PRUNEBAK = 2;
+const BOZO_PRUNECORE = 4;
+
+const BPROC_STARTED = 1;
+const BPROC_EXITED = 2;
+
+const BOZO_HASCORE = 1;
+const BOZO_ERRORSTOP = 2;
+const BOZO_BADDIRACCESS = 4;
+
+const BNODE_NEEDTIMEOUT = 0x01;
+const BNODE_ACTIVE = 0x02;
+const BNODE_WAIT = 0x04;
+const BNODE_DELETE = 0x08;
+const BNODE_ERRORSTOP = 0x10;
+
+const KTIME_HOUR = 0x01;
+const KTIME_MIN = 0x02;
+const KTIME_SEC = 0x04; /* XXX check me */
+const KTIME_DAY = 0x08;
+const KTIME_TIME = 0x07;
+const KTIME_NEVER = 0x10;
+const KTIME_NOW = 0x20;
+
+/* GetRestartTime */
+
+const BOZO_RESTARTTIME_GENERAL = 0x1; /* general reboot time */
+const BOZO_RESTARTTIME_NEWBIN = 0x2; /* new binary */
+
+#if 0
+const GETSTATUS_FSRUN = "file server running";
+const GETSTATUS_RSRUNVOLDOWN = "file server running; volser down";
+const GETSTATUS_SALVAGE = "salvaging file system";
+const GETSTATUS_FSSTART = "starting file server";
+const GETSTATUS_FSDOWN = "file server shutting down";
+const GETSTATUS_SALVAGERDOWN = "salvager shutting down";
+const GETSTATUS_FSSTOP = "salvager shut down";
+#endif
+
+struct bozo_status {
+ long goal;
+ long fileGoal;
+ long porcStartTime;
+ long procStarts;
+ long lastAnyExit;
+ long lastErrorExit;
+ long errorCode;
+ long errorSignal;
+ long flags;
+ long spare[8];
+};
+
+struct bozo_netKTime {
+ long mask;
+ short hour;
+ short min;
+ short sec;
+ short day;
+};
+
+struct bozo_key {
+ char data[8];
+};
+
+struct bozo_keyInfo {
+ long mod_sec;
+ long mod_usec;
+ unsigned long keyCheckSum;
+ long spare2;
+};
+
+#if 0
+struct bnode_ops {
+ struct bnode *(*create)();
+ long (*timeout)();
+ long (*getstat)();
+ long (*setstat)();
+ long (*delete)();
+ long (*procexit)();
+ long (*getstring)();
+ long (*getparm)();
+ long (*restartp)();
+ long (*hascore)();
+};
+#endif
+
+
+CreateBnode (IN string type<BOZO_BSSIZE>,
+ IN string instance<BOZO_BSSIZE>,
+ IN string p1<BOZO_BSSIZE>,
+ IN string p2<BOZO_BSSIZE>,
+ IN string p3<BOZO_BSSIZE>,
+ IN string p4<BOZO_BSSIZE>,
+ IN string p5<BOZO_BSSIZE>,
+ IN string p6<BOZO_BSSIZE>) = 80;
+
+DeleteBnode (IN string instance<BOZO_BSSIZE>) = 81;
+
+SetStatus (IN string instance<BOZO_BSSIZE>,
+ IN long status) = 82;
+
+
+GetStatus (IN string instance<BOZO_BSSIZE>,
+ OUT long *inStat,
+ OUT string statdescr<BOZO_BSSIZE>) = 83;
+
+
+EnumerateInstance (IN long instance,
+ OUT string iname<BOZO_BSSIZE>) = 84;
+
+GetInstanceInfo (IN string instance<BOZO_BSSIZE>,
+ OUT string type<BOZO_BSSIZE>,
+ OUT struct bozo_status *status) = 85;
+
+GetInstanceParm (IN string instance<BOZO_BSSIZE>,
+ IN long num,
+ OUT string parm<BOZO_BSSIZE>) = 86;
+
+AddSUser (IN string name<BOZO_BSSIZE>) = 87;
+
+DeleteSUser (IN string name<BOZO_BSSIZE>) = 88;
+
+ListSUsers (IN long an,
+ OUT string name<BOZO_BSSIZE>) = 89;
+
+ListKeys (IN long an,
+ OUT long *kvno,
+ OUT struct bozo_key *key,
+ OUT struct bozo_keyInfo *keinfo) = 90;
+
+AddKey (IN long an,
+ IN struct bozo_key *key) = 91;
+
+DeleteKey (IN long an) = 92;
+
+SetCellName (IN string name<BOZO_BSSIZE>) = 93;
+
+GetCellName (OUT string name<BOZO_BSSIZE>) = 94;
+
+GetCellHost (IN long awhich,
+ OUT string name<BOZO_BSSIZE>) = 95;
+
+AddCellHost (IN string name<BOZO_BSSIZE>) = 96;
+
+DeleteCellHost (IN string name<BOZO_BSSIZE>) = 97;
+
+SetTStatus (IN string instance<BOZO_BSSIZE>,
+ IN long status) = 98;
+
+ShutdownAll () = 99;
+
+RestartAll () = 100;
+
+StartupAll () = 101;
+
+SetNoAuthFlag (IN long flag) = 102;
+
+ReBozo () = 103;
+
+Restart (IN string instance<BOZO_BSSIZE>) = 104;
+
+Install (IN string path<BOZO_BSSIZE>,
+ IN long size,
+ IN long flags,
+ IN long date) split = 105;
+
+UnInstall (IN string path<BOZO_BSSIZE>) = 106;
+
+GetDates (IN string path<BOZO_BSSIZE>,
+ OUT long *newtime,
+ OUT long *baktime,
+ OUT long *oldtime) = 107;
+
+
+Exec (IN string cmd<BOZO_BSSIZE>) = 108;
+
+Prune (IN long flags) = 109;
+
+SetRestartTime (IN long type,
+ IN struct bozo_netKTime *restartTime) = 110;
+
+
+
+GetRestartTime (IN long type,
+ OUT struct bozo_netKTime *restartTime) = 111;
+
+GetLog(IN string name<BOZO_BSSIZE>) split = 112;
+
+WaitAll () = 113;
+
+GetInstanceStrings (IN string instance<BOZO_BSSIZE>,
+ OUT string errorname<BOZO_BSSIZE>,
+ OUT string spare1<BOZO_BSSIZE>,
+ OUT string spare2<BOZO_BSSIZE>,
+ OUT string spare3<BOZO_BSSIZE>) = 114;
+
--- /dev/null
+/* This is -*-c-*- */
+
+/*
+ * Copyright (c) 1997 - 2003 Kungliga Tekniska Högskolan
+ * (Royal Institute of Technology, Stockholm, Sweden).
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the Institute nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Interface to CM
+ */
+
+package RXAFSCB_
+
+%#include <fs_errors.h>
+%#include <fs.h>
+
+error-function conv_to_arla_errno
+
+/*
+ * Interface
+ */
+
+#include "common.h"
+
+struct AFSDBLockDesc {
+ char waitStates;
+ char exclLocked;
+ short readersReading;
+ short numWaiting;
+ short spare;
+ int pid_last_reader;
+ int pid_writer;
+ int src_indicator;
+};
+
+struct AFSDBLock {
+ char name[16];
+ struct AFSDBLockDesc lock;
+};
+
+struct AFSDBCacheEntry {
+ int32_t addr;
+ int32_t cell; /*Cell part of the fid*/
+ AFSFid netFid; /*Network part of the fid*/
+ int32_t Length;
+ int32_t DataVersion;
+ struct AFSDBLockDesc lock;
+ int32_t callback;
+ int32_t cbExpires;
+ short refCount;
+ short opens;
+ short writers;
+ char mvstat;
+ char states;
+};
+
+const AFSCB_MAX_XSTAT_LONGS = 2048;
+typedef int32_t AFSCB_CollData<AFSCB_MAX_XSTAT_LONGS>;
+const AFSCB_XSTATSCOLL_CALL_INFO = 0; /*CM call counting & info*/
+const AFSCB_XSTATSCOLL_PERF_INFO = 1; /*CM performance info*/
+const AFSCB_XSTATSCOLL_FULL_PERF_INFO = 2; /*CM performance info*/
+
+const AFS_MAX_INTERFACE_ADDR = 32;
+struct interfaceAddr { /* for multihomed clients */
+ int numberOfInterfaces;
+ afsUUID uuid;
+ ASIS int32_t addr_in[AFS_MAX_INTERFACE_ADDR]; /* interface addresses */
+ ASIS int32_t subnetmask[AFS_MAX_INTERFACE_ADDR]; /* subnet masks in net ord */
+ int32_t mtu[AFS_MAX_INTERFACE_ADDR]; /* MTU */
+};
+
+const AFSMAXCELLHOSTS = 8; /*Max VLDB servers per cell*/
+
+typedef int32_t serverList[AFSMAXCELLHOSTS];
+
+typedef afs_uint32 cacheConfig<>;
+
+
+CallBack (IN AFSCBFids *a_fidArrayP,
+ IN AFSCBs *a_callBackArrayP) = 204;
+
+InitCallBackState () = 205;
+
+Probe () = 206;
+
+/* return 0 if ok, 1 if bad index, lock == lock number index */
+
+GetLock(IN int32_t index, OUT AFSDBLock *lock) = 207;
+
+/* return 0 if ok, 1 if bad index, cbentry == cbentry number index */
+
+GetCE(IN int32_t index, OUT AFSDBCacheEntry *cbentry) = 208;
+
+/* AFSCB_XSTAT_VERSION */
+
+XStatsVersion(OUT int32_t *version) = 209;
+
+GetXStats(IN int32_t client_version_num,
+ IN int32_t collection_number,
+ OUT int32_t *server_version_number, /* AFSCB_XSTAT_VERSION */
+ OUT int32_t *time,
+ OUT AFSCB_CollData *stats) = 210;
+
+InitCallBackState2(OUT interfaceAddr *addr) = 211;
+
+/* fill in interfaces et al in `addr' */
+
+WhoAreYou(OUT interfaceAddr *addr) = 212;
+
+/* to be done */
+
+InitCallBackState3(IN afsUUID *serverUuid) = 213;
+
+/* still there? 0 if match, !0 otherwise */
+
+ProbeUUID(IN afsUUID *uuid) = 214;
+
+GetCellServDB(IN afs_int32 cellIndex,
+ OUT string cellName<AFSNAMEMAX>,
+ OUT serverList *cellHosts) = 216;
+
+GetLocalCell(OUT string cellName<AFSNAMEMAX>) = 217;
+
+GetCacheConfig(IN afs_uint32 callerVersion,
+ OUT afs_uint32 *serverVersion,
+ OUT afs_uint32 *configCount,
+ OUT cacheConfig *config) = 218;
+
+GetCellByNum(IN int32_t cellNumber,
+ OUT string cellName<AFSNAMEMAX>,
+ OUT serverList *cellHosts) = 65537;
+
+TellMeAboutYourself(OUT struct interfaceAddr *addr,
+ OUT Capabilities *capabilities) = 65538;
--- /dev/null
+/*
+ * Copyright (c) 1995 - 2004 Kungliga Tekniska Högskolan
+ * (Royal Institute of Technology, Stockholm, Sweden).
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the Institute nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Common definition used by several *.xg files
+ */
+
+/* $Id: common.h,v 1.22 2005/10/20 19:41:16 lha Exp $ */
+
+%#ifndef _COMMON_
+%#define _COMMON_
+
+const LockRead = 0;
+const LockWrite = 1;
+const LockExtend = 2;
+const LockRelease = 3;
+
+const AFSNAMEMAX = 256;
+
+const RWVOL = 0;
+const ROVOL = 1;
+const BACKVOL = 2;
+
+struct AFSFid {
+ uint32_t Volume;
+ uint32_t Vnode;
+ uint32_t Unique;
+};
+
+struct VenusFid {
+ int32_t Cell;
+ AFSFid fid;
+};
+
+struct AFSCallBack {
+ uint32_t CallBackVersion;
+ uint32_t ExpirationTime;
+ uint32_t CallBackType;
+};
+
+enum CallBackType { CBEXCLUSIVE = 1, CBSHARED = 2, CBDROPPED = 3};
+
+const CALLBACK_VERSION = 1;
+
+struct AFSVolSync {
+ uint32_t spare1;
+ uint32_t spare2;
+ uint32_t spare3;
+ uint32_t spare4;
+ uint32_t spare5;
+ uint32_t spare6;
+};
+
+const TYPE_FILE = 1;
+const TYPE_DIR = 2;
+const TYPE_LINK = 3;
+
+struct AFSFetchStatus {
+ uint32_t InterfaceVersion;
+ uint32_t FileType;
+ uint32_t LinkCount;
+ uint32_t Length;
+ uint32_t DataVersion;
+ uint32_t Author;
+ uint32_t Owner;
+ uint32_t CallerAccess;
+ uint32_t AnonymousAccess;
+ uint32_t UnixModeBits;
+ uint32_t ParentVnode;
+ uint32_t ParentUnique;
+ uint32_t ResidencyMask;
+ uint32_t ClientModTime;
+ uint32_t ServerModTime;
+ uint32_t Group;
+ uint32_t SyncCounter;
+ uint32_t DataVersionHigh; /* For AFS/DFS translator */
+ uint32_t LockCount;
+ uint32_t LengthHigh;
+ uint32_t ErrorCode;
+};
+
+/*
+ * Things in AFSStoreStatus.mask
+ */
+
+const SS_MODTIME = 0x01 ;
+const SS_OWNER = 0x02 ;
+const SS_GROUP = 0x04 ;
+const SS_MODEBITS = 0x08 ;
+const SS_SEGSIZE = 0x10 ;
+const SS_FSYNC = 0x400; /* 1024 */
+
+
+struct AFSStoreStatus {
+ uint32_t Mask;
+ uint32_t ClientModTime;
+ uint32_t Owner;
+ uint32_t Group;
+ uint32_t UnixModeBits;
+ uint32_t SegSize;
+};
+
+struct AFSFetchVolumeStatus {
+ int32_t Vid;
+ int32_t ParentId;
+ char Online;
+ char InService;
+ char Blessed;
+ char NeedsSalvage;
+ int32_t Type;
+ int32_t MinQuota;
+ int32_t MaxQuota;
+ int32_t BlocksInUse;
+ int32_t PartBlocksAvail;
+ int32_t PartMaxBlocks;
+};
+
+struct AFSStoreVolumeStatus {
+ int32_t Mask;
+ int32_t MinQuota;
+ int32_t MaxQuota;
+};
+
+const AFS_SETMINQUOTA = 1;
+const AFS_SETMAXQUOTA = 2;
+
+const AFSOPAQUEMAX = 1024;
+
+typedef opaque AFSOpaque<AFSOPAQUEMAX>;
+
+typedef int32_t ViceLockType;
+
+const AFSCBMAX = 50;
+
+typedef AFSCallBack AFSCBs<AFSCBMAX>;
+typedef AFSFetchStatus AFSBulkStats<AFSCBMAX>;
+typedef AFSFid AFSCBFids<AFSCBMAX>;
+
+/* Definitions for ACLs */
+
+const PRSFS_READ = 1 ; /* Read files */
+const PRSFS_WRITE = 2 ; /* Write files & write-lock existing files */
+const PRSFS_INSERT = 4 ; /* Insert & write-lock new files */
+const PRSFS_LOOKUP = 8 ; /* Enumerate files and examine ACL */
+const PRSFS_DELETE = 16 ; /* Remove files */
+const PRSFS_LOCK = 32 ; /* Read-lock files */
+const PRSFS_ADMINISTER = 64 ; /* Set access list of directory */
+
+struct AFSVolumeInfo {
+ uint32_t Vid;
+ int32_t Type;
+ uint32_t Type0;
+ uint32_t Type1;
+ uint32_t Type2;
+ uint32_t Type3;
+ uint32_t Type4;
+ uint32_t ServerCount;
+ uint32_t Server0;
+ uint32_t Server1;
+ uint32_t Server2;
+ uint32_t Server3;
+ uint32_t Server4;
+ uint32_t Server5;
+ uint32_t Server6;
+ uint32_t Server7;
+ uint16_t Port0;
+ uint16_t Port1;
+ uint16_t Port2;
+ uint16_t Port3;
+ uint16_t Port4;
+ uint16_t Port5;
+ uint16_t Port6;
+ uint16_t Port7;
+};
+
+#include "afsuuid.h"
+
+const AFSCAPABILITIESMAX = 196;
+
+typedef int32_t Capabilities<AFSCAPABILITIESMAX>;
+
+%#endif /* _COMMON_ */
--- /dev/null
+/* This is -*-c-*- */
+
+/*
+ * Copyright (c) 1995 - 2002, 2004 Kungliga Tekniska Högskolan
+ * (Royal Institute of Technology, Stockholm, Sweden).
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the Institute nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* $Id: fs.xg,v 1.21 2004/12/19 20:00:59 lha Exp $ */
+
+/*
+ * Interface to FS
+ */
+
+package RXAFS_
+
+%#include <fs_errors.h>
+
+error-function conv_to_arla_errno
+
+#define AFSUUID_GENERATE
+
+#include "common.h"
+
+const FLUSHMAX = 10;
+typedef int32_t ViceIds<FLUSHMAX>;
+typedef int32_t IPAddrs<FLUSHMAX>;
+
+/*
+ * Interface
+ */
+
+FetchData (IN AFSFid *a_fidToFetchP,
+ IN long a_offset,
+ IN long a_lenInBytes,
+ OUT AFSFetchStatus *a_fidStatP,
+ OUT AFSCallBack *a_callBackP,
+ OUT AFSVolSync *a_volSyncP) split = 130;
+
+FetchACL (IN AFSFid *a_dirFidP,
+ OUT AFSOpaque *a_ACLP,
+ OUT AFSFetchStatus *a_dirNewStatP,
+ OUT AFSVolSync *a_volSyncP) = 131;
+
+FetchStatus (IN AFSFid *a_fidToStatP,
+ OUT AFSFetchStatus *a_currStatP,
+ OUT AFSCallBack *a_callBackP,
+ OUT AFSVolSync *a_volSyncP) = 132;
+
+StoreData (IN AFSFid *a_fidToStoreP,
+ IN AFSStoreStatus *a_fidStatusP,
+ IN long a_offset,
+ IN long a_lenInBytes,
+ IN long a_fileLenInBytes,
+ OUT AFSFetchStatus *a_fidStatP,
+ OUT AFSVolSync *a_volSyncP) split = 133;
+
+/*
+ * Correct documentation wouldn't make this fun enough. Gaah.
+ */
+StoreACL (IN AFSFid *a_dirFidP,
+ IN AFSOpaque *a_ACLToStoreP,
+ OUT AFSFetchStatus *a_dirNewStatP,
+ OUT AFSVolSync *a_volSyncP) = 134;
+
+StoreStatus (IN AFSFid *a_fidP,
+ IN AFSStoreStatus *a_currStatusP,
+ OUT AFSFetchStatus *a_srStatusP,
+ OUT AFSVolSync *a_volSyncP) = 135;
+
+RemoveFile (IN AFSFid *a_dirFidP,
+ IN string a_name<AFSNAMEMAX>,
+ OUT AFSFetchStatus *a_srvStatusP,
+ OUT AFSVolSync *a_volSyncP) = 136;
+
+CreateFile (IN AFSFid *DirFid,
+ IN string Name<AFSNAMEMAX>,
+ IN AFSStoreStatus *InStatus,
+ OUT AFSFid *OutFid,
+ OUT AFSFetchStatus *OutFidStatus,
+ OUT AFSFetchStatus *OutDirStatus,
+ OUT AFSCallBack *CallBack,
+ OUT AFSVolSync *a_volSyncP) = 137;
+
+Rename (IN AFSFid *a_origDirFidP,
+ IN string a_origNameP<AFSNAMEMAX>,
+ IN AFSFid *a_newDirFidP,
+ IN string a_newNameP<AFSNAMEMAX>,
+ OUT AFSFetchStatus *a_origDirStatusP,
+ OUT AFSFetchStatus *a_newDirStatusP,
+ OUT AFSVolSync *a_volSyncP) = 138;
+
+Symlink (IN AFSFid *a_dirFidP,
+ IN string a_nameP<AFSNAMEMAX>,
+ IN string a_linkContentsP<AFSNAMEMAX>,
+ IN AFSStoreStatus *a_origDirStatP,
+ OUT AFSFid *a_newFidP,
+ OUT AFSFetchStatus *a_newFidStatP,
+ OUT AFSFetchStatus *a_newDirStatP,
+ OUT AFSVolSync *a_volSyncP) = 139;
+
+Link (IN AFSFid *a_dirFidP,
+ IN string a_nameP<AFSNAMEMAX>,
+ IN AFSFid *a_existingFidP,
+ OUT AFSFetchStatus *a_newFidStatP,
+ OUT AFSFetchStatus *a_newDirStatP,
+ OUT AFSVolSync *a_volSyncP) = 140;
+
+MakeDir (IN AFSFid *a_parentDirFidP,
+ IN string a_newDirNameP<AFSNAMEMAX>,
+ IN AFSStoreStatus *a_currStatP,
+ OUT AFSFid *a_newDirFidP,
+ OUT AFSFetchStatus *a_dirFidStatP,
+ OUT AFSFetchStatus *a_parentDirStatP,
+ OUT AFSCallBack *a_newDirCallBackP,
+ OUT AFSVolSync *a_volSyncP) = 141;
+
+RemoveDir (IN AFSFid *a_parentDirStatP,
+ IN string a_dirNameP<AFSNAMEMAX>,
+ OUT AFSFetchStatus *a_newParentDirStatP,
+ OUT AFSVolSync *a_volSyncP) = 142;
+
+GiveUpCallBacks (IN AFSCBFids *a_fidArrayP,
+ IN AFSCBs *a_callBackArrayP) = 147;
+
+/*
+ * fetch the status of volume `a_volIDP' into `a_volFetchStatP'.
+ * a_volNameP is not filled in.
+ */
+
+GetVolumeStatus (IN long a_volIDP,
+ OUT AFSFetchVolumeStatus *a_volFetchStatP,
+ OUT string a_volNameP<AFSNAMEMAX>,
+ OUT string a_offLineMsgP<AFSOPAQUEMAX>,
+ OUT string a_motdP<AFSOPAQUEMAX>) = 149;
+
+SetVolumeStatus (IN long a_volIDP,
+ IN AFSStoreVolumeStatus *a_volStoreStatP,
+ IN string a_volNameP<AFSNAMEMAX>,
+ IN string a_offLineMsgP<AFSOPAQUEMAX>,
+ IN string a_motdP<AFSOPAQUEMAX>) = 150;
+
+GetRootVolume (OUT string a_rootVolNameP<AFSNAMEMAX>) = 151;
+
+GetTime (OUT unsigned long *a_secondsP,
+ OUT unsigned long *a_uSecondsP) = 153;
+
+NGetVolumeInfo (IN string VolumeName<AFSNAMEMAX>,
+ OUT AFSVolumeInfo *stuff) = 154;
+
+BulkStatus (IN AFSCBFids *FidsArray,
+ OUT AFSBulkStats *StatArray,
+ OUT AFSCBs *CBArray,
+ OUT AFSVolSync *Sync) = 155;
+
+SetLock (IN AFSFid *Fid,
+ IN ViceLockType Type,
+ OUT AFSVolSync *Sync) = 156;
+
+ExtendLock (IN AFSFid *Fid,
+ OUT AFSVolSync *Sync) = 157;
+
+ReleaseLock (IN AFSFid *Fid,
+ OUT AFSVolSync *Sync) = 158;
+
+FlushCPS (IN ViceIds *IdsArray,
+ IN IPAddrs *AddrsArray,
+ IN int32_t spare1,
+ OUT int32_t *spare2,
+ OUT int32_t *spare3) = 162;
+
+FetchData64 (IN AFSFid *Fid,
+ IN int64_t Pos,
+ IN int64_t Length,
+ OUT AFSFetchStatus *OutStatus,
+ OUT AFSCallBack *CallBack,
+ OUT AFSVolSync *Sync) split = 65537;
+
+StoreData64 (IN AFSFid *Fid,
+ IN AFSStoreStatus *InStatus,
+ IN uint64_t Pos,
+ IN uint64_t Length,
+ IN uint64_t FileLength,
+ OUT AFSFetchStatus *OutStatus,
+ OUT AFSVolSync *Sync) split = 65538;
+
+GiveUpAllCallBacks () = 65539 ;
+
+GetCapabilities(OUT Capabilities *capabilities) = 65540;
--- /dev/null
+/* This is -*-c-*- */
+
+/*
+ * Copyright (c) 1999 - 2002 Kungliga Tekniska Högskolan
+ * (Royal Institute of Technology, Stockholm, Sweden).
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the Institute nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+/*
+ * Interface to KAS
+ */
+
+const AUTHENTICATE_OLD = 1;
+const CHANGEPASSWORD = 2;
+const GETTICKET_OLD = 3;
+const SETPASSWORD = 4;
+const SETFIELDS = 5;
+const CREATEUSER = 6;
+const DELETEUSER = 7;
+const GETENTRY = 8;
+const LISTENTRY = 9;
+const GETSTATS = 10;
+const DEBUG = 11;
+const GETPASSWORD = 12;
+const GETRANDOMKEY = 13;
+const AUTHENTICATE = 21;
+const GETTICKET = 23;
+
+const MAXKAKVNO = 127;
+
+/* Flags (note 0 is illegal) */
+
+const KAFNORMAL = 0x1;
+/* For the two following the KAFNORMAL MUST not be set */
+const KAFREE = 0x2; /* on freelist */
+const KAOLDKEYS = 0x10; /* used to store old keys */
+/* misc flags */
+const KASPECIAL = 0x100; /* special authserver principal */
+const KAFASSOCROOT = 0x200; /* root of associate tree */
+const KAFASSOC = 0x300; /* associate entry */
+
+/* The following flags are used on KAA_SetFields() */
+const KAFADMIN = 0x004; /* administrator */
+const KAFNOTGS = 0x008; /* can't get or use TGT */
+const KAFNOSEAL = 0x020; /* can't be used as server */
+const KAFNOCPW = 0x040; /* can't change password */
+const KAFNEWASSOC = 0x080; /* can create associates */
+
+/* MISC stuff */
+
+const KAMAJORVERSION = 5;
+const KAMINORVERSION = 1;
+const NEVERDATE = 037777777777;
+const KADEBUGKCINFOSIZE = 25;
+
+#define Date uint32_t
+
+/* Errors */
+
+const KADATABASEINCONSISTENT = 180480;
+const KAEXIST = 180481;
+const KAIO = 180482;
+const KACREATEFAIL = 180483;
+const KANOENT = 180484;
+const KAEMPTY = 180485;
+const KABADNAME = 180486;
+const KABADINDEX = 180487;
+const KANOAUTH = 180488;
+const KAANSWERTOOLONG = 180489;
+const KABADREQUEST = 180490;
+const KAOLDINTERFACE = 180491;
+const KABADARGUMENT = 180492;
+const KABADCMD = 180493;
+const KANOKEYS = 180494;
+const KAREADPW = 180495;
+const KABADKEY = 180496;
+const KAUBIKINIT = 180497;
+const KAUBIKCALL = 180498;
+const KABADPROTOCOL = 180499;
+const KANOCELLS = 180500;
+const KANOCELL = 180501;
+const KATOOMANYUBIKS = 180502;
+const KATOOMANYKEYS = 180503;
+const KABADTICKET = 180504;
+const KAUNKNOWNKEY = 180505;
+const KAKEYCACHEINVALID = 180506;
+const KABADSERVER = 180507;
+const KABADUSER = 180508;
+const KABADCPW = 180509;
+const KABADCREATE = 180510;
+const KANOTICKET = 180511;
+const KAASSOCUSER = 180512;
+const KANOTSPECIAL = 180513;
+const KACLOCKSKEW = 180514;
+const KANORECURSE = 180515;
+const KARXFAIL = 180516;
+const KANULLPASSWORD = 180517;
+const KAINTERNALERROR = 180518;
+const KAPWEXPIRED = 180519;
+const KAREUSED = 180520;
+const KATOOSOON = 180521;
+const KALOCKED = 180522;
+
+
+
+struct ka_CBS {
+ opaque Seq<>;
+};
+
+struct ka_BBS {
+ int32_t MaxSeqLen;
+ opaque Seq<>;
+};
+
+struct EncryptionKey {
+ char key[8];
+};
+
+const MAXKANAMELEN = 64;
+#define MAXKANAMELEN 64
+const KA_LABELSIZE = 4;
+
+%#ifndef MAXKTCTICKETLEN
+const MAXKTCTICKETLEN = 344;
+%#endif
+
+typedef string kaname<MAXKANAMELEN>;
+
+struct kaident {
+ char name[MAXKANAMELEN];
+ char instance[MAXKANAMELEN];
+};
+
+struct kaentryinfo {
+ int32_t minor_version;
+ int32_t flags;
+ uint32_t user_expiration;
+ Date modification_time;
+ kaident modification_user;
+ Date change_password_time;
+ long max_ticket_lifetime;
+ long key_version;
+ EncryptionKey key;
+ uint32_t keyCheckSym;
+ int32_t reserved2;
+ int32_t reserved3;
+ int32_t reserved4;
+};
+
+
+package KAA_
+
+Authenticate (IN kaname name,
+ IN kaname instance,
+ IN Date start_time,
+ IN Date end_time,
+ IN ka_CBS *request,
+ INOUT ka_BBS *answer) = 21;
+
+ChangePassword (IN kaname name,
+ IN kaname instance,
+ IN ka_CBS arequest,
+ INOUT ka_BBS *oanswer) = 2;
+
+package KAM_
+
+SetPassword (IN kaname name,
+ IN kaname instance,
+ IN int32_t kvno,
+ IN EncryptionKey password) = 4;
+
+SetFields (IN kaname name,
+ IN kaname instance,
+ IN int32_t flags,
+ IN Date user_expiration,
+ IN int32_t max_ticket_lifetime,
+ IN int32_t maxAssociates,
+ IN int32_t spare1,
+ IN int32_t spare2) = 5;
+
+CreateUser (IN kaname name,
+ IN kaname instance,
+ IN EncryptionKey password) = 6;
+
+GetEntry (IN kaname name,
+ IN kaname instance,
+ IN long major_version,
+ OUT kaentryinfo *entry) = 8;
+
+
+package KAT_
+
+GetTicket_old (IN int32_t kvno,
+ IN kaname auth_domain,
+ IN struct ka_CBS *aticket,
+ IN kaname name,
+ IN kaname instance,
+ IN struct ka_CBS *atimes,
+ INOUT struct ka_BBS *oanswer) = 3;
+
+GetTicket (IN int32_t kvno,
+ IN kaname auth_domain,
+ IN struct ka_CBS *aticket,
+ IN kaname name,
+ IN kaname instance,
+ IN struct ka_CBS *atimes,
+ INOUT struct ka_BBS *oanswer) = 23;
+
--- /dev/null
+/* This is -*-c-*- */
+
+/*
+ * Copyright (c) 1998 - 2002 Kungliga Tekniska Högskolan
+ * (Royal Institute of Technology, Stockholm, Sweden).
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the Institute nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Interface to PTS
+ */
+
+package PR_
+
+%#include <fs_errors.h>
+
+error-function conv_to_arla_errno
+
+/*
+ * Interface
+ */
+
+
+/* Opcodes */
+
+const PRINEWUSER = 500;
+const PRWHEREISIT = 501;
+const PRDUMPENTRY = 502;
+const PRADDTOGROUP = 503;
+const PRNAMETOUID = 504;
+const PRIDTONAME = 505;
+const PRDELETE = 506;
+const PRREMOVEFROMGROUP = 507;
+const PRGETCPS = 508;
+const PRNEWENTRY = 509;
+const PRLISTMAX = 510;
+const PRSETMAX = 511;
+const PRLISTENTRY = 512;
+const PRCHANGEENTRY = 513;
+const PRLISTELEMENTS = 514;
+const PROSAMEMBEROF = 515;
+const PRSETFIELDSENTRY = 516;
+const PRLISTOWNED = 517;
+const PRGETCPS2 = 518;
+const PRGETHOSTCPS = 519;
+
+/* Constants */
+
+const PR_MAXNAMELEN = 64;
+const PR_MAXGROUPS = 5000;
+const PR_MAXLIST = 5000;
+const PRSIZE = 10;
+const COSIZE = 39;
+const PRSRV = 73;
+const ENTRYSIZE = 192;
+const HASHSIZE = 8191;
+
+const PRDBVERSION = 0;
+
+/* Bits for PR_SetFieldsEntry() */
+
+const PR_SF_NGROUPS = 0x80000000;
+const PR_SF_NUSERS = 0x40000000;
+const PR_SF_ALLBITS = 0xff;
+
+/* Reserved IDs */
+const PR_SYSADMINID = -204;
+const PR_ANYUSERID = -101;
+const PR_AUTHUSERID = -102;
+const PR_ANONYMOUSID = 32766;
+const PR_BADID = 0x80000000;
+
+/* Bits for struct prentry flags */
+const PRTYPE = 0x3f;
+const PRFREE = 1;
+const PRGRP = 2;
+const PRCONT = 4;
+const PRCELL = 8;
+const PRFOREIGN = 16;
+const PRINST = 32;
+const PRUSER = 0;
+
+const PRACCESS = 0x40;
+const PRQUOTA = 0x80;
+
+/* Privacy Bits */
+
+const PRP_REMOVE_MEM = 0x010000;
+const PRP_ADD_MEM = 0x020000;
+const PRP_ADD_ANY = 0x040000;
+const PRP_MEMBER_MEM = 0x080000;
+const PRP_MEMBER_ANY = 0x100000;
+const PRP_OWNED_ANY = 0x200000;
+const PRP_STATUS_MEM = 0x400000;
+const PRP_STATUS_ANY = 0x800000;
+
+/* Misc */
+const PRSUCCESS = 0;
+const PR_REMEMBER_TIMES = 1;
+
+
+struct prheader {
+ long version;
+ long headerSize;
+ long freePtr;
+ long eofPtr;
+ long maxGroup;
+ long maxID;
+ long maxForeign;
+ long maxInst;
+ long orphan;
+ long usercount;
+ long groupcount;
+ long foreigncount;
+ long instcount;
+ long reserved[5];
+ long nameHash[HASHSIZE];
+ long idHash[HASHSIZE];
+};
+
+struct prheader_disk {
+ long version;
+ long headerSize;
+ long maxGroup;
+ long maxID;
+ long orphan<>;
+ long usercount;
+ long groupcount;
+};
+
+struct prentry {
+ long flags;
+ long id;
+ long cellid;
+ long next;
+ long reserved[5];
+ long entries[PRSIZE];
+ long nextID;
+ long nextName;
+ long owner;
+ long creator;
+ long ngroups;
+ long nusers;
+ long count;
+ long instance;
+ long owned;
+ long nextOwned;
+ long parent;
+ long sibling;
+ long child;
+ char name[PR_MAXNAMELEN];
+};
+
+struct prentry_disk {
+ long flags;
+ long id;
+ long cellid;
+ long owner;
+ long creator;
+ long ngroups;
+ long owned<PR_MAXGROUPS>;
+ string name<PR_MAXNAMELEN>;
+ long entries<PR_MAXGROUPS>;
+};
+
+struct prdebugentry {
+ long flags;
+ long id;
+ long cellid;
+ long next;
+ long reserved[5];
+ long entries[PRSIZE];
+ long nextID;
+ long nextname;
+ long owner;
+ long creator;
+ long ngroups;
+ long nusers;
+ long count;
+ long instance;
+ long owned;
+ long nextOwned;
+ long parent;
+ long sibling;
+ long child;
+ char name[PR_MAXNAMELEN];
+};
+
+struct prcheckentry {
+ long flags;
+ long id;
+ long owner;
+ long creator;
+ long ngroups;
+ long nusers;
+ long count;
+ long reserved[5];
+ char name[PR_MAXNAMELEN];
+};
+
+
+typedef char prname[PR_MAXNAMELEN];
+
+typedef prname namelist<PR_MAXLIST>;
+
+typedef long idlist<PR_MAXLIST>;
+
+typedef long prlist<PR_MAXGROUPS>;
+
+
+/* Error codes */
+
+const PREXIST = 267264 ;
+const PRIDEXIST = 267265 ;
+const PRNOIDS = 267266 ;
+const PRDBFAIL = 267267 ;
+const PRNOENT = 267268 ;
+const PRPERM = 267269 ;
+const PRNOTGROUP = 267270 ;
+const PRNOTUSER = 267271 ;
+const PRBADNAM = 267272 ;
+const PRBADARG = 267273 ;
+const PRNOMORE = 267274 ;
+const PRDBBAD = 267275 ;
+const PRGROUPEMPTY = 267276 ;
+const PRINCONSISTENT = 267277 ;
+const PRBADDR = 267278 ;
+const PRTOOMANY = 267279 ;
+
+
+NameToID(IN namelist *nlist,
+ OUT idlist *ilist) = 504;
+
+IDToName(IN idlist *ilist,
+ OUT namelist *nlist) = 505;
+
+NewEntry(IN string name<PR_MAXNAMELEN>,
+ IN long flag,
+ IN long oid,
+ OUT long *id) = 509;
+
+INewEntry(IN string name<PR_MAXNAMELEN>,
+ IN long id,
+ IN long oid) = 500;
+
+ListEntry(IN long id,
+ OUT struct prcheckentry *entry) = 512;
+
+DumpEntry(IN long pos,
+ OUT struct prdebugentry *entry) = 502;
+
+ChangeEntry(IN long id,
+ IN string name<PR_MAXNAMELEN>,
+ IN long oid,
+ IN long newid) = 513;
+
+SetFieldsEntry(IN long id,
+ IN long mask,
+ IN long flags,
+ IN long ngroups,
+ IN long nusers,
+ IN long spare1,
+ IN long spare2) = 516;
+
+/*
+ * Group/entries that can't be deleted: SYSADMINID, ANYUSERID,
+ * AUTHUSERID, ANONYMOUSID. Error returned is PRPERM.
+ *
+ * Rights: member of SYSADMINID, or owner to entry, or member of the
+ * owner to `id'.
+ *
+ * Sucess: PRSUCCESS.
+ */
+
+Delete(IN long id) = 506;
+
+WhereIsIt(IN long id,
+ OUT long *ps) = 501;
+
+AddToGroup(IN long uid,
+ IN long gid) = 503;
+
+RemoveFromGroup(IN long id,
+ IN long gid) = 507;
+
+ListMax(OUT long *uid,
+ OUT long *gid) = 510;
+
+SetMax(IN long uid,
+ IN long gflag) = 511;
+
+ListElements(IN long id,
+ OUT prlist *elist,
+ OUT long *over) = 514;
+
+GetCPS(IN long id,
+ OUT prlist *elist,
+ OUT long *over) = 508;
+
+ListOwned(IN long id,
+ OUT prlist *elist,
+ INOUT long *over) = 517;
+
+IsAMemberOf(IN long uid,
+ IN long gid,
+ OUT long *flag) = 515;
+
+GetCPS2(IN long id,
+ IN long host,
+ OUT prlist *elist,
+ OUT long *over) = 518;
+
+GetHostCPS(IN long host,
+ OUT prlist *elist,
+ OUT long *over) = 519;
+
+
+/* the end */
--- /dev/null
+/* -*- C -*- */
+
+/*
+ * Copyright (c) 1998 - 2002 Kungliga Tekniska Högskolan
+ * (Royal Institute of Technology, Stockholm, Sweden).
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the Institute nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+/*
+ * $Id: ubik.xg,v 1.11 2004/08/27 11:14:45 lha Exp $
+ */
+
+package Ubik_
+
+%#include <fs_errors.h>
+
+error-function conv_to_arla_errno
+
+/*
+ * Interface
+ */
+
+struct net_tid {
+ long epoch;
+ long counter;
+};
+
+const UBIK_MAX_INTERFACE_ADDR = 256; /* max interfaces per server */
+
+typedef net_tid net_version;
+
+struct ubik_debug {
+ long now;
+ long lastYesTime;
+ long lastYesHost;
+ long lastYesState;
+ long lastYesClaim;
+ long lowestHost;
+ long lowestTime;
+ long syncHost;
+ long syncTime;
+ net_version syncVersion;
+ net_tid syncTid;
+ long amSyncSite;
+ long syncSiteUntil;
+ long nServers;
+ long lockedPages;
+ long writeLockedPages;
+ net_version localVersion;
+ long activeWrite;
+ long tidCounter;
+ long anyReadLocks;
+ long anyWriteLocks;
+ long recoveryState;
+ long currentTrans;
+ long writeTrans;
+ long epochTime;
+};
+
+struct ubik_sdebug {
+ long addr;
+ long lastVoteTime;
+ long lastBeaconSent;
+ long lastVote;
+ net_version remoteVersion;
+ long currentDB;
+ long beaconSinceDown;
+ long up;
+ afs_int32 altAddr[255]; /*alternate addresses:host byte */
+ /*this is actually UBIK_MAX_INTERFACE_ADDR-1*/
+};
+
+
+
+/* Opcodes */
+
+const VOTE_BEACON = 10000;
+const VOTE_DEBUG = 10001;
+const VOTE_SDEBUG = 10002;
+const VOTE_GETSYNCSITE = 10003;
+
+/* Error codes */
+
+const UNOQUORUM = 5376;
+const UNOTSYNC = 5377;
+const UNHOSTS = 5378;
+const UIOERROR = 5379;
+const UINTERNAL = 5380;
+const USYNC = 5381;
+const UNOENT = 5382;
+const UBADLOCK = 5383;
+const UBADLOG = 5384;
+const UBADHOST = 5385;
+const UBADTYPE = 5386;
+const UTWOENDS = 5387;
+const UDONE = 5388;
+const UNOSERVERS = 5389;
+const UEOF = 5390;
+const ULOGIO = 5391;
+const UBADFAM = 5392;
+const UBADCELL = 5393;
+const UBADSECGRP = 5394;
+const UBADGROUP = 5395;
+const UBADUUID = 5396;
+const UNOMEM = 5397;
+const UNOTMEMBER = 5398;
+const UNBINDINGS = 5399;
+const UBADPRINNAME = 5400;
+const UPIPE = 5401;
+const UDEADLOCK = 5402;
+const UEXCEPTION = 5403;
+const UTPQFAIL = 5404;
+const USKEWED = 5405;
+const UNOLOCK = 5406;
+const UNOACCESS = 5407;
+const UNOSPC = 5408;
+const UBADPATH = 5409;
+const UBADF = 5410;
+const UREINITIALIZE = 5411;
+
+/* The rpc calls */
+
+Beacon (IN long state,
+ IN long voteStart,
+ IN net_version *Version,
+ IN net_tid *tid) multi = VOTE_BEACON;
+
+Debug (OUT ubik_debug *db) = VOTE_DEBUG;
+
+SDebug (IN long which, OUT ubik_sdebug *db) = VOTE_SDEBUG;
+
+GetSyncSite (OUT long *site) = VOTE_GETSYNCSITE;
--- /dev/null
+/* This is -*-c-*- */
+
+/*
+ * Copyright (c) 1997 - 2002 Kungliga Tekniska Högskolan
+ * (Royal Institute of Technology, Stockholm, Sweden).
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the Institute nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Interface to VLDB
+ */
+
+package VL_
+
+%#include <fs_errors.h>
+%#include <fs.h>
+
+error-function conv_to_arla_errno
+
+#include "common.h"
+
+/*
+ * Structures and defines for vldb data
+ */
+
+const VLDB_MAXNAMELEN = 65;
+const MAXNSERVERS = 8;
+const NMAXNSERVERS = 13;
+const MAX_NUMBER_OPCODES = 30;
+const MAXTYPES = 3;
+const MAXSERVERID = 30;
+const HASHSIZE = 8191;
+const DEFAULTBULK = 10000;
+
+typedef opaque bulk<DEFAULTBULK>;
+
+#if 0
+typedef struct single_vldbentry *vldblist;
+#endif
+
+/*
+ * Used in vlentry.server[i].flags
+ * ie for each site/server
+ */
+
+const VLSF_NEWREPSITE = 0x01; /* ??? */
+const VLSF_ROVOL = 0x02; /* Readonly volume on this site */
+const VLSF_RWVOL = 0x04; /* Readwrite volume on this site */
+const VLSF_BACKVOL = 0x08; /* Backup volume on this site */
+const VLSF_UUID = 0x10; /* Internal flag in Transarc client */
+const VLSF_DONTUSE = 0x20; /* Not yet released volumes */
+
+/*
+ * Used in vlentry.flags
+ * ie used for whole entry
+ */
+
+/* Internal information in the vldb */
+const VLFREE = 0x1;
+const VLDELETED = 0x2;
+const VLLOCKED = 0x4;
+
+/* Volser information/status */
+const VLOP_MOVE = 0x10;
+const VLOP_RELEASE = 0x20;
+const VLOP_BACKUP = 0x40;
+const VLOP_DELETE = 0x80;
+const VLOP_DUMP = 0x100;
+
+%#define VLOP_ALLOPERS ( VLOP_MOVE | VLOP_RELEASE | VLOP_BACKUP | VLOP_DELETE | VLOP_DUMP)
+
+/* Location information */
+const VLF_RWEXISTS = 0x1000;
+const VLF_ROEXISTS = 0x2000;
+const VLF_BOEXISTS = 0x4000;
+const VLF_BACKEXISTS = 0x4000;
+const VLF_DFSFILESET = 0x8000;
+
+/* VL error interface */
+const VL_IDEXIST = 363520;
+const VL_IO = 363521;
+const VL_NAMEEXIST = 363522;
+const VL_CREATEFAIL = 363523;
+const VL_NOENT = 363524;
+const VL_EMPTY = 363525;
+const VL_ENTDELETED = 363526;
+const VL_BADNAME = 363527;
+const VL_BADINDEX = 363528;
+const VL_BADVOLTYPE = 363529;
+const VL_BADPARTITION = 363530;
+const VL_BADSERVER = 363531;
+const VL_REPSFULL = 363532;
+const VL_NOREPSERVER = 363533;
+const VL_DUPREPSERVER = 363534;
+const VL_RWNOTFOUND = 363535;
+const VL_BADREFCOUNT = 363536;
+const VL_SIZEEXCEEDED = 363537;
+const VL_BADENTRY = 363538;
+const VL_BADVOLIDBUMP = 363539;
+const VL_IDALREADHASED = 363540;
+const VL_ENTRYLOCKED = 363541;
+const VL_BADVOLOPER = 363542;
+const VL_BADRELLOCKTYPE= 363543;
+const VL_RERELEASE = 363544;
+const VL_BADSERVERFLAG = 363545;
+const VL_PERM = 363546;
+const VL_NOMEM = 363547;
+const VL_BADVERSION = 363548;
+const VL_INDEXERANGE = 363549;
+const VL_MULTIPADDR = 363550;
+const VL_BADMASK = 363551;
+
+
+/*
+ * Opcodes
+ */
+
+const VLCREATEENTRY = 501;
+const VLDELETEENTRY = 502;
+const VLGETENTRYBYID = 503;
+const VLGETENTRYBYNAME = 504;
+const VLGETNEWVOLUMEID = 505;
+const VLREPLACEENTRY = 506;
+const VLUPDATEENTRY = 507;
+const VLSETLOCK = 508;
+const VLRELEASELOCK = 509;
+const VLLISTENTRY = 510;
+const VLLISTATTRIBUTES = 511;
+const VLLINKEDLIST = 512;
+const VLGETSTATS = 513;
+const VLPROBE = 514;
+const VLGETADDRS = 515;
+const VLCHANGEADDR = 516;
+const VLCREATEENTRYN = 517;
+const VLGETENTRYBYIDN = 518;
+const VLGETENTRYBYNAMEN = 519;
+const VLREPLACEENTRYN = 520;
+const VLLISTENTRYN = 521;
+const VLLISTATTRIBUTESN = 522;
+const VLLINKEDLISTN = 523;
+const VLUPDATEENTRYBYNAME = 524;
+const VLCREATEENTRYU = 525;
+const VLGETENTRYBYIDU = 526;
+const VLGETENTRYBYNAMEU = 527;
+const VLREPLACEENTRYU = 528;
+const VLLISTENTRYU = 529;
+const VLLISTATTRIBUTESU = 530;
+const VLLINKEDLISTU = 531;
+const VLREGADDR = 532;
+const VLGETADDRSU = 533;
+const VLLISTATTRIBUTESN2 = 534;
+
+/*
+ * ReleaseType argument for VL_ReleaseLock
+ */
+const LOCKREL_TIMESTAMP = 1;
+const LOCKREL_OPCODE = 2;
+const LOCKREL_AFSID = 4;
+
+struct vldbentry {
+ char name[VLDB_MAXNAMELEN];
+ long volumeType; /* currrent unused */
+ long nServers;
+ long serverNumber[MAXNSERVERS];
+ long serverPartition[MAXNSERVERS];
+ long serverFlags[MAXNSERVERS];
+ u_long volumeId[MAXTYPES];
+ long cloneId;
+ long flags;
+};
+
+struct nvldbentry {
+ char name[VLDB_MAXNAMELEN];
+ long nServers;
+ long serverNumber[NMAXNSERVERS];
+ long serverPartition[NMAXNSERVERS];
+ long serverFlags[NMAXNSERVERS];
+ u_long volumeId[MAXTYPES];
+ long cloneId;
+ long flags;
+ long matchindex;
+ long spares2;
+ long spares3;
+ long spares4;
+ long spares5;
+ long spares6;
+ long spares7;
+ long spares8;
+ long spares9;
+};
+
+struct vlentry {
+ u_long volumeId[MAXTYPES];
+ long flags;
+ long LockAfsId;
+ long LockTimestamp;
+ long cloneId;
+ long AssociatedChain;
+ long nextIdHash[MAXTYPES];
+ long nextNameHash;
+ long spares1[2];
+ char name[VLDB_MAXNAMELEN];
+ u_char volumeType;
+ u_char serverNumber[MAXNSERVERS];
+ u_char serverPartition[MAXNSERVERS];
+ u_char serverFlags[MAXNSERVERS];
+ u_char RefCount;
+ char spares2[1];
+};
+
+/* disk_vlentry is arla specific */
+
+struct disk_vlentry {
+ u_long volumeId[MAXTYPES];
+ long flags;
+ long cloneId;
+ string name<>;
+ long serverNumber<>;
+ long serverPartition<>;
+ long serverFlags<>;
+};
+
+struct vital_vlheader {
+ long vldbversion;
+ long headersize;
+ long freePtr;
+ long eofPtr;
+ long allocs;
+ long frees;
+ long MaxVolumeId;
+ long totalEntries[MAXTYPES];
+};
+
+typedef long longarray[MAXTYPES];
+
+struct vlheader {
+ struct vital_vlheader vital_header;
+ u_long IpMappedAddr[MAXSERVERID];
+ long VolnameHash[HASHSIZE];
+/* long VolidHashRW[HASHSIZE];
+ long VolidHashRO[HASHSIZE];
+ long VolidHashBACK[HASHSIZE];*/
+ longarray VolidHash[HASHSIZE];
+};
+
+
+const VLUPDATE_VOLUMENAME = 0x1;
+const VLUPDATE_FLAGS = 0x4;
+const VLUPDATE_READONLYID = 0x8;
+const VLUPDATE_BACKUPID = 0x10;
+const VLUPDATE_REPSITES = 0x20;
+const VLUPDATE_CLONEID = 0x80;
+const VLUPDATE_VOLNAMEHASH = 0x100;
+const VLUPDATE_RWID = 0x200;
+
+const VLUPDATE_REPS_DELETE = 0x100;
+const VLUPDATE_REPS_ADD = 0x200;
+const VLUPDATE_REPS_MODSERV = 0x400;
+const VLUPDATE_REPS_MODPART = 0x800;
+const VLUPDATE_REPS_MODFLAG = 0x1000;
+
+struct VldbUpdateEntry {
+ u_long Mask;
+ char name[VLDB_MAXNAMELEN];
+ long volumeType;
+ long flags;
+ u_long ReadOnlyId;
+ u_long BackupId;
+ long cloneid;
+ long nModifiedRepsites;
+ u_long RepsitesMask[MAXNSERVERS];
+ long RepsitesTargetServer[MAXNSERVERS];
+ long RepsitesTargetPart[MAXNSERVERS];
+ long RepsitesNewServer[MAXNSERVERS];
+ long RepsitesNewPart[MAXNSERVERS];
+ long RepsitesNewFlags[MAXNSERVERS];
+};
+
+/* bit mask for VldbListByAttributes.Mask */
+const VLLIST_SERVER = 0x1;
+const VLLIST_PARTITION = 0x2;
+/* 0x4 was VLLIST_VOLUMETYPE but now it seems to be depricated */
+const VLLIST_VOLUMEID = 0x8;
+const VLLIST_FLAG = 0x10;
+
+struct VldbListByAttributes {
+ u_long Mask;
+ long server;
+ long partition;
+ long volumetype; /* depricated */
+ long volumeid;
+ long flag;
+};
+
+struct uvldbentry {
+ char name[VLDB_MAXNAMELEN];
+ long nServers;
+ afsUUID serverNumber[NMAXNSERVERS];
+ long serverUnique[NMAXNSERVERS];
+ long serverPartition[NMAXNSERVERS];
+ long serverFlags[NMAXNSERVERS];
+ u_long volumeId[MAXTYPES];
+ long cloneId;
+ long flags;
+ long spares1;
+ long spares2;
+ long spares3;
+ long spares4;
+ long spares5;
+ long spares6;
+ long spares7;
+ long spares8;
+ long spares9;
+};
+
+
+#if 0
+struct single_vldbentry {
+ vldbentry VldbEntry;
+ vldblist next_vldb;
+};
+
+struct vldb_list {
+ vldblist node;
+};
+#endif
+
+struct vldstats {
+ unsigned long start_time;
+ long requests[MAX_NUMBER_OPCODES];
+ long aborts[MAX_NUMBER_OPCODES];
+ long reserved[5];
+};
+
+const VL_MAX_BULK_ADDRS = 1024 ;
+
+typedef vldbentry bulkentries<>;
+typedef nvldbentry nbulkentries<>;
+typedef uvldbentry ubulkentries<>;
+typedef int32_t bulkaddrs<VL_MAX_BULK_ADDRS>;
+
+
+/*
+ * Bits for ListAddrByAttributes.Mask
+ * Note, IPADDR/INDEX/UUID are mutually exclusive
+ */
+
+const VLADDR_IPADDR = 0x1;
+const VLADDR_INDEX = 0x2;
+const VLADDR_UUID = 0x4;
+
+struct ListAddrByAttributes {
+ int32_t Mask;
+ uint32_t ipaddr;
+ int32_t index;
+ int32_t spare;
+ afsUUID uuid;
+};
+
+struct VL_Callback {
+ uint32_t version;
+ uint32_t expiration_time;
+ uint32_t time;
+ uint32_t handle;
+};
+
+/*
+ * Interface
+ */
+
+CreateEntry (IN vldbentry *newentry) = VLCREATEENTRY;
+
+DeleteEntry (IN long Volid,
+ IN long voltype) = VLDELETEENTRY;
+
+GetEntryByID (IN long Volid,
+ IN long voltype,
+ OUT vldbentry *entry) = VLGETENTRYBYID;
+
+GetEntryByName (IN string volumename<VLDB_MAXNAMELEN>,
+ OUT vldbentry *entry) = VLGETENTRYBYNAME;
+
+GetNewVolumeId (IN long bumpcount,
+ OUT long *newvolumid) = VLGETNEWVOLUMEID;
+
+ReplaceEntry (IN long Volid,
+ IN long voltype,
+ IN vldbentry *newentry,
+ IN long ReleaseType) = VLREPLACEENTRY;
+
+UpdateEntry (IN long Volid,
+ IN long voltype,
+ IN VldbUpdateEntry *UpdateEntry,
+ IN long ReleaseType) = VLUPDATEENTRY;
+
+SetLock (IN long Volid,
+ IN long voltype,
+ IN long voloper) = VLSETLOCK;
+
+ReleaseLock (IN long volid,
+ IN long voltype,
+ IN long ReleaseType) = VLRELEASELOCK;
+
+ListEntry (IN long previous_index,
+ OUT long *count,
+ OUT long *next_index,
+ OUT vldbentry *entry) = VLLISTENTRY;
+
+ListAttributes (IN VldbListByAttributes *attributes,
+ OUT long *nentries,
+ OUT bulkentries *blkentries) = VLLISTATTRIBUTES;
+
+#if 0
+LinkedList (IN VldbListByAttributes *attributes,
+ OUT long *nentries,
+ OUT vldb_list *linkedentries) = 512;
+#endif
+
+GetStats (OUT vldstats *stats,
+ OUT vital_vlheader *vital_header) = VLGETSTATS;
+
+Probe () = VLPROBE;
+
+GetAddrs(IN int32_t handle,
+ IN int32_t spare,
+ OUT VL_Callback *spare3,
+ OUT int32_t *nentries,
+ OUT bulkaddrs *blkaddr) = VLGETADDRS;
+
+ChangeAddrs(IN int32_t old_ip,
+ IN int32_t new_ip) = VLCHANGEADDR; /* obsolete */
+
+CreateEntryN(IN nvldbentry *newentry) = VLCREATEENTRYN;
+
+GetEntryByIDN (IN long Volid,
+ IN long voltype,
+ OUT nvldbentry *entry) = VLGETENTRYBYIDN;
+
+GetEntryByNameN (IN string volumename<VLDB_MAXNAMELEN>,
+ OUT nvldbentry *entry) = VLGETENTRYBYNAMEN;
+
+ReplaceEntryN (IN long Volid,
+ IN long voltype,
+ IN nvldbentry *newentry,
+ IN long ReleaseType) = VLREPLACEENTRYN;
+
+ListEntryN(IN afs_int32 previous_index,
+ OUT afs_int32 *count,
+ OUT afs_int32 *next_index,
+ OUT nvldbentry *entry) = VLLISTENTRYN;
+
+ListAttributesN (IN VldbListByAttributes *attributes,
+ OUT long *nentries,
+ OUT nbulkentries *blkentries) = VLLISTATTRIBUTESN;
+
+#if 0
+LinkedListN() = 523;
+#endif
+
+UpdateEntryByName (IN string volname<VLDB_MAXNAMELEN>,
+ IN VldbUpdateEntry *UpdateEntry,
+ IN long ReleaseType) = VLUPDATEENTRYBYNAME;
+
+#ifdef not_implemented_yet
+CreateEntryU(IN uvldbentry *newentry) = VLCREATEENTRYU;
+
+GetEntryByIDU() = VLGETENTRYBYIDU;
+
+GetEntryByNameU (IN string volumename<VLDB_MAXNAMELEN>,
+ OUT struct uvldbentry *entry) = VLGETENTRYBYNAMEU;
+
+ReplaceEntryU() = VLREPLACEENTRYU;
+
+ListEntryU() = VLLISTENTRYU;
+
+ListAttributesU (IN VldbListByAttributes *attributes,
+ OUT long *nentries,
+ OUT ubulkentries *blkentries) = VLLISTATTRIBUTESU;
+
+LinkedListU() = VLLINKEDLISTU;
+#endif
+
+GetAddrsU(IN ListAddrByAttributes *inaddr,
+ OUT afsUUID *uuidp1,
+ OUT afs_int32 *uniquifier,
+ OUT afs_int32 *nentries,
+ OUT bulkaddrs *blkaddrs) = VLGETADDRSU;
+
+
+RegisterAddrs(IN afsUUID *uid,
+ IN int32_t spare,
+ IN bulkaddrs *addrs) = VLREGADDR;
+
+
+ListAttributesN2(IN VldbListByAttributes *attributes,
+ IN string volumename<VLDB_MAXNAMELEN>,
+ IN afs_int32 startindex,
+ OUT afs_int32 *nentries,
+ OUT nbulkentries *blkentries,
+ OUT afs_int32 *nextstartindex) = VLLISTATTRIBUTESN2;
+
+#if 0
+
+/*
+ *
+ */
+
+const VL_LISTATTRUUID_MAXATTR = 64;
+const VL_LISTATTRUUID_MAXATTRSIZE = 512;
+
+struct VL_ListAddrUUID {
+ afs_int32 type;
+ afs_int32 error;
+ opaque data<VL_LISTATTRUUID_MAXATTRSIZE>;
+};
+
+typedef VL_ListAddrUUID VL_ListAddrUUIDs<>;
+
+const VL_UUID_data_INVALID = 1;
+
+const VL_UUID_data_IPV6 = 1;
+struct VL_UUID_data {
+ opaque ipv6_addr<128>;
+ int ipv6_mtu;
+};
+
+const VL_UUID_data_GSSAPI_name = 2;
+struct VL_UUID_data_gss_name {
+ opaque gss_name<>;
+};
+
+/*
+ * `uuid' is the uuid we query information the diffrent types are in
+ * `query'.
+ *
+ * For each `query'-item there can be one or more items in `reply'.
+ * The reply items have `reply<>.type' set to the same type as in the
+ * query. The are always sorted in the same order as the `query'.
+ *
+ * If the `query' type isn't supported a `reply<>' is sent back with
+ * `reply<>.error' set.
+ *
+ * The `reply<>.data' is filled with `reply<>.type' specific data.
+ * XXX should we use union, I don't think so.
+ */
+
+ListAttrUUID(IN afsUUID *uuid,
+ IN afs_int32 query<VL_LISTATTRUUID_MAXATTR>,
+ OUT VL_ListAddrUUIDs *reply) = 10001;
+
+#endif
--- /dev/null
+/* This is -*-c-*- */
+
+/*
+ * Copyright (c) 1997 - 2004 Kungliga Tekniska Högskolan
+ * (Royal Institute of Technology, Stockholm, Sweden).
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the Institute nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Interface to Volumeserver,
+ * reference /afs/nada.kth.se/misc/reference/programming/afs/shadow/
+ *
+ * $Id: volumeserver.xg,v 1.27 2004/08/27 11:14:45 lha Exp $
+ */
+
+package VOLSER_
+
+%#include <fs_errors.h>
+
+error-function conv_to_arla_errno
+
+const VLDB_MAXSERVER = 80;
+const VOLSERVICE_PORT = 7005;
+const VOLSERVICE_ID = 4;
+const INVALID_BID = 0;
+const VOLSER_MAXVOLNAME = 65;
+const VOLSER_OLDMAXVOLNAME = 32;
+const VOLSER_MAX_REPSITES = 7;
+const VNAMESIZE = 32;
+
+const VOLCREATEVOLUME = 100;
+const VOLDELETEVOLUME = 101;
+const VOLRESTORE = 102;
+const VOLFORWARD = 103;
+const VOLENDTRANS = 104;
+const VOLCLONE = 105;
+const VOLSETFLAGS = 106;
+const VOLGETFLAGS = 107;
+const VOLTRANSCREATE = 108;
+const VOLDUMP = 109;
+const VOLGETNTHVOLUME = 110;
+const VOLSETFORWARDING = 111;
+const VOLGETNAME = 112;
+const VOLGETSTATUS = 113;
+const VOLSIGNALRESTORE = 114;
+const VOLLISTPARTITIONS = 115;
+const VOLLISTVOLUMES = 116;
+const VOLSETIDTYPES = 117;
+const VOLMONITOR = 118;
+const VOLPARTITIONINFO = 119;
+const VOLRECLONE = 120;
+const VOLLISTONEVOLUME = 121;
+const VOLNUKEVOLUME = 122;
+const VOLSETDATE = 123;
+const VOLXLISTVOLUMES = 124;
+const VOLXLISTONEVOL = 125;
+const VOLSETINFO = 126;
+const VOLXLISTPARTITIONS= 127;
+const VOLFORWARDMULTIPLE= 128;
+
+const PARTVALID = 0x01;
+const VOK = 0x02;
+const VBUSY = 110;
+
+const VOLSERTRELE_ERROR = 1492325120;
+const VOLSERNO_OP = 1492325121;
+const VOLSERREAD_DUMPERROR = 1492325122;
+const VOLSERDUMPERROR = 1492325123;
+const VOLSERATTACH_ERROR = 1492325124;
+const VOLSERILLEGAL_PARTITION = 1492325125;
+const VOLSERDETACH_ERROR = 1492325126;
+const VOLSERBAD_ACCESS = 1492325127;
+const VOLSERVLDB_ERROR = 1492325128;
+const VOLSERBADNAME = 1492325129;
+const VOLSERVOLMOVED = 1492325130;
+const VOLSERBADOP = 1492325131;
+const VOLSERBADRELEASE = 1492325132;
+const VOLSERVOLBUSY = 1492325133;
+const VOLSERNO_MEMORY = 1492325134;
+const VOLSERNOVOL = 1492325135;
+const VOLSERMULTIRWVOL = 1492325136;
+const VOLSERFAILEDOP = 1492325137;
+
+/* Attach mode for this volume at the start of the transaction */
+const ITOffline = 0x1; /* volume offline on server (returns VOFFLINE) */
+const ITBusy = 0x2; /* volume busy on server (returns VBUSY) */
+const ITReadOnly = 0x8; /* do not use */
+const ITCreate = 0x10; /* volume does not exist correctly yet */
+const ITCreateVolID = 0x1000; /* create volid */
+
+/* Representing transaction state */
+const TTDeleted = 0x1; /* delete transaction not yet freed due to refCount */
+
+const VTDeleteOnSalvage = 1;
+const VTOutOfService = 2;
+const VTDeleted = 4;
+
+#if 0
+struct volser_trans {
+ volser_trans *next;
+ long tid;
+ long time;
+ long creationTime;
+ long returnCode;
+ long volid;
+ long partition;
+ long dumpTransId;
+ long dumpSeq; /* Not used */
+ short refCount;
+ short iflags;
+ char vflags;
+ char tflags;
+ char incremental;
+ char lastProcName[30];
+/* struct rx_call *rxCallPtr; XXXXXXX BROKEN /lha */
+};
+#endif
+struct volDescription {
+ char volName[VOLSER_MAXVOLNAME];
+ long volId;
+ long volSize;
+ long volFlags;
+ long volCloneId;
+};
+
+struct partList {
+ int partId[26];
+ long partFlags[26];
+};
+
+struct volser_status {
+ long volID;
+ long nextUnique;
+ long type;
+ long parentID;
+ long cloneID;
+ long backupID;
+ long restoredFromID;
+ long maxQuota;
+ long minQuota;
+ long owner;
+ long creationDate;
+ long accessDate;
+ long updateDate;
+ long exprirationDate;
+ long backupDate;
+ long copyDate;
+};
+
+struct destServer {
+ long destHost;
+ long destPort;
+ long destSSID; /* currently allways set to 1 */
+};
+
+struct volintInfo {
+ char name[VNAMESIZE];
+ long volid;
+ long type;
+ long backupID;
+ long parentID;
+ long cloneID;
+ long status;
+ long copyDate;
+ char inUse;
+ char needsSalvaged;
+ char destroyMe;
+ long creationDate;
+ long accessDate;
+ long updateDate;
+ long backupDate;
+ long dayUse;
+ long filecount;
+ long maxquota;
+ long size;
+ long flags;
+ long spare0;
+ long spare1;
+ long spare2;
+ long spare3;
+};
+
+struct xvolintInfo {
+ char name[VNAMESIZE];
+ long volid;
+ long type;
+ long backupID;
+ long parentID;
+ long cloneID;
+ long status;
+ long copyDate;
+ char inUse;
+ long creationDate;
+ long accessDate;
+ long updateDate;
+ long backupDate;
+ long dayUse;
+ long filecount;
+ long maxquota;
+ long size;
+ int32_t stat_reads[4];
+ int32_t stat_writes[4];
+ int32_t stat_fileSameAuthor[6];
+ int32_t stat_fileDiffAuthor[6];
+ int32_t stat_dirSameAuthor[6];
+ int32_t stat_dirDiffAuthor[6];
+};
+
+/*
+ * same site total, same site authenticated
+ * diff site total, diff site authenticated
+ */
+
+/*
+ * 0-60 s
+ * 1-10 min
+ * 10-60 min
+ * 1-24 hour
+ * 1-7 days
+ * >7 days
+ */
+
+struct transDebugInfo {
+ long tid;
+ long time;
+ long creationTime;
+ long returnCode;
+ long volid;
+ long partition;
+ short iflags;
+ char vflags;
+ char tflags;
+ char lastProcName[30];
+ long callValid;
+ long readNext;
+ long transmitNext;
+ long lastSendTime;
+ long lastReceiveTime;
+};
+
+struct pIDs {
+ long partIds[26]; /* -1 if none */
+};
+
+struct diskPartition {
+ char name[32];
+ char devName[32];
+ long lock_fd;
+ long totalUsable;
+ long free;
+ long minFree;
+};
+
+struct restoreCookie {
+ char name[32];
+ long type;
+ long clone;
+ long parent;
+};
+
+typedef transDebugInfo transDebugEntries<>;
+typedef volintInfo volEntries<>;
+typedef xvolintInfo xvolEntries<>;
+typedef int32_t part_entries<>;
+typedef int32_t multi_results<>;
+
+struct replica {
+ int32_t trans_id;
+ struct destServer destserver;
+};
+
+#define AFS_MAX_DESTINATIONS 255
+
+typedef replica manyDests<AFS_MAX_DESTINATIONS>;
+
+AFSVolCreateVolume(IN long partition,
+ IN string name,
+ IN long type,
+ IN long parent,
+ INOUT long *volid,
+ OUT long *trans) = VOLCREATEVOLUME;
+
+AFSVolDeleteVolume(IN long trans) = VOLDELETEVOLUME;
+
+AFSVolNukeVolume(IN long partID,
+ IN long volID) = VOLNUKEVOLUME;
+
+AFSVolDump(IN long fromTrans,
+ IN long fromDate) split = VOLDUMP;
+
+AFSVolSignalRestore(IN string name<>,
+ IN int type,
+ IN long pid,
+ IN long cloneid) = VOLSIGNALRESTORE;
+
+AFSVolRestore(IN long toTrans,
+ IN long flags,
+ IN restoreCookie *cookie) split = VOLRESTORE;
+
+AFSVolForward(IN int32_t fromTrans,
+ IN int32_t fromData,
+ IN struct destServer *destination,
+ IN long destTrans,
+ IN struct restoreCookie *cookie) = VOLFORWARD;
+
+AFSVolClone(IN long trans,
+ IN long purgeVol,
+ IN long newType,
+ IN string newName,
+ INOUT long *newVol) = VOLCLONE;
+
+AFSVolReClone(IN long tid,
+ IN long cloneID) = VOLRECLONE;
+
+AFSVolSetForwarding(IN long tid,
+ IN long newsite) = VOLSETFORWARDING;
+
+AFSVolTransCreate(IN long volume,
+ IN long partition,
+ IN long flags,
+ OUT long *trans) = VOLTRANSCREATE;
+
+AFSVolEndTrans(IN long trans,
+ OUT long *rcode) = VOLENDTRANS;
+
+AFSVolGetFlags(IN long trans,
+ OUT long *flags) = VOLGETFLAGS;
+
+AFSVolSetFlags(IN long trans,
+ IN long flags) = VOLSETFLAGS;
+
+AFSVolGetName(IN long tid,
+ OUT string tname<256>) = VOLGETNAME;
+
+AFSVolGetStatus(IN long tid,
+ OUT volser_status *status) = VOLGETSTATUS;
+
+AFSVolSetIdsTypes(IN long tId,
+ IN string name<>,
+ IN long type,
+ IN long pId,
+ IN long cloneId,
+ IN long backupId) = VOLSETIDTYPES;
+
+AFSVolSetDate(IN long tid,
+ IN long newDate) = VOLSETDATE;
+
+AFSVolListPartitions(OUT struct pIDs *partIDs) = VOLLISTPARTITIONS;
+
+AFSVolPartitionInfo(IN string name<>,
+ OUT struct diskPartition *partition) = VOLPARTITIONINFO;
+
+AFSVolListVolumes(IN long partID,
+ IN long flags,
+ OUT struct volEntries *resultEntries) = VOLLISTVOLUMES;
+
+AFSVolListOneVolume(IN long partID,
+ IN long volid,
+ OUT struct volEntries *resultEntries) = VOLLISTONEVOLUME;
+
+AFSVolGetNthVolume(IN long index,
+ OUT long *volume,
+ OUT long *partition) = VOLGETNTHVOLUME;
+
+AFSVolMonitor(OUT transDebugEntries *result) = VOLMONITOR;
+
+AFSVolXListVolumes(IN long partID,
+ IN long flags,
+ OUT struct xvolEntries *resultEntries) = VOLXLISTVOLUMES;
+
+AFSVolXListOneVolume(IN long partID,
+ IN long volid,
+ OUT struct xvolEntries *resultEntries) = VOLXLISTONEVOL;
+
+AFSVolSetInfo(IN long transid,
+ IN volintInfo *volinfo) = VOLSETINFO;
+
+AFSVolXListPartitions(OUT part_entries *ent) = VOLXLISTPARTITIONS;
+
+AFSVolForwardMultiple(IN int32_t fromTrans,
+ IN int32_t fromData,
+ IN manyDests *destinations,
+ IN long spare0,
+ IN struct restoreCookie *cookie,
+ OUT multi_results *results) = VOLFORWARDMULTIPLE;