Blame


1 f7012583 2003-11-25 devnull #ifndef _VENTI_H_
2 f7012583 2003-11-25 devnull #define _VENTI_H_ 1
3 819822c9 2004-06-16 devnull #ifdef __cplusplus
4 f7012583 2003-11-25 devnull extern "C" {
5 f7012583 2003-11-25 devnull #endif
6 1a0954ab 2005-01-04 devnull
7 6c0209f6 2005-02-11 devnull
8 1a0954ab 2005-01-04 devnull AUTOLIB(venti)
9 1a0954ab 2005-01-04 devnull
10 97a5e5f2 2003-11-23 devnull /* XXX should be own library? */
11 97a5e5f2 2003-11-23 devnull /*
12 97a5e5f2 2003-11-23 devnull * Packets
13 97a5e5f2 2003-11-23 devnull */
14 97a5e5f2 2003-11-23 devnull enum
15 97a5e5f2 2003-11-23 devnull {
16 cbeb0b26 2006-04-01 devnull MaxFragSize = 9*1024
17 97a5e5f2 2003-11-23 devnull };
18 97a5e5f2 2003-11-23 devnull
19 97a5e5f2 2003-11-23 devnull typedef struct Packet Packet;
20 97a5e5f2 2003-11-23 devnull
21 79793adc 2011-06-13 rsc Packet* packetalloc(void);
22 79793adc 2011-06-13 rsc void packetappend(Packet*, uchar *buf, int n);
23 79793adc 2011-06-13 rsc uint packetasize(Packet*);
24 79793adc 2011-06-13 rsc int packetcmp(Packet*, Packet*);
25 79793adc 2011-06-13 rsc int packetcompact(Packet*);
26 79793adc 2011-06-13 rsc void packetconcat(Packet*, Packet*);
27 79793adc 2011-06-13 rsc int packetconsume(Packet*, uchar *buf, int n);
28 79793adc 2011-06-13 rsc int packetcopy(Packet*, uchar *buf, int offset, int n);
29 79793adc 2011-06-13 rsc Packet* packetdup(Packet*, int offset, int n);
30 79793adc 2011-06-13 rsc Packet* packetforeign(uchar *buf, int n, void (*free)(void *a), void *a);
31 79793adc 2011-06-13 rsc int packetfragments(Packet*, IOchunk*, int nio, int offset);
32 79793adc 2011-06-13 rsc void packetfree(Packet*);
33 79793adc 2011-06-13 rsc uchar* packetheader(Packet*, int n);
34 79793adc 2011-06-13 rsc uchar* packetpeek(Packet*, uchar *buf, int offset, int n);
35 79793adc 2011-06-13 rsc void packetprefix(Packet*, uchar *buf, int n);
36 79793adc 2011-06-13 rsc void packetsha1(Packet*, uchar sha1[20]);
37 79793adc 2011-06-13 rsc uint packetsize(Packet*);
38 79793adc 2011-06-13 rsc Packet* packetsplit(Packet*, int n);
39 79793adc 2011-06-13 rsc void packetstats(void);
40 79793adc 2011-06-13 rsc uchar* packettrailer(Packet*, int n);
41 79793adc 2011-06-13 rsc int packettrim(Packet*, int offset, int n);
42 79793adc 2011-06-13 rsc
43 6c0209f6 2005-02-11 devnull /* XXX should be own library? */
44 6c0209f6 2005-02-11 devnull /*
45 6c0209f6 2005-02-11 devnull * Logging
46 6c0209f6 2005-02-11 devnull */
47 6c0209f6 2005-02-11 devnull typedef struct VtLog VtLog;
48 6c0209f6 2005-02-11 devnull typedef struct VtLogChunk VtLogChunk;
49 97a5e5f2 2003-11-23 devnull
50 6c0209f6 2005-02-11 devnull struct VtLog
51 6c0209f6 2005-02-11 devnull {
52 79793adc 2011-06-13 rsc VtLog *next; /* in hash table */
53 79793adc 2011-06-13 rsc char *name;
54 6c0209f6 2005-02-11 devnull VtLogChunk *chunk;
55 79793adc 2011-06-13 rsc uint nchunk;
56 6c0209f6 2005-02-11 devnull VtLogChunk *w;
57 79793adc 2011-06-13 rsc QLock lk;
58 79793adc 2011-06-13 rsc int ref;
59 6c0209f6 2005-02-11 devnull };
60 6c0209f6 2005-02-11 devnull
61 587f8f4d 2005-02-13 devnull struct VtLogChunk
62 6c0209f6 2005-02-11 devnull {
63 79793adc 2011-06-13 rsc char *p;
64 79793adc 2011-06-13 rsc char *ep;
65 79793adc 2011-06-13 rsc char *wp;
66 6c0209f6 2005-02-11 devnull };
67 97a5e5f2 2003-11-23 devnull
68 79793adc 2011-06-13 rsc VtLog* vtlogopen(char *name, uint size);
69 6c0209f6 2005-02-11 devnull void vtlogprint(VtLog *log, char *fmt, ...);
70 6c0209f6 2005-02-11 devnull void vtlog(char *name, char *fmt, ...);
71 587f8f4d 2005-02-13 devnull void vtlogclose(VtLog*);
72 6c0209f6 2005-02-11 devnull void vtlogremove(char *name);
73 79793adc 2011-06-13 rsc char** vtlognames(int*);
74 587f8f4d 2005-02-13 devnull void vtlogdump(int fd, VtLog*);
75 6c0209f6 2005-02-11 devnull
76 6c0209f6 2005-02-11 devnull /* XXX begin actual venti.h */
77 6c0209f6 2005-02-11 devnull
78 97a5e5f2 2003-11-23 devnull typedef struct VtFcall VtFcall;
79 97a5e5f2 2003-11-23 devnull typedef struct VtConn VtConn;
80 97a5e5f2 2003-11-23 devnull typedef struct VtEntry VtEntry;
81 97a5e5f2 2003-11-23 devnull typedef struct VtRoot VtRoot;
82 97a5e5f2 2003-11-23 devnull
83 97a5e5f2 2003-11-23 devnull /*
84 97a5e5f2 2003-11-23 devnull * Fundamental constants.
85 97a5e5f2 2003-11-23 devnull */
86 97a5e5f2 2003-11-23 devnull enum
87 97a5e5f2 2003-11-23 devnull {
88 79793adc 2011-06-13 rsc VtScoreSize = 20,
89 97a5e5f2 2003-11-23 devnull VtMaxStringSize = 1024,
90 cbeb0b26 2006-04-01 devnull VtPointerDepth = 7
91 97a5e5f2 2003-11-23 devnull };
92 2db9e482 2003-11-24 devnull #define VtMaxFileSize ((1ULL<<48)-1)
93 97a5e5f2 2003-11-23 devnull
94 2db9e482 2003-11-24 devnull
95 97a5e5f2 2003-11-23 devnull /*
96 97a5e5f2 2003-11-23 devnull * Strings in packets.
97 97a5e5f2 2003-11-23 devnull */
98 97a5e5f2 2003-11-23 devnull int vtputstring(Packet*, char*);
99 97a5e5f2 2003-11-23 devnull int vtgetstring(Packet*, char**);
100 97a5e5f2 2003-11-23 devnull
101 97a5e5f2 2003-11-23 devnull /*
102 97a5e5f2 2003-11-23 devnull * Block types.
103 97a5e5f2 2003-11-23 devnull *
104 97a5e5f2 2003-11-23 devnull * The initial Venti protocol had a much
105 97a5e5f2 2003-11-23 devnull * less regular list of block types.
106 97a5e5f2 2003-11-23 devnull * VtToDiskType converts from new to old.
107 97a5e5f2 2003-11-23 devnull */
108 97a5e5f2 2003-11-23 devnull enum
109 97a5e5f2 2003-11-23 devnull {
110 97a5e5f2 2003-11-23 devnull VtDataType = 0<<3,
111 97a5e5f2 2003-11-23 devnull /* VtDataType+1, ... */
112 97a5e5f2 2003-11-23 devnull VtDirType = 1<<3,
113 97a5e5f2 2003-11-23 devnull /* VtDirType+1, ... */
114 97a5e5f2 2003-11-23 devnull VtRootType = 2<<3,
115 97a5e5f2 2003-11-23 devnull VtMaxType,
116 d3232caf 2004-06-14 devnull VtCorruptType = 0xFF,
117 97a5e5f2 2003-11-23 devnull
118 97a5e5f2 2003-11-23 devnull VtTypeDepthMask = 7,
119 cbeb0b26 2006-04-01 devnull VtTypeBaseMask = ~VtTypeDepthMask
120 97a5e5f2 2003-11-23 devnull };
121 97a5e5f2 2003-11-23 devnull
122 97a5e5f2 2003-11-23 devnull /* convert to/from on-disk type numbers */
123 97a5e5f2 2003-11-23 devnull uint vttodisktype(uint);
124 97a5e5f2 2003-11-23 devnull uint vtfromdisktype(uint);
125 97a5e5f2 2003-11-23 devnull
126 97a5e5f2 2003-11-23 devnull /*
127 97a5e5f2 2003-11-23 devnull * VtEntry describes a Venti stream
128 eacbfb24 2004-03-15 devnull *
129 eacbfb24 2004-03-15 devnull * The _ enums are only used on the wire.
130 eacbfb24 2004-03-15 devnull * They are not present in the VtEntry structure
131 eacbfb24 2004-03-15 devnull * and should not be used by client programs.
132 eacbfb24 2004-03-15 devnull * (The info is in the type field.)
133 97a5e5f2 2003-11-23 devnull */
134 97a5e5f2 2003-11-23 devnull enum
135 97a5e5f2 2003-11-23 devnull {
136 97a5e5f2 2003-11-23 devnull VtEntryActive = 1<<0, /* entry is in use */
137 d23a617a 2004-03-15 devnull _VtEntryDir = 1<<1, /* a directory */
138 d23a617a 2004-03-15 devnull _VtEntryDepthShift = 2, /* shift for pointer depth */
139 d23a617a 2004-03-15 devnull _VtEntryDepthMask = 7<<2, /* mask for pointer depth */
140 75d04888 2009-05-25 rsc VtEntryLocal = 1<<5, /* for local storage only */
141 75d04888 2009-05-25 rsc _VtEntryBig = 1<<6,
142 91b0ee08 2011-11-08 rsc VtEntryNoArchive = 1<<7, /* for local storage only */
143 97a5e5f2 2003-11-23 devnull };
144 97a5e5f2 2003-11-23 devnull enum
145 97a5e5f2 2003-11-23 devnull {
146 cbeb0b26 2006-04-01 devnull VtEntrySize = 40
147 97a5e5f2 2003-11-23 devnull };
148 97a5e5f2 2003-11-23 devnull struct VtEntry
149 97a5e5f2 2003-11-23 devnull {
150 79793adc 2011-06-13 rsc ulong gen; /* generation number */
151 79793adc 2011-06-13 rsc ulong psize; /* pointer block size */
152 79793adc 2011-06-13 rsc ulong dsize; /* data block size */
153 79793adc 2011-06-13 rsc uchar type;
154 79793adc 2011-06-13 rsc uchar flags;
155 79793adc 2011-06-13 rsc uvlong size;
156 79793adc 2011-06-13 rsc uchar score[VtScoreSize];
157 97a5e5f2 2003-11-23 devnull };
158 97a5e5f2 2003-11-23 devnull
159 97a5e5f2 2003-11-23 devnull void vtentrypack(VtEntry*, uchar*, int index);
160 97a5e5f2 2003-11-23 devnull int vtentryunpack(VtEntry*, uchar*, int index);
161 97a5e5f2 2003-11-23 devnull
162 97a5e5f2 2003-11-23 devnull struct VtRoot
163 97a5e5f2 2003-11-23 devnull {
164 79793adc 2011-06-13 rsc char name[128];
165 79793adc 2011-06-13 rsc char type[128];
166 79793adc 2011-06-13 rsc uchar score[VtScoreSize]; /* to a Dir block */
167 79793adc 2011-06-13 rsc ulong blocksize; /* maximum block size */
168 79793adc 2011-06-13 rsc uchar prev[VtScoreSize]; /* last root block */
169 97a5e5f2 2003-11-23 devnull };
170 97a5e5f2 2003-11-23 devnull
171 97a5e5f2 2003-11-23 devnull enum
172 97a5e5f2 2003-11-23 devnull {
173 97a5e5f2 2003-11-23 devnull VtRootSize = 300,
174 75d04888 2009-05-25 rsc VtRootVersion = 2,
175 75d04888 2009-05-25 rsc _VtRootVersionBig = 1<<15,
176 97a5e5f2 2003-11-23 devnull };
177 97a5e5f2 2003-11-23 devnull
178 97a5e5f2 2003-11-23 devnull void vtrootpack(VtRoot*, uchar*);
179 97a5e5f2 2003-11-23 devnull int vtrootunpack(VtRoot*, uchar*);
180 97a5e5f2 2003-11-23 devnull
181 97a5e5f2 2003-11-23 devnull /*
182 97a5e5f2 2003-11-23 devnull * score of zero length block
183 97a5e5f2 2003-11-23 devnull */
184 97a5e5f2 2003-11-23 devnull extern uchar vtzeroscore[VtScoreSize];
185 97a5e5f2 2003-11-23 devnull
186 97a5e5f2 2003-11-23 devnull /*
187 97a5e5f2 2003-11-23 devnull * zero extend and truncate blocks
188 97a5e5f2 2003-11-23 devnull */
189 97a5e5f2 2003-11-23 devnull void vtzeroextend(int type, uchar *buf, uint n, uint nn);
190 97a5e5f2 2003-11-23 devnull uint vtzerotruncate(int type, uchar *buf, uint n);
191 97a5e5f2 2003-11-23 devnull
192 97a5e5f2 2003-11-23 devnull /*
193 97a5e5f2 2003-11-23 devnull * parse score: mungs s
194 97a5e5f2 2003-11-23 devnull */
195 d23a617a 2004-03-15 devnull int vtparsescore(char *s, char **prefix, uchar[VtScoreSize]);
196 97a5e5f2 2003-11-23 devnull
197 97a5e5f2 2003-11-23 devnull /*
198 97a5e5f2 2003-11-23 devnull * formatting
199 97a5e5f2 2003-11-23 devnull * other than noted, these formats all ignore
200 97a5e5f2 2003-11-23 devnull * the width and precision arguments, and all flags
201 97a5e5f2 2003-11-23 devnull *
202 97a5e5f2 2003-11-23 devnull * V a venti score
203 97a5e5f2 2003-11-23 devnull */
204 97a5e5f2 2003-11-23 devnull
205 97a5e5f2 2003-11-23 devnull int vtscorefmt(Fmt*);
206 97a5e5f2 2003-11-23 devnull
207 97a5e5f2 2003-11-23 devnull /*
208 97a5e5f2 2003-11-23 devnull * error-checking malloc et al.
209 97a5e5f2 2003-11-23 devnull */
210 79793adc 2011-06-13 rsc void vtfree(void *);
211 79793adc 2011-06-13 rsc void* vtmalloc(int);
212 79793adc 2011-06-13 rsc void* vtmallocz(int);
213 79793adc 2011-06-13 rsc void* vtrealloc(void *p, int);
214 79793adc 2011-06-13 rsc void* vtbrk(int n);
215 79793adc 2011-06-13 rsc char* vtstrdup(char *);
216 97a5e5f2 2003-11-23 devnull
217 97a5e5f2 2003-11-23 devnull /*
218 97a5e5f2 2003-11-23 devnull * Venti protocol
219 97a5e5f2 2003-11-23 devnull */
220 97a5e5f2 2003-11-23 devnull
221 97a5e5f2 2003-11-23 devnull /*
222 97a5e5f2 2003-11-23 devnull * Crypto strengths
223 97a5e5f2 2003-11-23 devnull */
224 97a5e5f2 2003-11-23 devnull enum
225 97a5e5f2 2003-11-23 devnull {
226 97a5e5f2 2003-11-23 devnull VtCryptoStrengthNone,
227 97a5e5f2 2003-11-23 devnull VtCryptoStrengthAuth,
228 97a5e5f2 2003-11-23 devnull VtCryptoStrengthWeak,
229 cbeb0b26 2006-04-01 devnull VtCryptoStrengthStrong
230 97a5e5f2 2003-11-23 devnull };
231 97a5e5f2 2003-11-23 devnull
232 97a5e5f2 2003-11-23 devnull /*
233 97a5e5f2 2003-11-23 devnull * Crypto suites
234 97a5e5f2 2003-11-23 devnull */
235 97a5e5f2 2003-11-23 devnull enum
236 97a5e5f2 2003-11-23 devnull {
237 97a5e5f2 2003-11-23 devnull VtCryptoNone,
238 97a5e5f2 2003-11-23 devnull VtCryptoSSL3,
239 97a5e5f2 2003-11-23 devnull VtCryptoTLS1,
240 cbeb0b26 2006-04-01 devnull VtCryptoMax
241 97a5e5f2 2003-11-23 devnull };
242 97a5e5f2 2003-11-23 devnull
243 97a5e5f2 2003-11-23 devnull /*
244 97a5e5f2 2003-11-23 devnull * Codecs
245 97a5e5f2 2003-11-23 devnull */
246 97a5e5f2 2003-11-23 devnull enum
247 97a5e5f2 2003-11-23 devnull {
248 97a5e5f2 2003-11-23 devnull VtCodecNone,
249 97a5e5f2 2003-11-23 devnull VtCodecDeflate,
250 97a5e5f2 2003-11-23 devnull VtCodecThwack,
251 97a5e5f2 2003-11-23 devnull VtCodecMax
252 97a5e5f2 2003-11-23 devnull };
253 97a5e5f2 2003-11-23 devnull
254 97a5e5f2 2003-11-23 devnull enum
255 97a5e5f2 2003-11-23 devnull {
256 97a5e5f2 2003-11-23 devnull VtRerror = 1,
257 97a5e5f2 2003-11-23 devnull VtTping = 2,
258 97a5e5f2 2003-11-23 devnull VtRping,
259 97a5e5f2 2003-11-23 devnull VtThello = 4,
260 97a5e5f2 2003-11-23 devnull VtRhello,
261 97a5e5f2 2003-11-23 devnull VtTgoodbye = 6,
262 97a5e5f2 2003-11-23 devnull VtRgoodbye, /* not used */
263 97a5e5f2 2003-11-23 devnull VtTauth0 = 8,
264 97a5e5f2 2003-11-23 devnull VtRauth0,
265 97a5e5f2 2003-11-23 devnull VtTauth1 = 10,
266 97a5e5f2 2003-11-23 devnull VtRauth1,
267 97a5e5f2 2003-11-23 devnull VtTread = 12,
268 97a5e5f2 2003-11-23 devnull VtRread,
269 97a5e5f2 2003-11-23 devnull VtTwrite = 14,
270 97a5e5f2 2003-11-23 devnull VtRwrite,
271 97a5e5f2 2003-11-23 devnull VtTsync = 16,
272 97a5e5f2 2003-11-23 devnull VtRsync,
273 97a5e5f2 2003-11-23 devnull
274 97a5e5f2 2003-11-23 devnull VtTmax
275 97a5e5f2 2003-11-23 devnull };
276 97a5e5f2 2003-11-23 devnull
277 97a5e5f2 2003-11-23 devnull struct VtFcall
278 97a5e5f2 2003-11-23 devnull {
279 7e6f40b2 2005-07-13 devnull uchar msgtype;
280 97a5e5f2 2003-11-23 devnull uchar tag;
281 97a5e5f2 2003-11-23 devnull
282 79793adc 2011-06-13 rsc char *error; /* Rerror */
283 97a5e5f2 2003-11-23 devnull
284 97a5e5f2 2003-11-23 devnull char *version; /* Thello */
285 97a5e5f2 2003-11-23 devnull char *uid; /* Thello */
286 97a5e5f2 2003-11-23 devnull uchar strength; /* Thello */
287 97a5e5f2 2003-11-23 devnull uchar *crypto; /* Thello */
288 97a5e5f2 2003-11-23 devnull uint ncrypto; /* Thello */
289 97a5e5f2 2003-11-23 devnull uchar *codec; /* Thello */
290 97a5e5f2 2003-11-23 devnull uint ncodec; /* Thello */
291 97a5e5f2 2003-11-23 devnull char *sid; /* Rhello */
292 97a5e5f2 2003-11-23 devnull uchar rcrypto; /* Rhello */
293 97a5e5f2 2003-11-23 devnull uchar rcodec; /* Rhello */
294 97a5e5f2 2003-11-23 devnull uchar *auth; /* TauthX, RauthX */
295 97a5e5f2 2003-11-23 devnull uint nauth; /* TauthX, RauthX */
296 97a5e5f2 2003-11-23 devnull uchar score[VtScoreSize]; /* Tread, Rwrite */
297 79793adc 2011-06-13 rsc uchar blocktype; /* Tread, Twrite */
298 33b446b8 2009-05-25 rsc uint count; /* Tread */
299 97a5e5f2 2003-11-23 devnull Packet *data; /* Rread, Twrite */
300 97a5e5f2 2003-11-23 devnull };
301 97a5e5f2 2003-11-23 devnull
302 79793adc 2011-06-13 rsc Packet* vtfcallpack(VtFcall*);
303 79793adc 2011-06-13 rsc int vtfcallunpack(VtFcall*, Packet*);
304 79793adc 2011-06-13 rsc void vtfcallclear(VtFcall*);
305 79793adc 2011-06-13 rsc int vtfcallfmt(Fmt*);
306 97a5e5f2 2003-11-23 devnull
307 97a5e5f2 2003-11-23 devnull enum
308 97a5e5f2 2003-11-23 devnull {
309 97a5e5f2 2003-11-23 devnull VtStateAlloc,
310 97a5e5f2 2003-11-23 devnull VtStateConnected,
311 cbeb0b26 2006-04-01 devnull VtStateClosed
312 97a5e5f2 2003-11-23 devnull };
313 97a5e5f2 2003-11-23 devnull
314 97a5e5f2 2003-11-23 devnull struct VtConn
315 97a5e5f2 2003-11-23 devnull {
316 97a5e5f2 2003-11-23 devnull QLock lk;
317 97a5e5f2 2003-11-23 devnull QLock inlk;
318 97a5e5f2 2003-11-23 devnull QLock outlk;
319 97a5e5f2 2003-11-23 devnull int debug;
320 97a5e5f2 2003-11-23 devnull int infd;
321 97a5e5f2 2003-11-23 devnull int outfd;
322 97a5e5f2 2003-11-23 devnull int muxer;
323 97a5e5f2 2003-11-23 devnull void *writeq;
324 97a5e5f2 2003-11-23 devnull void *readq;
325 97a5e5f2 2003-11-23 devnull int state;
326 79793adc 2011-06-13 rsc void *wait[256];
327 97a5e5f2 2003-11-23 devnull uint ntag;
328 97a5e5f2 2003-11-23 devnull uint nsleep;
329 97a5e5f2 2003-11-23 devnull Packet *part;
330 97a5e5f2 2003-11-23 devnull Rendez tagrend;
331 97a5e5f2 2003-11-23 devnull Rendez rpcfork;
332 97a5e5f2 2003-11-23 devnull char *version;
333 97a5e5f2 2003-11-23 devnull char *uid;
334 79793adc 2011-06-13 rsc char *sid;
335 79793adc 2011-06-13 rsc char addr[256]; /* address of other side */
336 97a5e5f2 2003-11-23 devnull };
337 97a5e5f2 2003-11-23 devnull
338 79793adc 2011-06-13 rsc VtConn* vtconn(int infd, int outfd);
339 4544da52 2011-11-08 rsc int vtreconn(VtConn*, int, int);
340 79793adc 2011-06-13 rsc VtConn* vtdial(char*);
341 4544da52 2011-11-08 rsc int vtredial(VtConn*, char *);
342 79793adc 2011-06-13 rsc void vtfreeconn(VtConn*);
343 79793adc 2011-06-13 rsc int vtsend(VtConn*, Packet*);
344 79793adc 2011-06-13 rsc Packet* vtrecv(VtConn*);
345 79793adc 2011-06-13 rsc int vtversion(VtConn* z);
346 79793adc 2011-06-13 rsc void vtdebug(VtConn* z, char*, ...);
347 79793adc 2011-06-13 rsc void vthangup(VtConn* z);
348 79793adc 2011-06-13 rsc int vtgoodbye(VtConn* z);
349 6fc7da3c 2006-10-19 devnull
350 97a5e5f2 2003-11-23 devnull /* #pragma varargck argpos vtdebug 2 */
351 97a5e5f2 2003-11-23 devnull
352 97a5e5f2 2003-11-23 devnull /* server */
353 97a5e5f2 2003-11-23 devnull typedef struct VtSrv VtSrv;
354 97a5e5f2 2003-11-23 devnull typedef struct VtReq VtReq;
355 97a5e5f2 2003-11-23 devnull struct VtReq
356 97a5e5f2 2003-11-23 devnull {
357 79793adc 2011-06-13 rsc VtFcall tx;
358 79793adc 2011-06-13 rsc VtFcall rx;
359 97a5e5f2 2003-11-23 devnull /* private */
360 79793adc 2011-06-13 rsc VtSrv *srv;
361 79793adc 2011-06-13 rsc void *sc;
362 79793adc 2011-06-13 rsc };
363 97a5e5f2 2003-11-23 devnull
364 79793adc 2011-06-13 rsc int vtsrvhello(VtConn*);
365 79793adc 2011-06-13 rsc VtSrv* vtlisten(char *addr);
366 79793adc 2011-06-13 rsc VtReq* vtgetreq(VtSrv*);
367 79793adc 2011-06-13 rsc void vtrespond(VtReq*);
368 79793adc 2011-06-13 rsc
369 97a5e5f2 2003-11-23 devnull /* client */
370 79793adc 2011-06-13 rsc Packet* vtrpc(VtConn*, Packet*);
371 79793adc 2011-06-13 rsc Packet* _vtrpc(VtConn*, Packet*, VtFcall*);
372 79793adc 2011-06-13 rsc void vtrecvproc(void*); /* VtConn */
373 79793adc 2011-06-13 rsc void vtsendproc(void*); /* VtConn */
374 97a5e5f2 2003-11-23 devnull
375 79793adc 2011-06-13 rsc int vtconnect(VtConn*);
376 79793adc 2011-06-13 rsc int vthello(VtConn*);
377 79793adc 2011-06-13 rsc int vtread(VtConn*, uchar score[VtScoreSize], uint type, uchar *buf, int n);
378 79793adc 2011-06-13 rsc int vtwrite(VtConn*, uchar score[VtScoreSize], uint type, uchar *buf, int n);
379 79793adc 2011-06-13 rsc Packet* vtreadpacket(VtConn*, uchar score[VtScoreSize], uint type, int n);
380 79793adc 2011-06-13 rsc int vtwritepacket(VtConn*, uchar score[VtScoreSize], uint type, Packet *p);
381 79793adc 2011-06-13 rsc int vtsync(VtConn*);
382 79793adc 2011-06-13 rsc int vtping(VtConn*);
383 83b247a7 2012-01-21 0intro
384 83b247a7 2012-01-21 0intro /* sha1 */
385 83b247a7 2012-01-21 0intro void vtsha1(uchar score[VtScoreSize], uchar*, int);
386 83b247a7 2012-01-21 0intro int vtsha1check(uchar score[VtScoreSize], uchar*, int);
387 97a5e5f2 2003-11-23 devnull
388 97a5e5f2 2003-11-23 devnull /*
389 97a5e5f2 2003-11-23 devnull * Data blocks and block cache.
390 97a5e5f2 2003-11-23 devnull */
391 97a5e5f2 2003-11-23 devnull enum
392 97a5e5f2 2003-11-23 devnull {
393 cbeb0b26 2006-04-01 devnull NilBlock = ~0
394 97a5e5f2 2003-11-23 devnull };
395 97a5e5f2 2003-11-23 devnull
396 97a5e5f2 2003-11-23 devnull typedef struct VtBlock VtBlock;
397 97a5e5f2 2003-11-23 devnull typedef struct VtCache VtCache;
398 97a5e5f2 2003-11-23 devnull
399 97a5e5f2 2003-11-23 devnull struct VtBlock
400 97a5e5f2 2003-11-23 devnull {
401 97a5e5f2 2003-11-23 devnull VtCache *c;
402 97a5e5f2 2003-11-23 devnull QLock lk;
403 97a5e5f2 2003-11-23 devnull
404 97a5e5f2 2003-11-23 devnull uchar *data;
405 97a5e5f2 2003-11-23 devnull uchar score[VtScoreSize];
406 75d04888 2009-05-25 rsc uchar type; /* VtXXX */
407 75d04888 2009-05-25 rsc ulong size;
408 97a5e5f2 2003-11-23 devnull
409 97a5e5f2 2003-11-23 devnull /* internal to cache */
410 79793adc 2011-06-13 rsc int nlock;
411 79793adc 2011-06-13 rsc int iostate;
412 79793adc 2011-06-13 rsc int ref;
413 97a5e5f2 2003-11-23 devnull u32int heap;
414 97a5e5f2 2003-11-23 devnull VtBlock *next;
415 97a5e5f2 2003-11-23 devnull VtBlock **prev;
416 97a5e5f2 2003-11-23 devnull u32int used;
417 97a5e5f2 2003-11-23 devnull u32int used2;
418 97a5e5f2 2003-11-23 devnull u32int addr;
419 6fc7da3c 2006-10-19 devnull uintptr pc;
420 97a5e5f2 2003-11-23 devnull };
421 97a5e5f2 2003-11-23 devnull
422 79793adc 2011-06-13 rsc u32int vtglobaltolocal(uchar[VtScoreSize]);
423 79793adc 2011-06-13 rsc void vtlocaltoglobal(u32int, uchar[VtScoreSize]);
424 97a5e5f2 2003-11-23 devnull
425 79793adc 2011-06-13 rsc VtCache*vtcachealloc(VtConn*, ulong maxmem);
426 79793adc 2011-06-13 rsc void vtcachefree(VtCache*);
427 79793adc 2011-06-13 rsc VtBlock*vtcachelocal(VtCache*, u32int addr, int type);
428 79793adc 2011-06-13 rsc VtBlock*vtcacheglobal(VtCache*, uchar[VtScoreSize], int type, ulong size);
429 79793adc 2011-06-13 rsc VtBlock*vtcacheallocblock(VtCache*, int type, ulong size);
430 79793adc 2011-06-13 rsc void vtcachesetwrite(VtCache*,
431 79793adc 2011-06-13 rsc int(*)(VtConn*, uchar[VtScoreSize], uint, uchar*, int));
432 79793adc 2011-06-13 rsc void vtblockput(VtBlock*);
433 79793adc 2011-06-13 rsc int vtblockwrite(VtBlock*);
434 79793adc 2011-06-13 rsc VtBlock*vtblockcopy(VtBlock*);
435 79793adc 2011-06-13 rsc void vtblockduplock(VtBlock*);
436 97a5e5f2 2003-11-23 devnull
437 7252036f 2005-11-02 devnull extern int vtcachencopy, vtcachenread, vtcachenwrite;
438 11b0772a 2006-05-05 devnull extern int vttracelevel;
439 7252036f 2005-11-02 devnull
440 97a5e5f2 2003-11-23 devnull /*
441 97a5e5f2 2003-11-23 devnull * Hash tree file tree.
442 97a5e5f2 2003-11-23 devnull */
443 97a5e5f2 2003-11-23 devnull typedef struct VtFile VtFile;
444 d23a617a 2004-03-15 devnull struct VtFile
445 d23a617a 2004-03-15 devnull {
446 79793adc 2011-06-13 rsc QLock lk;
447 79793adc 2011-06-13 rsc int ref;
448 79793adc 2011-06-13 rsc int local;
449 79793adc 2011-06-13 rsc VtBlock *b; /* block containing this file */
450 79793adc 2011-06-13 rsc uchar score[VtScoreSize]; /* score of block containing this file */
451 79793adc 2011-06-13 rsc int bsize; /* size of block */
452 97a5e5f2 2003-11-23 devnull
453 d23a617a 2004-03-15 devnull /* immutable */
454 79793adc 2011-06-13 rsc VtCache *c;
455 79793adc 2011-06-13 rsc int mode;
456 79793adc 2011-06-13 rsc u32int gen;
457 79793adc 2011-06-13 rsc int dsize;
458 79793adc 2011-06-13 rsc int psize;
459 79793adc 2011-06-13 rsc int dir;
460 79793adc 2011-06-13 rsc VtFile *parent;
461 79793adc 2011-06-13 rsc int epb; /* entries per block in parent */
462 79793adc 2011-06-13 rsc u32int offset; /* entry offset in parent */
463 d23a617a 2004-03-15 devnull };
464 d23a617a 2004-03-15 devnull
465 97a5e5f2 2003-11-23 devnull enum
466 97a5e5f2 2003-11-23 devnull {
467 97a5e5f2 2003-11-23 devnull VtOREAD,
468 97a5e5f2 2003-11-23 devnull VtOWRITE,
469 cbeb0b26 2006-04-01 devnull VtORDWR
470 97a5e5f2 2003-11-23 devnull };
471 97a5e5f2 2003-11-23 devnull
472 79793adc 2011-06-13 rsc VtBlock*vtfileblock(VtFile*, u32int, int mode);
473 79793adc 2011-06-13 rsc int vtfileblockscore(VtFile*, u32int, uchar[VtScoreSize]);
474 79793adc 2011-06-13 rsc void vtfileclose(VtFile*);
475 79793adc 2011-06-13 rsc VtFile* _vtfilecreate(VtFile*, int offset, int psize, int dsize, int dir);
476 79793adc 2011-06-13 rsc VtFile* vtfilecreate(VtFile*, int psize, int dsize, int dir);
477 79793adc 2011-06-13 rsc VtFile* vtfilecreateroot(VtCache*, int psize, int dsize, int type);
478 79793adc 2011-06-13 rsc int vtfileflush(VtFile*);
479 79793adc 2011-06-13 rsc int vtfileflushbefore(VtFile*, u64int);
480 79793adc 2011-06-13 rsc u32int vtfilegetdirsize(VtFile*);
481 79793adc 2011-06-13 rsc int vtfilegetentry(VtFile*, VtEntry*);
482 79793adc 2011-06-13 rsc uvlong vtfilegetsize(VtFile*);
483 79793adc 2011-06-13 rsc void vtfileincref(VtFile*);
484 79793adc 2011-06-13 rsc int vtfilelock2(VtFile*, VtFile*, int);
485 79793adc 2011-06-13 rsc int vtfilelock(VtFile*, int);
486 79793adc 2011-06-13 rsc VtFile* vtfileopen(VtFile*, u32int, int);
487 79793adc 2011-06-13 rsc VtFile* vtfileopenroot(VtCache*, VtEntry*);
488 79793adc 2011-06-13 rsc long vtfileread(VtFile*, void*, long, vlong);
489 79793adc 2011-06-13 rsc int vtfileremove(VtFile*);
490 79793adc 2011-06-13 rsc int vtfilesetdirsize(VtFile*, u32int);
491 79793adc 2011-06-13 rsc int vtfilesetentry(VtFile*, VtEntry*);
492 79793adc 2011-06-13 rsc int vtfilesetsize(VtFile*, u64int);
493 79793adc 2011-06-13 rsc int vtfiletruncate(VtFile*);
494 97a5e5f2 2003-11-23 devnull void vtfileunlock(VtFile*);
495 79793adc 2011-06-13 rsc long vtfilewrite(VtFile*, void*, long, vlong);
496 d20564a9 2006-07-18 devnull
497 79793adc 2011-06-13 rsc int vttimefmt(Fmt*);
498 97a5e5f2 2003-11-23 devnull
499 a09e80f9 2004-05-23 devnull extern int chattyventi;
500 a09e80f9 2004-05-23 devnull extern int ventidoublechecksha1;
501 5810cad0 2005-02-15 devnull extern int ventilogging;
502 a09e80f9 2004-05-23 devnull
503 587f8f4d 2005-02-13 devnull extern char *VtServerLog;
504 587f8f4d 2005-02-13 devnull
505 819822c9 2004-06-16 devnull #ifdef __cplusplus
506 f7012583 2003-11-25 devnull }
507 f7012583 2003-11-25 devnull #endif
508 f7012583 2003-11-25 devnull #endif