1 be7cbb4e 2005-07-12 devnull .TH VENTI-FCALL 3
3 be7cbb4e 2005-07-12 devnull VtEntry, VtFcall, VtRoot,
4 be7cbb4e 2005-07-12 devnull vtentrypack,
5 be7cbb4e 2005-07-12 devnull vtentryunpack,
6 be7cbb4e 2005-07-12 devnull vtfcallclear,
7 be7cbb4e 2005-07-12 devnull vtfcallfmt,
8 be7cbb4e 2005-07-12 devnull vtfcallpack,
9 be7cbb4e 2005-07-12 devnull vtfcallunpack,
10 be7cbb4e 2005-07-12 devnull vtfromdisktype,
11 be7cbb4e 2005-07-12 devnull vttodisktype,
12 be7cbb4e 2005-07-12 devnull vtgetstring,
13 be7cbb4e 2005-07-12 devnull vtputstring,
14 be7cbb4e 2005-07-12 devnull vtrootpack,
15 be7cbb4e 2005-07-12 devnull vtrootunpack,
16 be7cbb4e 2005-07-12 devnull vtparsescore,
17 3aec33fe 2005-07-18 devnull vtscorefmt \- venti data formats
18 be7cbb4e 2005-07-12 devnull .SH SYNOPSIS
21 be7cbb4e 2005-07-12 devnull #include <u.h>
23 be7cbb4e 2005-07-12 devnull #include <libc.h>
25 be7cbb4e 2005-07-12 devnull #include <venti.h>
26 be7cbb4e 2005-07-12 devnull .ta +\w'\fLxxxx'u
32 be7cbb4e 2005-07-12 devnull VtEntrySize = 40,
33 be7cbb4e 2005-07-12 devnull VtRootSize = 300,
34 be7cbb4e 2005-07-12 devnull VtScoreSize = 20,
39 be7cbb4e 2005-07-12 devnull typedef struct VtEntry
41 3aec33fe 2005-07-18 devnull ulong gen; /* generation number */
42 3aec33fe 2005-07-18 devnull ushort psize; /* pointer block size */
43 3aec33fe 2005-07-18 devnull ushort dsize; /* data block size */
44 be7cbb4e 2005-07-12 devnull uchar type;
45 be7cbb4e 2005-07-12 devnull uchar flags;
46 be7cbb4e 2005-07-12 devnull uvlong size;
47 be7cbb4e 2005-07-12 devnull uchar score[VtScoreSize];
48 be7cbb4e 2005-07-12 devnull } VtEntry;
52 be7cbb4e 2005-07-12 devnull typedef struct VtRoot
54 be7cbb4e 2005-07-12 devnull char name[128];
55 be7cbb4e 2005-07-12 devnull char type[128];
56 3aec33fe 2005-07-18 devnull uchar score[VtScoreSize]; /* to a Dir block */
57 3aec33fe 2005-07-18 devnull ushort blocksize; /* maximum block size */
58 3aec33fe 2005-07-18 devnull uchar prev[VtScoreSize]; /* previous root block */
59 be7cbb4e 2005-07-12 devnull } VtRoot;
60 be7cbb4e 2005-07-12 devnull .ta +\w'\fLPacket* 'u
63 be7cbb4e 2005-07-12 devnull void vtentrypack(VtEntry *e, uchar *buf, int index)
66 be7cbb4e 2005-07-12 devnull int vtentryunpack(VtEntry *e, uchar *buf, int index)
69 be7cbb4e 2005-07-12 devnull Packet* vtfcallpack(VtFcall *f)
72 be7cbb4e 2005-07-12 devnull int vtfcallunpack(VtFcall *f, Packet *p)
75 be7cbb4e 2005-07-12 devnull void vtfcallclear(VtFcall *f)
78 be7cbb4e 2005-07-12 devnull uint vttodisktype(uint type)
81 be7cbb4e 2005-07-12 devnull uint vtfromdisktype(uint type)
84 be7cbb4e 2005-07-12 devnull int vtputstring(Packet *p, char *s)
87 be7cbb4e 2005-07-12 devnull int vtgetstring(Packet *p, char **s)
90 be7cbb4e 2005-07-12 devnull void vtrootpack(VtRoot *r, uchar *buf)
93 be7cbb4e 2005-07-12 devnull int vtrootunpack(VtRoot *r, uchar *buf)
96 be7cbb4e 2005-07-12 devnull int vtparsescore(char *s, char **prefix, uchar score[VtScoreSize])
99 be7cbb4e 2005-07-12 devnull int vtfcallfmt(Fmt *fmt)
101 be7cbb4e 2005-07-12 devnull int vtscorefmt(Fmt *fmt)
102 be7cbb4e 2005-07-12 devnull .SH DESCRIPTION
103 be7cbb4e 2005-07-12 devnull These routines convert between C representations of Venti
104 be7cbb4e 2005-07-12 devnull structures and serialized representations used on disk and
105 be7cbb4e 2005-07-12 devnull on the network.
107 be7cbb4e 2005-07-12 devnull .I Vtentrypack
108 be7cbb4e 2005-07-12 devnull converts a
109 be7cbb4e 2005-07-12 devnull .B VtEntry
110 be7cbb4e 2005-07-12 devnull structure describing a Venti file
112 3aec33fe 2005-07-18 devnull .IR venti (7))
113 be7cbb4e 2005-07-12 devnull into a 40-byte
114 be7cbb4e 2005-07-12 devnull .RB ( VtEntrySize )
115 be7cbb4e 2005-07-12 devnull structure at
116 be7cbb4e 2005-07-12 devnull .IB buf + index *40 \fR.
117 be7cbb4e 2005-07-12 devnull Vtentryunpack
118 be7cbb4e 2005-07-12 devnull does the reverse conversion.
120 be7cbb4e 2005-07-12 devnull .I Vtfcallpack
121 be7cbb4e 2005-07-12 devnull converts a
122 be7cbb4e 2005-07-12 devnull .B VtFcall
123 be7cbb4e 2005-07-12 devnull structure describing a Venti protocol message
125 be7cbb4e 2005-07-12 devnull .IR venti (7))
126 be7cbb4e 2005-07-12 devnull into a packet.
127 be7cbb4e 2005-07-12 devnull .I Vtfcallunpack
128 be7cbb4e 2005-07-12 devnull does the reverse conversion.
130 be7cbb4e 2005-07-12 devnull The fields in a
131 be7cbb4e 2005-07-12 devnull .B VtFcall
132 be7cbb4e 2005-07-12 devnull are named after the protocol fields described in
133 be7cbb4e 2005-07-12 devnull .IR venti (7),
134 be7cbb4e 2005-07-12 devnull except that the
136 be7cbb4e 2005-07-12 devnull field is renamed
137 be7cbb4e 2005-07-12 devnull .BR blocktype .
139 be7cbb4e 2005-07-12 devnull .B msgtype
140 be7cbb4e 2005-07-12 devnull field holds the one-byte message type:
141 be7cbb4e 2005-07-12 devnull .BR VtThello ,
142 be7cbb4e 2005-07-12 devnull .BR VtRhello ,
143 be7cbb4e 2005-07-12 devnull and so on.
145 be7cbb4e 2005-07-12 devnull .I Vtfcallclear
146 be7cbb4e 2005-07-12 devnull frees the strings
147 be7cbb4e 2005-07-12 devnull .IB f ->error \fR,
148 be7cbb4e 2005-07-12 devnull .IB f ->version \fR,
149 be7cbb4e 2005-07-12 devnull .IB f ->uid \fR,
150 be7cbb4e 2005-07-12 devnull .IB f ->sid \fR,
151 be7cbb4e 2005-07-12 devnull the buffers
152 3aec33fe 2005-07-18 devnull .IB f ->crypto
154 be7cbb4e 2005-07-12 devnull .IB f ->codec \fR,
155 be7cbb4e 2005-07-12 devnull and the packet
156 be7cbb4e 2005-07-12 devnull .IB f ->data \fR.
158 be7cbb4e 2005-07-12 devnull The block type enumeration defined in
159 be7cbb4e 2005-07-12 devnull .B <venti.h>
160 be7cbb4e 2005-07-12 devnull (presented in
161 3aec33fe 2005-07-18 devnull .IR venti (7))
162 be7cbb4e 2005-07-12 devnull differs from the one used on disk and in the network
163 be7cbb4e 2005-07-12 devnull protocol.
164 be7cbb4e 2005-07-12 devnull The disk and network representation uses different
165 3aec33fe 2005-07-18 devnull constants and does not distinguish between
166 be7cbb4e 2005-07-12 devnull .BI VtDataType+ n
168 be7cbb4e 2005-07-12 devnull .BI VtDirType+ n
170 be7cbb4e 2005-07-12 devnull .I Vttodisktype
171 be7cbb4e 2005-07-12 devnull converts a
172 be7cbb4e 2005-07-12 devnull .B <venti.h>
173 be7cbb4e 2005-07-12 devnull enumeration value to the disk value;
174 be7cbb4e 2005-07-12 devnull .I vtfromdisktype
175 3aec33fe 2005-07-18 devnull converts a disk value to the enumeration value,
176 3aec33fe 2005-07-18 devnull always using the
177 edf41df7 2005-07-24 devnull .B VtDirType
178 3aec33fe 2005-07-18 devnull pointers.
180 be7cbb4e 2005-07-12 devnull .B VtFcall
182 be7cbb4e 2005-07-12 devnull .B blocktype
183 be7cbb4e 2005-07-12 devnull is an enumeration value
184 be7cbb4e 2005-07-12 devnull .RI ( vtfcallpack
186 be7cbb4e 2005-07-12 devnull .I vtfcallunpack
187 be7cbb4e 2005-07-12 devnull convert to and from the disk values used in packets
188 be7cbb4e 2005-07-12 devnull automatically),
189 be7cbb4e 2005-07-12 devnull so most programs will not need to call these functions.
191 be7cbb4e 2005-07-12 devnull .I Vtputstring
192 be7cbb4e 2005-07-12 devnull appends the Venti protocol representation of the string
194 be7cbb4e 2005-07-12 devnull to the packet
196 be7cbb4e 2005-07-12 devnull .I Vtgetstring
197 be7cbb4e 2005-07-12 devnull reads a string from the packet, returning a pointer to a copy
198 be7cbb4e 2005-07-12 devnull of the string in
199 be7cbb4e 2005-07-12 devnull .BI * s \fR.
200 be7cbb4e 2005-07-12 devnull The copy must be freed by the caller.
201 be7cbb4e 2005-07-12 devnull These functions are used by
202 be7cbb4e 2005-07-12 devnull .I vtfcallpack
204 be7cbb4e 2005-07-12 devnull .IR vtfcallunpack ;
205 be7cbb4e 2005-07-12 devnull most programs will not need to call them directly.
207 be7cbb4e 2005-07-12 devnull .I Vtrootpack
208 be7cbb4e 2005-07-12 devnull converts a
209 be7cbb4e 2005-07-12 devnull .B VtRoot
210 be7cbb4e 2005-07-12 devnull structure describing a Venti file tree
211 be7cbb4e 2005-07-12 devnull into the 300-byte
212 be7cbb4e 2005-07-12 devnull .RB ( VtRootSize )
213 be7cbb4e 2005-07-12 devnull buffer pointed to by
214 be7cbb4e 2005-07-12 devnull .IR buf .
215 be7cbb4e 2005-07-12 devnull .I Vtrootunpack does the reverse conversion.
217 be7cbb4e 2005-07-12 devnull .I Vtparsescore
218 be7cbb4e 2005-07-12 devnull parses the 40-digit hexadecimal string
220 be7cbb4e 2005-07-12 devnull writing its value
222 be7cbb4e 2005-07-12 devnull .IR score .
223 be7cbb4e 2005-07-12 devnull If the hexadecimal string is prefixed with
224 be7cbb4e 2005-07-12 devnull a text label followed by a colon, a copy of that
225 be7cbb4e 2005-07-12 devnull label is returned in
226 be7cbb4e 2005-07-12 devnull .BI * prefix \fR.
228 be7cbb4e 2005-07-12 devnull .I prefix
229 be7cbb4e 2005-07-12 devnull is nil, the label is ignored.
231 be7cbb4e 2005-07-12 devnull .I Vtfcallfmt
233 be7cbb4e 2005-07-12 devnull .I vtscorefmt
235 be7cbb4e 2005-07-12 devnull .IR print (3)
236 be7cbb4e 2005-07-12 devnull formatters to print
237 be7cbb4e 2005-07-12 devnull .B VtFcall
238 be7cbb4e 2005-07-12 devnull structures and scores.
239 be7cbb4e 2005-07-12 devnull .I Vtfcallfmt
240 be7cbb4e 2005-07-12 devnull assumes that
241 be7cbb4e 2005-07-12 devnull .I vtscorefmt
242 be7cbb4e 2005-07-12 devnull is installed as
243 be7cbb4e 2005-07-12 devnull .BR %V .
244 be7cbb4e 2005-07-12 devnull .SH SOURCE
245 be7cbb4e 2005-07-12 devnull .B \*9/src/libventi
246 be7cbb4e 2005-07-12 devnull .SH SEE ALSO
247 be7cbb4e 2005-07-12 devnull .IR venti (1),
248 be7cbb4e 2005-07-12 devnull .IR venti (3),
249 be7cbb4e 2005-07-12 devnull .IR venti (7)
250 be7cbb4e 2005-07-12 devnull .SH DIAGNOSTICS
251 be7cbb4e 2005-07-12 devnull .IR Vtentrypack ,
252 be7cbb4e 2005-07-12 devnull .IR vtfcallpack ,
253 be7cbb4e 2005-07-12 devnull .IR vtrootpack ,
255 be7cbb4e 2005-07-12 devnull .I vtfcallclear
256 be7cbb4e 2005-07-12 devnull cannot fail.
258 be7cbb4e 2005-07-12 devnull .IR Vtentryunpack ,
259 be7cbb4e 2005-07-12 devnull .IR vtrootunpack ,
260 be7cbb4e 2005-07-12 devnull .IR vtputstring ,
261 be7cbb4e 2005-07-12 devnull .IR vtgetstring ,
263 be7cbb4e 2005-07-12 devnull .I vtparsescore
264 be7cbb4e 2005-07-12 devnull return 0 on success, \-1 on error.
266 be7cbb4e 2005-07-12 devnull .I Vtfcallpack
267 be7cbb4e 2005-07-12 devnull returns a packet on success, nil on error.
269 be7cbb4e 2005-07-12 devnull .I Vttodisktype
271 be7cbb4e 2005-07-12 devnull .I vtfromdisktype
273 be7cbb4e 2005-07-12 devnull .B VtCorruptType
275 be7cbb4e 2005-07-12 devnull when presented with invalid input.