141e626d5cdc2fe8bae79b8ad8a1c01b1d7cf6db
[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_int32 VolnameHash[HASHSIZE];    /* hash table for vol names */
42     afs_int32 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_int32 cloneId;          /* used during cloning */
67     afs_int32 spares0;          /* XXXX was AssociatedChain XXXX */
68     afs_int32 nextIdHash[MAXTYPES];     /* Next id hash table pointer (or freelist ->[0]) */
69     afs_int32 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_int32 cloneId;          /* used during cloning */
86     afs_int32 nextIdHash[MAXTYPES];     /* Next id hash table pointer (or freelist ->[0]) */
87     afs_int32 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 COUNT_REQ(op) static int this_op = op-VL_LOWEST_OPCODE; dynamic_statistics.requests[this_op]++
99 #define COUNT_ABO dynamic_statistics.aborts[this_op]++
100 #define DOFFSET(abase,astr,aitem) ((abase)+(((char *)(aitem)) - ((char *)(astr))))
101
102 #define VL_MHSRV_PERBLK         64
103 #define VL_MAXIPADDRS_PERMH     15
104 #define VL_MAX_ADDREXTBLKS      4
105 #define VL_ADDREXTBLK_SIZE      8192
106 struct extentaddr {
107     union ex_un {
108         struct {
109             afs_int32 count;    /* # of valid addresses */
110             afs_int32 spares1[2];
111             afs_int32 flags;    /* must match vlentry's flags field XXX */
112             afs_uint32 contaddrs[VL_MAX_ADDREXTBLKS];
113             afs_int32 spares2[24];
114         } _ex_header;
115         struct {
116             afsUUID hostuuid;
117             afs_int32 uniquifier;
118             afs_uint32 addrs[VL_MAXIPADDRS_PERMH];
119         } _ex_addrentry;
120     } _ex_un;
121 };
122 #define ex_count        _ex_un._ex_header.count
123 #define ex_flags        _ex_un._ex_header.flags
124 #define ex_contaddrs    _ex_un._ex_header.contaddrs
125 #define ex_hostuuid     _ex_un._ex_addrentry.hostuuid
126 #define ex_addrs        _ex_un._ex_addrentry.addrs
127 #define ex_uniquifier   _ex_un._ex_addrentry.uniquifier
128
129 #define VLog(level, str)   ViceLog(5, str)
130
131 extern int FreeBlock(struct ubik_trans *trans, afs_int32 blockindex);
132
133 #endif /* _VLSERVER_ */