plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

venti-fcall.3 (4744B)


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