backport to buster
[hcoop/debian/openafs.git] / src / vlserver / vlserver.p.h
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_ */