Blame


1 97a5e5f2 2003-11-23 devnull /* XXX should be own library? */
2 97a5e5f2 2003-11-23 devnull /*
3 97a5e5f2 2003-11-23 devnull * Packets
4 97a5e5f2 2003-11-23 devnull */
5 97a5e5f2 2003-11-23 devnull enum
6 97a5e5f2 2003-11-23 devnull {
7 97a5e5f2 2003-11-23 devnull MaxFragSize = 9*1024,
8 97a5e5f2 2003-11-23 devnull };
9 97a5e5f2 2003-11-23 devnull
10 97a5e5f2 2003-11-23 devnull typedef struct Packet Packet;
11 97a5e5f2 2003-11-23 devnull Packet *packetalloc(void);
12 97a5e5f2 2003-11-23 devnull void packetfree(Packet*);
13 97a5e5f2 2003-11-23 devnull Packet *packetforeign(uchar *buf, int n, void (*free)(void *a), void *a);
14 97a5e5f2 2003-11-23 devnull Packet *packetdup(Packet*, int offset, int n);
15 97a5e5f2 2003-11-23 devnull Packet *packetsplit(Packet*, int n);
16 97a5e5f2 2003-11-23 devnull int packetconsume(Packet*, uchar *buf, int n);
17 97a5e5f2 2003-11-23 devnull int packettrim(Packet*, int offset, int n);
18 97a5e5f2 2003-11-23 devnull uchar *packetheader(Packet*, int n);
19 97a5e5f2 2003-11-23 devnull uchar *packettrailer(Packet*, int n);
20 97a5e5f2 2003-11-23 devnull int packetprefix(Packet*, uchar *buf, int n);
21 97a5e5f2 2003-11-23 devnull int packetappend(Packet*, uchar *buf, int n);
22 97a5e5f2 2003-11-23 devnull int packetconcat(Packet*, Packet*);
23 97a5e5f2 2003-11-23 devnull uchar *packetpeek(Packet*, uchar *buf, int offset, int n);
24 97a5e5f2 2003-11-23 devnull int packetcopy(Packet*, uchar *buf, int offset, int n);
25 97a5e5f2 2003-11-23 devnull int packetfragments(Packet*, IOchunk*, int nio, int offset);
26 97a5e5f2 2003-11-23 devnull uint packetsize(Packet*);
27 97a5e5f2 2003-11-23 devnull uint packetasize(Packet*);
28 97a5e5f2 2003-11-23 devnull int packetcompact(Packet*);
29 97a5e5f2 2003-11-23 devnull int packetcmp(Packet*, Packet*);
30 97a5e5f2 2003-11-23 devnull void packetstats(void);
31 97a5e5f2 2003-11-23 devnull void packetsha1(Packet*, uchar sha1[20]);
32 97a5e5f2 2003-11-23 devnull
33 97a5e5f2 2003-11-23 devnull /* XXX begin actual venti.h */
34 97a5e5f2 2003-11-23 devnull
35 97a5e5f2 2003-11-23 devnull /*
36 97a5e5f2 2003-11-23 devnull #pragma lib "libnventi.a"
37 97a5e5f2 2003-11-23 devnull #pragma src "/sys/src/libnventi"
38 97a5e5f2 2003-11-23 devnull */
39 97a5e5f2 2003-11-23 devnull
40 97a5e5f2 2003-11-23 devnull typedef struct VtFcall VtFcall;
41 97a5e5f2 2003-11-23 devnull typedef struct VtSha1 VtSha1;
42 97a5e5f2 2003-11-23 devnull typedef struct VtConn VtConn;
43 97a5e5f2 2003-11-23 devnull typedef struct VtEntry VtEntry;
44 97a5e5f2 2003-11-23 devnull typedef struct VtRoot VtRoot;
45 97a5e5f2 2003-11-23 devnull
46 97a5e5f2 2003-11-23 devnull /*
47 97a5e5f2 2003-11-23 devnull * Fundamental constants.
48 97a5e5f2 2003-11-23 devnull */
49 97a5e5f2 2003-11-23 devnull enum
50 97a5e5f2 2003-11-23 devnull {
51 97a5e5f2 2003-11-23 devnull VtScoreSize = 20,
52 97a5e5f2 2003-11-23 devnull VtMaxStringSize = 1024,
53 97a5e5f2 2003-11-23 devnull VtMaxLumpSize = 56*1024,
54 97a5e5f2 2003-11-23 devnull VtPointerDepth = 7,
55 97a5e5f2 2003-11-23 devnull };
56 2db9e482 2003-11-24 devnull #define VtMaxFileSize ((1ULL<<48)-1)
57 97a5e5f2 2003-11-23 devnull
58 2db9e482 2003-11-24 devnull
59 97a5e5f2 2003-11-23 devnull /*
60 97a5e5f2 2003-11-23 devnull * Strings in packets.
61 97a5e5f2 2003-11-23 devnull */
62 97a5e5f2 2003-11-23 devnull int vtputstring(Packet*, char*);
63 97a5e5f2 2003-11-23 devnull int vtgetstring(Packet*, char**);
64 97a5e5f2 2003-11-23 devnull
65 97a5e5f2 2003-11-23 devnull /*
66 97a5e5f2 2003-11-23 devnull * Block types.
67 97a5e5f2 2003-11-23 devnull *
68 97a5e5f2 2003-11-23 devnull * The initial Venti protocol had a much
69 97a5e5f2 2003-11-23 devnull * less regular list of block types.
70 97a5e5f2 2003-11-23 devnull * VtToDiskType converts from new to old.
71 97a5e5f2 2003-11-23 devnull */
72 97a5e5f2 2003-11-23 devnull enum
73 97a5e5f2 2003-11-23 devnull {
74 97a5e5f2 2003-11-23 devnull VtDataType = 0<<3,
75 97a5e5f2 2003-11-23 devnull /* VtDataType+1, ... */
76 97a5e5f2 2003-11-23 devnull VtDirType = 1<<3,
77 97a5e5f2 2003-11-23 devnull /* VtDirType+1, ... */
78 97a5e5f2 2003-11-23 devnull VtRootType = 2<<3,
79 97a5e5f2 2003-11-23 devnull VtCorruptType,
80 97a5e5f2 2003-11-23 devnull VtMaxType,
81 97a5e5f2 2003-11-23 devnull
82 97a5e5f2 2003-11-23 devnull VtTypeDepthMask = 7,
83 97a5e5f2 2003-11-23 devnull };
84 97a5e5f2 2003-11-23 devnull
85 97a5e5f2 2003-11-23 devnull /* convert to/from on-disk type numbers */
86 97a5e5f2 2003-11-23 devnull uint vttodisktype(uint);
87 97a5e5f2 2003-11-23 devnull uint vtfromdisktype(uint);
88 97a5e5f2 2003-11-23 devnull
89 97a5e5f2 2003-11-23 devnull /*
90 97a5e5f2 2003-11-23 devnull * VtEntry describes a Venti stream
91 97a5e5f2 2003-11-23 devnull */
92 97a5e5f2 2003-11-23 devnull enum
93 97a5e5f2 2003-11-23 devnull {
94 97a5e5f2 2003-11-23 devnull VtEntryActive = 1<<0, /* entry is in use */
95 97a5e5f2 2003-11-23 devnull VtEntryDir = 1<<1, /* a directory */
96 97a5e5f2 2003-11-23 devnull VtEntryDepthShift = 2, /* shift for pointer depth */
97 97a5e5f2 2003-11-23 devnull VtEntryDepthMask = 7<<2, /* mask for pointer depth */
98 97a5e5f2 2003-11-23 devnull VtEntryLocal = 1<<5, /* for local storage only */
99 97a5e5f2 2003-11-23 devnull };
100 97a5e5f2 2003-11-23 devnull enum
101 97a5e5f2 2003-11-23 devnull {
102 97a5e5f2 2003-11-23 devnull VtEntrySize = 40,
103 97a5e5f2 2003-11-23 devnull };
104 97a5e5f2 2003-11-23 devnull struct VtEntry
105 97a5e5f2 2003-11-23 devnull {
106 97a5e5f2 2003-11-23 devnull ulong gen; /* generation number */
107 97a5e5f2 2003-11-23 devnull ushort psize; /* pointer block size */
108 97a5e5f2 2003-11-23 devnull ushort dsize; /* data block size */
109 97a5e5f2 2003-11-23 devnull uchar type;
110 97a5e5f2 2003-11-23 devnull uchar flags;
111 97a5e5f2 2003-11-23 devnull uvlong size;
112 97a5e5f2 2003-11-23 devnull uchar score[VtScoreSize];
113 97a5e5f2 2003-11-23 devnull };
114 97a5e5f2 2003-11-23 devnull
115 97a5e5f2 2003-11-23 devnull void vtentrypack(VtEntry*, uchar*, int index);
116 97a5e5f2 2003-11-23 devnull int vtentryunpack(VtEntry*, uchar*, int index);
117 97a5e5f2 2003-11-23 devnull
118 97a5e5f2 2003-11-23 devnull struct VtRoot
119 97a5e5f2 2003-11-23 devnull {
120 97a5e5f2 2003-11-23 devnull char name[128];
121 97a5e5f2 2003-11-23 devnull char type[128];
122 97a5e5f2 2003-11-23 devnull uchar score[VtScoreSize]; /* to a Dir block */
123 97a5e5f2 2003-11-23 devnull ushort blocksize; /* maximum block size */
124 97a5e5f2 2003-11-23 devnull uchar prev[VtScoreSize]; /* last root block */
125 97a5e5f2 2003-11-23 devnull };
126 97a5e5f2 2003-11-23 devnull
127 97a5e5f2 2003-11-23 devnull enum
128 97a5e5f2 2003-11-23 devnull {
129 97a5e5f2 2003-11-23 devnull VtRootSize = 300,
130 97a5e5f2 2003-11-23 devnull VtRootVersion = 2,
131 97a5e5f2 2003-11-23 devnull };
132 97a5e5f2 2003-11-23 devnull
133 97a5e5f2 2003-11-23 devnull void vtrootpack(VtRoot*, uchar*);
134 97a5e5f2 2003-11-23 devnull int vtrootunpack(VtRoot*, uchar*);
135 97a5e5f2 2003-11-23 devnull
136 97a5e5f2 2003-11-23 devnull /*
137 97a5e5f2 2003-11-23 devnull * score of zero length block
138 97a5e5f2 2003-11-23 devnull */
139 97a5e5f2 2003-11-23 devnull extern uchar vtzeroscore[VtScoreSize];
140 97a5e5f2 2003-11-23 devnull
141 97a5e5f2 2003-11-23 devnull /*
142 97a5e5f2 2003-11-23 devnull * zero extend and truncate blocks
143 97a5e5f2 2003-11-23 devnull */
144 97a5e5f2 2003-11-23 devnull void vtzeroextend(int type, uchar *buf, uint n, uint nn);
145 97a5e5f2 2003-11-23 devnull uint vtzerotruncate(int type, uchar *buf, uint n);
146 97a5e5f2 2003-11-23 devnull
147 97a5e5f2 2003-11-23 devnull /*
148 97a5e5f2 2003-11-23 devnull * parse score: mungs s
149 97a5e5f2 2003-11-23 devnull */
150 97a5e5f2 2003-11-23 devnull int vtparsescore(char *s, uint len, char **prefix, uchar[VtScoreSize]);
151 97a5e5f2 2003-11-23 devnull
152 97a5e5f2 2003-11-23 devnull /*
153 97a5e5f2 2003-11-23 devnull * formatting
154 97a5e5f2 2003-11-23 devnull * other than noted, these formats all ignore
155 97a5e5f2 2003-11-23 devnull * the width and precision arguments, and all flags
156 97a5e5f2 2003-11-23 devnull *
157 97a5e5f2 2003-11-23 devnull * V a venti score
158 97a5e5f2 2003-11-23 devnull */
159 97a5e5f2 2003-11-23 devnull /* #pragma varargck type "V" uchar* */
160 97a5e5f2 2003-11-23 devnull
161 97a5e5f2 2003-11-23 devnull int vtscorefmt(Fmt*);
162 97a5e5f2 2003-11-23 devnull
163 97a5e5f2 2003-11-23 devnull /*
164 97a5e5f2 2003-11-23 devnull * error-checking malloc et al.
165 97a5e5f2 2003-11-23 devnull */
166 97a5e5f2 2003-11-23 devnull void vtfree(void *);
167 97a5e5f2 2003-11-23 devnull void *vtmalloc(int);
168 97a5e5f2 2003-11-23 devnull void *vtmallocz(int);
169 97a5e5f2 2003-11-23 devnull void *vtrealloc(void *p, int);
170 97a5e5f2 2003-11-23 devnull void *vtbrk(int n);
171 97a5e5f2 2003-11-23 devnull char *vtstrdup(char *);
172 97a5e5f2 2003-11-23 devnull
173 97a5e5f2 2003-11-23 devnull /*
174 97a5e5f2 2003-11-23 devnull * Venti protocol
175 97a5e5f2 2003-11-23 devnull */
176 97a5e5f2 2003-11-23 devnull
177 97a5e5f2 2003-11-23 devnull /*
178 97a5e5f2 2003-11-23 devnull * Crypto strengths
179 97a5e5f2 2003-11-23 devnull */
180 97a5e5f2 2003-11-23 devnull enum
181 97a5e5f2 2003-11-23 devnull {
182 97a5e5f2 2003-11-23 devnull VtCryptoStrengthNone,
183 97a5e5f2 2003-11-23 devnull VtCryptoStrengthAuth,
184 97a5e5f2 2003-11-23 devnull VtCryptoStrengthWeak,
185 97a5e5f2 2003-11-23 devnull VtCryptoStrengthStrong,
186 97a5e5f2 2003-11-23 devnull };
187 97a5e5f2 2003-11-23 devnull
188 97a5e5f2 2003-11-23 devnull /*
189 97a5e5f2 2003-11-23 devnull * Crypto suites
190 97a5e5f2 2003-11-23 devnull */
191 97a5e5f2 2003-11-23 devnull enum
192 97a5e5f2 2003-11-23 devnull {
193 97a5e5f2 2003-11-23 devnull VtCryptoNone,
194 97a5e5f2 2003-11-23 devnull VtCryptoSSL3,
195 97a5e5f2 2003-11-23 devnull VtCryptoTLS1,
196 97a5e5f2 2003-11-23 devnull VtCryptoMax,
197 97a5e5f2 2003-11-23 devnull };
198 97a5e5f2 2003-11-23 devnull
199 97a5e5f2 2003-11-23 devnull /*
200 97a5e5f2 2003-11-23 devnull * Codecs
201 97a5e5f2 2003-11-23 devnull */
202 97a5e5f2 2003-11-23 devnull enum
203 97a5e5f2 2003-11-23 devnull {
204 97a5e5f2 2003-11-23 devnull VtCodecNone,
205 97a5e5f2 2003-11-23 devnull VtCodecDeflate,
206 97a5e5f2 2003-11-23 devnull VtCodecThwack,
207 97a5e5f2 2003-11-23 devnull VtCodecMax
208 97a5e5f2 2003-11-23 devnull };
209 97a5e5f2 2003-11-23 devnull
210 97a5e5f2 2003-11-23 devnull enum
211 97a5e5f2 2003-11-23 devnull {
212 97a5e5f2 2003-11-23 devnull VtRerror = 1,
213 97a5e5f2 2003-11-23 devnull VtTping = 2,
214 97a5e5f2 2003-11-23 devnull VtRping,
215 97a5e5f2 2003-11-23 devnull VtThello = 4,
216 97a5e5f2 2003-11-23 devnull VtRhello,
217 97a5e5f2 2003-11-23 devnull VtTgoodbye = 6,
218 97a5e5f2 2003-11-23 devnull VtRgoodbye, /* not used */
219 97a5e5f2 2003-11-23 devnull VtTauth0 = 8,
220 97a5e5f2 2003-11-23 devnull VtRauth0,
221 97a5e5f2 2003-11-23 devnull VtTauth1 = 10,
222 97a5e5f2 2003-11-23 devnull VtRauth1,
223 97a5e5f2 2003-11-23 devnull VtTread = 12,
224 97a5e5f2 2003-11-23 devnull VtRread,
225 97a5e5f2 2003-11-23 devnull VtTwrite = 14,
226 97a5e5f2 2003-11-23 devnull VtRwrite,
227 97a5e5f2 2003-11-23 devnull VtTsync = 16,
228 97a5e5f2 2003-11-23 devnull VtRsync,
229 97a5e5f2 2003-11-23 devnull
230 97a5e5f2 2003-11-23 devnull VtTmax
231 97a5e5f2 2003-11-23 devnull };
232 97a5e5f2 2003-11-23 devnull
233 97a5e5f2 2003-11-23 devnull struct VtFcall
234 97a5e5f2 2003-11-23 devnull {
235 97a5e5f2 2003-11-23 devnull uchar type;
236 97a5e5f2 2003-11-23 devnull uchar tag;
237 97a5e5f2 2003-11-23 devnull
238 97a5e5f2 2003-11-23 devnull char *error; /* Rerror */
239 97a5e5f2 2003-11-23 devnull
240 97a5e5f2 2003-11-23 devnull char *version; /* Thello */
241 97a5e5f2 2003-11-23 devnull char *uid; /* Thello */
242 97a5e5f2 2003-11-23 devnull uchar strength; /* Thello */
243 97a5e5f2 2003-11-23 devnull uchar *crypto; /* Thello */
244 97a5e5f2 2003-11-23 devnull uint ncrypto; /* Thello */
245 97a5e5f2 2003-11-23 devnull uchar *codec; /* Thello */
246 97a5e5f2 2003-11-23 devnull uint ncodec; /* Thello */
247 97a5e5f2 2003-11-23 devnull char *sid; /* Rhello */
248 97a5e5f2 2003-11-23 devnull uchar rcrypto; /* Rhello */
249 97a5e5f2 2003-11-23 devnull uchar rcodec; /* Rhello */
250 97a5e5f2 2003-11-23 devnull uchar *auth; /* TauthX, RauthX */
251 97a5e5f2 2003-11-23 devnull uint nauth; /* TauthX, RauthX */
252 97a5e5f2 2003-11-23 devnull uchar score[VtScoreSize]; /* Tread, Rwrite */
253 97a5e5f2 2003-11-23 devnull uchar dtype; /* Tread, Twrite */
254 97a5e5f2 2003-11-23 devnull ushort count; /* Tread */
255 97a5e5f2 2003-11-23 devnull Packet *data; /* Rread, Twrite */
256 97a5e5f2 2003-11-23 devnull };
257 97a5e5f2 2003-11-23 devnull
258 97a5e5f2 2003-11-23 devnull Packet *vtfcallpack(VtFcall*);
259 97a5e5f2 2003-11-23 devnull int vtfcallunpack(VtFcall*, Packet*);
260 97a5e5f2 2003-11-23 devnull void vtfcallclear(VtFcall*);
261 97a5e5f2 2003-11-23 devnull int vtfcallfmt(Fmt*);
262 97a5e5f2 2003-11-23 devnull
263 97a5e5f2 2003-11-23 devnull enum
264 97a5e5f2 2003-11-23 devnull {
265 97a5e5f2 2003-11-23 devnull VtStateAlloc,
266 97a5e5f2 2003-11-23 devnull VtStateConnected,
267 97a5e5f2 2003-11-23 devnull VtStateClosed,
268 97a5e5f2 2003-11-23 devnull };
269 97a5e5f2 2003-11-23 devnull
270 97a5e5f2 2003-11-23 devnull struct VtConn
271 97a5e5f2 2003-11-23 devnull {
272 97a5e5f2 2003-11-23 devnull QLock lk;
273 97a5e5f2 2003-11-23 devnull QLock inlk;
274 97a5e5f2 2003-11-23 devnull QLock outlk;
275 97a5e5f2 2003-11-23 devnull int debug;
276 97a5e5f2 2003-11-23 devnull int infd;
277 97a5e5f2 2003-11-23 devnull int outfd;
278 97a5e5f2 2003-11-23 devnull int muxer;
279 97a5e5f2 2003-11-23 devnull void *writeq;
280 97a5e5f2 2003-11-23 devnull void *readq;
281 97a5e5f2 2003-11-23 devnull int state;
282 97a5e5f2 2003-11-23 devnull void *wait[256];
283 97a5e5f2 2003-11-23 devnull uint ntag;
284 97a5e5f2 2003-11-23 devnull uint nsleep;
285 97a5e5f2 2003-11-23 devnull Packet *part;
286 97a5e5f2 2003-11-23 devnull Rendez tagrend;
287 97a5e5f2 2003-11-23 devnull Rendez rpcfork;
288 97a5e5f2 2003-11-23 devnull char *version;
289 97a5e5f2 2003-11-23 devnull char *uid;
290 97a5e5f2 2003-11-23 devnull char *sid;
291 97a5e5f2 2003-11-23 devnull };
292 97a5e5f2 2003-11-23 devnull
293 97a5e5f2 2003-11-23 devnull VtConn *vtconn(int infd, int outfd);
294 97a5e5f2 2003-11-23 devnull VtConn *vtdial(char*);
295 97a5e5f2 2003-11-23 devnull void vtfreeconn(VtConn*);
296 97a5e5f2 2003-11-23 devnull int vtsend(VtConn*, Packet*);
297 97a5e5f2 2003-11-23 devnull Packet *vtrecv(VtConn*);
298 97a5e5f2 2003-11-23 devnull int vtversion(VtConn *z);
299 97a5e5f2 2003-11-23 devnull void vtdebug(VtConn *z, char*, ...);
300 97a5e5f2 2003-11-23 devnull void vthangup(VtConn *z);
301 97a5e5f2 2003-11-23 devnull /* #pragma varargck argpos vtdebug 2 */
302 97a5e5f2 2003-11-23 devnull
303 97a5e5f2 2003-11-23 devnull /* server */
304 97a5e5f2 2003-11-23 devnull typedef struct VtSrv VtSrv;
305 97a5e5f2 2003-11-23 devnull typedef struct VtReq VtReq;
306 97a5e5f2 2003-11-23 devnull struct VtReq
307 97a5e5f2 2003-11-23 devnull {
308 97a5e5f2 2003-11-23 devnull VtFcall tx;
309 97a5e5f2 2003-11-23 devnull VtFcall rx;
310 97a5e5f2 2003-11-23 devnull /* private */
311 97a5e5f2 2003-11-23 devnull VtSrv *srv;
312 97a5e5f2 2003-11-23 devnull void *sc;
313 97a5e5f2 2003-11-23 devnull };
314 97a5e5f2 2003-11-23 devnull
315 97a5e5f2 2003-11-23 devnull int vtsrvhello(VtConn*);
316 97a5e5f2 2003-11-23 devnull VtSrv *vtlisten(char *addr);
317 97a5e5f2 2003-11-23 devnull VtReq *vtgetreq(VtSrv*);
318 97a5e5f2 2003-11-23 devnull void vtrespond(VtReq*);
319 97a5e5f2 2003-11-23 devnull
320 97a5e5f2 2003-11-23 devnull /* client */
321 97a5e5f2 2003-11-23 devnull Packet *vtrpc(VtConn*, Packet*);
322 97a5e5f2 2003-11-23 devnull void vtrecvproc(void*); /* VtConn* */
323 97a5e5f2 2003-11-23 devnull void vtsendproc(void*); /* VtConn* */
324 97a5e5f2 2003-11-23 devnull
325 97a5e5f2 2003-11-23 devnull int vtconnect(VtConn*);
326 97a5e5f2 2003-11-23 devnull int vthello(VtConn*);
327 97a5e5f2 2003-11-23 devnull int vtread(VtConn*, uchar score[VtScoreSize], uint type, uchar *buf, int n);
328 97a5e5f2 2003-11-23 devnull int vtwrite(VtConn*, uchar score[VtScoreSize], uint type, uchar *buf, int n);
329 97a5e5f2 2003-11-23 devnull Packet *vtreadpacket(VtConn*, uchar score[VtScoreSize], uint type, int n);
330 97a5e5f2 2003-11-23 devnull int vtwritepacket(VtConn*, uchar score[VtScoreSize], uint type, Packet *p);
331 97a5e5f2 2003-11-23 devnull int vtsync(VtConn*);
332 97a5e5f2 2003-11-23 devnull int vtping(VtConn*);
333 97a5e5f2 2003-11-23 devnull
334 97a5e5f2 2003-11-23 devnull /*
335 97a5e5f2 2003-11-23 devnull * Data blocks and block cache.
336 97a5e5f2 2003-11-23 devnull */
337 97a5e5f2 2003-11-23 devnull enum
338 97a5e5f2 2003-11-23 devnull {
339 97a5e5f2 2003-11-23 devnull NilBlock = ~0,
340 97a5e5f2 2003-11-23 devnull };
341 97a5e5f2 2003-11-23 devnull
342 97a5e5f2 2003-11-23 devnull typedef struct VtBlock VtBlock;
343 97a5e5f2 2003-11-23 devnull typedef struct VtCache VtCache;
344 97a5e5f2 2003-11-23 devnull
345 97a5e5f2 2003-11-23 devnull struct VtBlock
346 97a5e5f2 2003-11-23 devnull {
347 97a5e5f2 2003-11-23 devnull VtCache *c;
348 97a5e5f2 2003-11-23 devnull QLock lk;
349 97a5e5f2 2003-11-23 devnull
350 97a5e5f2 2003-11-23 devnull uchar *data;
351 97a5e5f2 2003-11-23 devnull uchar score[VtScoreSize];
352 97a5e5f2 2003-11-23 devnull uchar type; /* BtXXX */
353 97a5e5f2 2003-11-23 devnull
354 97a5e5f2 2003-11-23 devnull /* internal to cache */
355 97a5e5f2 2003-11-23 devnull int nlock;
356 97a5e5f2 2003-11-23 devnull int iostate;
357 97a5e5f2 2003-11-23 devnull int ref;
358 97a5e5f2 2003-11-23 devnull u32int heap;
359 97a5e5f2 2003-11-23 devnull VtBlock *next;
360 97a5e5f2 2003-11-23 devnull VtBlock **prev;
361 97a5e5f2 2003-11-23 devnull u32int used;
362 97a5e5f2 2003-11-23 devnull u32int used2;
363 97a5e5f2 2003-11-23 devnull u32int addr;
364 97a5e5f2 2003-11-23 devnull
365 97a5e5f2 2003-11-23 devnull /* internal to efile (HACK) */
366 97a5e5f2 2003-11-23 devnull int decrypted;
367 97a5e5f2 2003-11-23 devnull };
368 97a5e5f2 2003-11-23 devnull
369 97a5e5f2 2003-11-23 devnull u32int vtglobaltolocal(uchar[VtScoreSize]);
370 97a5e5f2 2003-11-23 devnull void vtlocaltoglobal(u32int, uchar[VtScoreSize]);
371 97a5e5f2 2003-11-23 devnull
372 97a5e5f2 2003-11-23 devnull VtCache *vtcachealloc(VtConn*, int blocksize, ulong nblocks, int mode);
373 97a5e5f2 2003-11-23 devnull void vtcachefree(VtCache*);
374 97a5e5f2 2003-11-23 devnull VtBlock *vtcachelocal(VtCache*, u32int addr, int type);
375 97a5e5f2 2003-11-23 devnull VtBlock *vtcacheglobal(VtCache*, uchar[VtScoreSize], int type);
376 97a5e5f2 2003-11-23 devnull VtBlock *vtcacheallocblock(VtCache*, int type);
377 97a5e5f2 2003-11-23 devnull void vtblockput(VtBlock*);
378 97a5e5f2 2003-11-23 devnull u32int vtcacheblocksize(VtCache*);
379 97a5e5f2 2003-11-23 devnull int vtblockwrite(VtBlock*);
380 97a5e5f2 2003-11-23 devnull VtBlock *vtblockcopy(VtBlock*);
381 97a5e5f2 2003-11-23 devnull void vtblockduplock(VtBlock*);
382 97a5e5f2 2003-11-23 devnull
383 97a5e5f2 2003-11-23 devnull /*
384 97a5e5f2 2003-11-23 devnull * Hash tree file tree.
385 97a5e5f2 2003-11-23 devnull */
386 97a5e5f2 2003-11-23 devnull typedef struct VtFile VtFile;
387 97a5e5f2 2003-11-23 devnull
388 97a5e5f2 2003-11-23 devnull enum
389 97a5e5f2 2003-11-23 devnull {
390 97a5e5f2 2003-11-23 devnull VtOREAD,
391 97a5e5f2 2003-11-23 devnull VtOWRITE,
392 97a5e5f2 2003-11-23 devnull VtORDWR,
393 97a5e5f2 2003-11-23 devnull VtOCREATE = 0x100,
394 97a5e5f2 2003-11-23 devnull };
395 97a5e5f2 2003-11-23 devnull
396 97a5e5f2 2003-11-23 devnull VtFile *vtfileopenroot(VtCache*, VtEntry*);
397 97a5e5f2 2003-11-23 devnull VtFile *vtfilecreateroot(VtCache*, int psize, int dsize, int type);
398 97a5e5f2 2003-11-23 devnull VtFile *vtfileopen(VtFile*, u32int, int);
399 97a5e5f2 2003-11-23 devnull VtFile *vtfilecreate(VtFile*, int psize, int dsize, int dir);
400 97a5e5f2 2003-11-23 devnull VtBlock *vtfileblock(VtFile*, u32int, int mode);
401 97a5e5f2 2003-11-23 devnull int vtfileblockhash(VtFile*, u32int, uchar[VtScoreSize]);
402 97a5e5f2 2003-11-23 devnull long vtfileread(VtFile*, void*, long, vlong);
403 97a5e5f2 2003-11-23 devnull long vtfilewrite(VtFile*, void*, long, vlong);
404 97a5e5f2 2003-11-23 devnull int vtfileflush(VtFile*);
405 97a5e5f2 2003-11-23 devnull void vtfileincref(VtFile*);
406 97a5e5f2 2003-11-23 devnull void vtfileclose(VtFile*);
407 97a5e5f2 2003-11-23 devnull int vtfilegetentry(VtFile*, VtEntry*);
408 97a5e5f2 2003-11-23 devnull int vtfileblockscore(VtFile*, u32int, uchar[VtScoreSize]);
409 97a5e5f2 2003-11-23 devnull u32int vtfilegetdirsize(VtFile*);
410 97a5e5f2 2003-11-23 devnull int vtfilesetdirsize(VtFile*, u32int);
411 97a5e5f2 2003-11-23 devnull void vtfileunlock(VtFile*);
412 97a5e5f2 2003-11-23 devnull int vtfilelock(VtFile*, int);
413 97a5e5f2 2003-11-23 devnull int vtfilelock2(VtFile*, VtFile*, int);
414 97a5e5f2 2003-11-23 devnull int vtfileflushbefore(VtFile*, u64int);
415 97a5e5f2 2003-11-23 devnull