backport to buster
[hcoop/debian/openafs.git] / src / vlserver / vlserver.p.h
CommitLineData
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
16extern 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 */
38struct 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 */
61struct 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
80struct 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
94typedef struct vlheader vlheader;
95typedef struct vlentry vlentry;
96typedef 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
104struct 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_ */