Initial IBM OpenAFS 1.0 tree
[openafs.git] / src / vlserver / vlserver.p.h
1 /*
2  * (C) COPYRIGHT IBM CORPORATION 1987, 1988
3  * LICENSED MATERIALS - PROPERTY OF IBM
4  */
5
6 #ifndef _VLSERVER_
7 #define _VLSERVER_
8
9 #include "vldbint.h"
10 #include <afs/afsutil.h>
11
12 extern struct vldstats dynamic_statistics;
13
14
15
16 #define HASHSIZE                8191    /* Must be prime */
17 #define NULLO                   0
18 #define VLDBALLOCCOUNT          500
19
20 /* Current upper limits limits on certain entries; increase with care! */
21 #define BADSERVERID     255
22 #define MAXSERVERID     254  /* permits 255 servers; was == 30 in version 1 */
23 #define MAXSERVERFLAG   0x80
24 #define MAXPARTITIONID  255
25 #define MAXBUMPCOUNT    0x7fffffff  /* Infinite  upper bound on bumping for now */
26 #define MAXLOCKTIME     0x7fffffff  /* Infinite locking for now */
27
28 /* Order of entries in the volumeid[] array */
29 #define RWVOL           0
30 #define ROVOL           1
31 #define BACKVOL         2
32
33 /* Header struct holding stats, internal pointers and the hash tables */
34 struct vlheader {
35     struct  vital_vlheader  vital_header;   /* all small critical stuff are in here */
36     afs_uint32  IpMappedAddr[MAXSERVERID+1];    /* Mapping of ip addresses to relative ones */
37     afs_int32    VolnameHash[HASHSIZE];     /* hash table for vol names */
38     afs_int32    VolidHash[MAXTYPES][HASHSIZE];  /* hash table for vol ids */
39     afs_int32    SIT;                            /* spare for poss future use */
40 };
41
42 /* Vlentry's flags state */
43 #define VLFREE          1               /* If in free list */
44 #define VLDELETED       2               /* Entry is soft deleted */
45 #define VLLOCKED        4               /* Advisory lock on entry */
46 #define VLCONTBLOCK     8               /* Special continuation block entry */
47
48 /* Vlentry's flags also used to stamp type of ongoing operation */
49 #define VLOP_MOVE       0x10
50 #define VLOP_RELEASE    0x20
51 #define VLOP_BACKUP     0x40
52 #define VLOP_DELETE     0x80
53 #define VLOP_DUMP       0x100
54 #define VLOP_ALLOPERS   (VLOP_MOVE | VLOP_RELEASE | VLOP_BACKUP | VLOP_DELETE | VLOP_DUMP)
55
56 /* Valid RelaseLock types */
57 #define LOCKREL_TIMESTAMP   1
58 #define LOCKREL_OPCODE      2
59 #define LOCKREL_AFSID       4
60
61 /* Per repsite flags (serverFlags) */
62 #define VLREPSITE_NEW   1               /* Replication site is got new release */
63
64 /* Internal representation of vldbentry; trying to save any bytes */
65 struct vlentry {
66     afs_uint32  volumeId[MAXTYPES];             /* Corresponding volume of each type */
67     afs_int32    flags;                 /* General flags */
68     afs_int32    LockAfsId;                     /* Person who locked entry */
69     afs_int32    LockTimestamp;         /* lock time stamp */
70     afs_int32    cloneId;                       /* used during cloning */
71     afs_int32    spares0;                       /* XXXX was AssociatedChain XXXX */
72     afs_int32    nextIdHash[MAXTYPES];  /* Next id hash table pointer (or freelist ->[0]) */
73     afs_int32    nextNameHash;          /* Next name hash table pointer */
74     afs_int32    spares1[2];                    /* long spares */
75     char    name[VL_MAXNAMELEN];        /* Volume name */
76     char    spares3;                    /* XXX was volumeType XXXX */
77     u_char  serverNumber[OMAXNSERVERS]; /* Server # for each server that holds volume */
78     u_char  serverPartition[OMAXNSERVERS];/* Server Partition number */
79     u_char  serverFlags[OMAXNSERVERS];  /* Server flags */
80     char    spares4;                    /* XXX was RefCount XXX */
81     char    spares2[1];                 /* for 32-bit alignment */
82 };
83
84 struct nvlentry {
85     afs_uint32  volumeId[MAXTYPES];             /* Corresponding volume of each type */
86     afs_int32    flags;                 /* General flags */
87     afs_int32    LockAfsId;                     /* Person who locked entry */
88     afs_int32    LockTimestamp;         /* lock time stamp */
89     afs_int32    cloneId;                       /* used during cloning */
90     afs_int32    nextIdHash[MAXTYPES];  /* Next id hash table pointer (or freelist ->[0]) */
91     afs_int32    nextNameHash;          /* Next name hash table pointer */
92     char    name[VL_MAXNAMELEN];        /* Volume name */
93     u_char  serverNumber[NMAXNSERVERS]; /* Server # for each server that holds volume */
94     u_char  serverPartition[NMAXNSERVERS];/* Server Partition number */
95     u_char  serverFlags[NMAXNSERVERS];  /* Server flags */
96 };
97
98 typedef struct vlheader vlheader;
99 typedef struct vlentry vlentry;
100 typedef struct nvlentry nvlentry;
101
102 #define COUNT_REQ(op) static int this_op = op-VL_LOWEST_OPCODE; dynamic_statistics.requests[this_op]++
103 #define COUNT_ABO dynamic_statistics.aborts[this_op]++
104 #define DOFFSET(abase,astr,aitem) ((abase)+(((char *)(aitem)) - ((char *)(astr))))
105
106 #define VL_MHSRV_PERBLK         64
107 #define VL_MAXIPADDRS_PERMH     15
108 #define VL_MAX_ADDREXTBLKS      4
109 #define VL_ADDREXTBLK_SIZE      8192
110 struct extentaddr {
111     union ex_un {
112         struct {
113             afs_int32  count;           /* # of valid addresses */
114             afs_int32  spares1[2];
115             afs_int32  flags;           /* must match vlentry's flags field XXX */
116             afs_uint32 contaddrs[VL_MAX_ADDREXTBLKS];
117             afs_int32  spares2[24];
118         } _ex_header;
119         struct {
120             afsUUID hostuuid;
121             afs_int32 uniquifier;
122             afs_uint32 addrs[VL_MAXIPADDRS_PERMH];
123         } _ex_addrentry;
124     } _ex_un;
125 };
126 #define ex_count        _ex_un._ex_header.count
127 #define ex_flags        _ex_un._ex_header.flags
128 #define ex_contaddrs    _ex_un._ex_header.contaddrs
129 #define ex_hostuuid     _ex_un._ex_addrentry.hostuuid
130 #define ex_addrs        _ex_un._ex_addrentry.addrs
131 #define ex_uniquifier   _ex_un._ex_addrentry.uniquifier
132
133 #define VLog(level, str)   ViceLog(5, str) 
134
135 #endif /* _VLSERVER_ */