2 * (C) COPYRIGHT IBM CORPORATION 1987, 1988
3 * LICENSED MATERIALS - PROPERTY OF IBM
10 #include <afs/afsutil.h>
12 extern struct vldstats dynamic_statistics;
16 #define HASHSIZE 8191 /* Must be prime */
18 #define VLDBALLOCCOUNT 500
20 /* Current upper limits limits on certain entries; increase with care! */
21 #define BADSERVERID 255
22 #define MAXSERVERID 254 /* permits 255 servers; was == 30 in version 1 */
23 #define MAXSERVERFLAG 0x80
24 #define MAXPARTITIONID 255
25 #define MAXBUMPCOUNT 0x7fffffff /* Infinite upper bound on bumping for now */
26 #define MAXLOCKTIME 0x7fffffff /* Infinite locking for now */
28 /* Order of entries in the volumeid[] array */
33 /* Header struct holding stats, internal pointers and the hash tables */
35 struct vital_vlheader vital_header; /* all small critical stuff are in here */
36 afs_uint32 IpMappedAddr[MAXSERVERID+1]; /* Mapping of ip addresses to relative ones */
37 afs_int32 VolnameHash[HASHSIZE]; /* hash table for vol names */
38 afs_int32 VolidHash[MAXTYPES][HASHSIZE]; /* hash table for vol ids */
39 afs_int32 SIT; /* spare for poss future use */
42 /* Vlentry's flags state */
43 #define VLFREE 1 /* If in free list */
44 #define VLDELETED 2 /* Entry is soft deleted */
45 #define VLLOCKED 4 /* Advisory lock on entry */
46 #define VLCONTBLOCK 8 /* Special continuation block entry */
48 /* Vlentry's flags also used to stamp type of ongoing operation */
49 #define VLOP_MOVE 0x10
50 #define VLOP_RELEASE 0x20
51 #define VLOP_BACKUP 0x40
52 #define VLOP_DELETE 0x80
53 #define VLOP_DUMP 0x100
54 #define VLOP_ALLOPERS (VLOP_MOVE | VLOP_RELEASE | VLOP_BACKUP | VLOP_DELETE | VLOP_DUMP)
56 /* Valid RelaseLock types */
57 #define LOCKREL_TIMESTAMP 1
58 #define LOCKREL_OPCODE 2
59 #define LOCKREL_AFSID 4
61 /* Per repsite flags (serverFlags) */
62 #define VLREPSITE_NEW 1 /* Replication site is got new release */
64 /* Internal representation of vldbentry; trying to save any bytes */
66 afs_uint32 volumeId[MAXTYPES]; /* Corresponding volume of each type */
67 afs_int32 flags; /* General flags */
68 afs_int32 LockAfsId; /* Person who locked entry */
69 afs_int32 LockTimestamp; /* lock time stamp */
70 afs_int32 cloneId; /* used during cloning */
71 afs_int32 spares0; /* XXXX was AssociatedChain XXXX */
72 afs_int32 nextIdHash[MAXTYPES]; /* Next id hash table pointer (or freelist ->[0]) */
73 afs_int32 nextNameHash; /* Next name hash table pointer */
74 afs_int32 spares1[2]; /* long spares */
75 char name[VL_MAXNAMELEN]; /* Volume name */
76 char spares3; /* XXX was volumeType XXXX */
77 u_char serverNumber[OMAXNSERVERS]; /* Server # for each server that holds volume */
78 u_char serverPartition[OMAXNSERVERS];/* Server Partition number */
79 u_char serverFlags[OMAXNSERVERS]; /* Server flags */
80 char spares4; /* XXX was RefCount XXX */
81 char spares2[1]; /* for 32-bit alignment */
85 afs_uint32 volumeId[MAXTYPES]; /* Corresponding volume of each type */
86 afs_int32 flags; /* General flags */
87 afs_int32 LockAfsId; /* Person who locked entry */
88 afs_int32 LockTimestamp; /* lock time stamp */
89 afs_int32 cloneId; /* used during cloning */
90 afs_int32 nextIdHash[MAXTYPES]; /* Next id hash table pointer (or freelist ->[0]) */
91 afs_int32 nextNameHash; /* Next name hash table pointer */
92 char name[VL_MAXNAMELEN]; /* Volume name */
93 u_char serverNumber[NMAXNSERVERS]; /* Server # for each server that holds volume */
94 u_char serverPartition[NMAXNSERVERS];/* Server Partition number */
95 u_char serverFlags[NMAXNSERVERS]; /* Server flags */
98 typedef struct vlheader vlheader;
99 typedef struct vlentry vlentry;
100 typedef struct nvlentry nvlentry;
102 #define COUNT_REQ(op) static int this_op = op-VL_LOWEST_OPCODE; dynamic_statistics.requests[this_op]++
103 #define COUNT_ABO dynamic_statistics.aborts[this_op]++
104 #define DOFFSET(abase,astr,aitem) ((abase)+(((char *)(aitem)) - ((char *)(astr))))
106 #define VL_MHSRV_PERBLK 64
107 #define VL_MAXIPADDRS_PERMH 15
108 #define VL_MAX_ADDREXTBLKS 4
109 #define VL_ADDREXTBLK_SIZE 8192
113 afs_int32 count; /* # of valid addresses */
114 afs_int32 spares1[2];
115 afs_int32 flags; /* must match vlentry's flags field XXX */
116 afs_uint32 contaddrs[VL_MAX_ADDREXTBLKS];
117 afs_int32 spares2[24];
121 afs_int32 uniquifier;
122 afs_uint32 addrs[VL_MAXIPADDRS_PERMH];
126 #define ex_count _ex_un._ex_header.count
127 #define ex_flags _ex_un._ex_header.flags
128 #define ex_contaddrs _ex_un._ex_header.contaddrs
129 #define ex_hostuuid _ex_un._ex_addrentry.hostuuid
130 #define ex_addrs _ex_un._ex_addrentry.addrs
131 #define ex_uniquifier _ex_un._ex_addrentry.uniquifier
133 #define VLog(level, str) ViceLog(5, str)
135 #endif /* _VLSERVER_ */