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
14 #include <afs/afsutil.h>
16 extern struct vldstats dynamic_statistics
;
20 #define HASHSIZE 8191 /* Must be prime */
22 #define VLDBALLOCCOUNT 500
24 /* Current upper limits limits on certain entries; increase with care! */
25 #define BADSERVERID 255
26 #define MAXSERVERID 254 /* permits 255 servers; was == 30 in version 1 */
27 #define MAXSERVERFLAG 0x80
28 #define MAXPARTITIONID 255
29 #define MAXBUMPCOUNT 0x7fffffff /* Infinite upper bound on bumping for now */
30 #define MAXLOCKTIME 0x7fffffff /* Infinite locking for now */
32 /* Order of entries in the volumeid[] array */
37 /* Header struct holding stats, internal pointers and the hash tables */
39 struct vital_vlheader vital_header
; /* all small critical stuff are in here */
40 afs_uint32 IpMappedAddr
[MAXSERVERID
+ 1]; /* Mapping of ip addresses to relative ones */
41 afs_uint32 VolnameHash
[HASHSIZE
]; /* hash table for vol names */
42 afs_uint32 VolidHash
[MAXTYPES
][HASHSIZE
]; /* hash table for vol ids */
43 afs_int32 SIT
; /* spare for poss future use */
46 /* Vlentry's flags state */
47 #define VLFREE 1 /* If in free list */
48 #define VLDELETED 2 /* Entry is soft deleted */
49 #define VLLOCKED 4 /* Advisory lock on entry */
50 #define VLCONTBLOCK 8 /* Special continuation block entry */
52 /* Valid RelaseLock types */
53 #define LOCKREL_TIMESTAMP 1
54 #define LOCKREL_OPCODE 2
55 #define LOCKREL_AFSID 4
57 /* Per repsite flags (serverFlags) */
58 #define VLREPSITE_NEW 1 /* Replication site is got new release */
60 /* Internal representation of vldbentry; trying to save any bytes */
62 afs_uint32 volumeId
[MAXTYPES
]; /* Corresponding volume of each type */
63 afs_int32 flags
; /* General flags */
64 afs_int32 LockAfsId
; /* Person who locked entry */
65 afs_int32 LockTimestamp
; /* lock time stamp */
66 afs_uint32 cloneId
; /* used during cloning */
67 afs_int32 spares0
; /* XXXX was AssociatedChain XXXX */
68 afs_uint32 nextIdHash
[MAXTYPES
]; /* Next id hash table pointer (or freelist ->[0]) */
69 afs_uint32 nextNameHash
; /* Next name hash table pointer */
70 afs_int32 spares1
[2]; /* long spares */
71 char name
[VL_MAXNAMELEN
]; /* Volume name */
72 char spares3
; /* XXX was volumeType XXXX */
73 u_char serverNumber
[OMAXNSERVERS
]; /* Server # for each server that holds volume */
74 u_char serverPartition
[OMAXNSERVERS
]; /* Server Partition number */
75 u_char serverFlags
[OMAXNSERVERS
]; /* Server flags */
76 char spares4
; /* XXX was RefCount XXX */
77 char spares2
[1]; /* for 32-bit alignment */
81 afs_uint32 volumeId
[MAXTYPES
]; /* Corresponding volume of each type */
82 afs_int32 flags
; /* General flags */
83 afs_int32 LockAfsId
; /* Person who locked entry */
84 afs_int32 LockTimestamp
; /* lock time stamp */
85 afs_uint32 cloneId
; /* used during cloning */
86 afs_uint32 nextIdHash
[MAXTYPES
]; /* Next id hash table pointer (or freelist ->[0]) */
87 afs_uint32 nextNameHash
; /* Next name hash table pointer */
88 char name
[VL_MAXNAMELEN
]; /* Volume name */
89 u_char serverNumber
[NMAXNSERVERS
]; /* Server # for each server that holds volume */
90 u_char serverPartition
[NMAXNSERVERS
]; /* Server Partition number */
91 u_char serverFlags
[NMAXNSERVERS
]; /* Server flags */
94 typedef struct vlheader vlheader
;
95 typedef struct vlentry vlentry
;
96 typedef struct nvlentry nvlentry
;
98 #define DOFFSET(abase,astr,aitem) ((abase)+(((char *)(aitem)) - ((char *)(astr))))
100 #define VL_MHSRV_PERBLK 64
101 #define VL_MAXIPADDRS_PERMH 15
102 #define VL_MAX_ADDREXTBLKS 4
103 #define VL_ADDREXTBLK_SIZE 8192
107 afs_int32 count
; /* # of valid addresses */
108 afs_int32 spares1
[2];
109 afs_int32 flags
; /* must be in the same position as the vlentry's
111 afs_uint32 contaddrs
[VL_MAX_ADDREXTBLKS
];
112 afs_int32 spares2
[24];
116 afs_int32 uniquifier
;
117 afs_uint32 addrs
[VL_MAXIPADDRS_PERMH
];
119 afs_int32 spares
[11];
123 #define ex_count _ex_un._ex_header.count
124 #define ex_hdrflags _ex_un._ex_header.flags
125 #define ex_contaddrs _ex_un._ex_header.contaddrs
126 #define ex_hostuuid _ex_un._ex_addrentry.hostuuid
127 #define ex_addrs _ex_un._ex_addrentry.addrs
128 #define ex_uniquifier _ex_un._ex_addrentry.uniquifier
129 #define ex_srvflags _ex_un._ex_addrentry.flags
131 #define VLog(level, str) ViceLog(level, str)
133 #endif /* _VLSERVER_ */