Commit | Line | Data |
---|---|---|
805e021f CE |
1 | /* |
2 | * Copyright 2000, International Business Machines Corporation and others. | |
3 | * All Rights Reserved. | |
4 | * | |
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 | |
8 | */ | |
9 | ||
10 | #ifndef _VLSERVER_ | |
11 | #define _VLSERVER_ | |
12 | ||
13 | #include "vldbint.h" | |
14 | #include <afs/afsutil.h> | |
15 | ||
16 | extern struct vldstats dynamic_statistics; | |
17 | ||
18 | ||
19 | ||
20 | #define HASHSIZE 8191 /* Must be prime */ | |
21 | #define NULLO 0 | |
22 | #define VLDBALLOCCOUNT 500 | |
23 | ||
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 */ | |
31 | ||
32 | /* Order of entries in the volumeid[] array */ | |
33 | #define RWVOL 0 | |
34 | #define ROVOL 1 | |
35 | #define BACKVOL 2 | |
36 | ||
37 | /* Header struct holding stats, internal pointers and the hash tables */ | |
38 | struct vlheader { | |
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 */ | |
44 | }; | |
45 | ||
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 */ | |
51 | ||
52 | /* Valid RelaseLock types */ | |
53 | #define LOCKREL_TIMESTAMP 1 | |
54 | #define LOCKREL_OPCODE 2 | |
55 | #define LOCKREL_AFSID 4 | |
56 | ||
57 | /* Per repsite flags (serverFlags) */ | |
58 | #define VLREPSITE_NEW 1 /* Replication site is got new release */ | |
59 | ||
60 | /* Internal representation of vldbentry; trying to save any bytes */ | |
61 | struct vlentry { | |
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 */ | |
78 | }; | |
79 | ||
80 | struct nvlentry { | |
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 */ | |
92 | }; | |
93 | ||
94 | typedef struct vlheader vlheader; | |
95 | typedef struct vlentry vlentry; | |
96 | typedef struct nvlentry nvlentry; | |
97 | ||
98 | #define DOFFSET(abase,astr,aitem) ((abase)+(((char *)(aitem)) - ((char *)(astr)))) | |
99 | ||
100 | #define VL_MHSRV_PERBLK 64 | |
101 | #define VL_MAXIPADDRS_PERMH 15 | |
102 | #define VL_MAX_ADDREXTBLKS 4 | |
103 | #define VL_ADDREXTBLK_SIZE 8192 | |
104 | struct extentaddr { | |
105 | union ex_un { | |
106 | struct { | |
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 | |
110 | flags field */ | |
111 | afs_uint32 contaddrs[VL_MAX_ADDREXTBLKS]; | |
112 | afs_int32 spares2[24]; | |
113 | } _ex_header; | |
114 | struct { | |
115 | afsUUID hostuuid; | |
116 | afs_int32 uniquifier; | |
117 | afs_uint32 addrs[VL_MAXIPADDRS_PERMH]; | |
118 | afs_uint32 flags; | |
119 | afs_int32 spares[11]; | |
120 | } _ex_addrentry; | |
121 | } _ex_un; | |
122 | }; | |
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 | |
130 | ||
131 | #define VLog(level, str) ViceLog(level, str) | |
132 | ||
133 | #endif /* _VLSERVER_ */ |