1 be7cbb4e 2005-07-12 devnull .TH VENTI-PACKET 3
3 be7cbb4e 2005-07-12 devnull Packet, packetalloc, packetfree, packetforeign, packetdup,
4 be7cbb4e 2005-07-12 devnull packetsplit, packetconsume, packettrim, packetheader,
5 be7cbb4e 2005-07-12 devnull packettrailer, packetprefix, packetappend, packetconcat,
6 be7cbb4e 2005-07-12 devnull packetpeek, packetcopy, packetfragments,
7 be7cbb4e 2005-07-12 devnull packetsize, packetasize, packetcompact, packetcmp,
8 be7cbb4e 2005-07-12 devnull packetstats, packetsha1 \- zero-copy network buffers
9 be7cbb4e 2005-07-12 devnull .SH SYNOPSIS
11 be7cbb4e 2005-07-12 devnull #include <u.h>
13 be7cbb4e 2005-07-12 devnull #include <libc.h>
15 be7cbb4e 2005-07-12 devnull #include <venti.h>
16 be7cbb4e 2005-07-12 devnull .ta +\w'\fLPacket* 'u +\w'\fLxxxx'u
21 be7cbb4e 2005-07-12 devnull Packet* packetalloc(void);
24 be7cbb4e 2005-07-12 devnull void packetfree(Packet *p)
27 be7cbb4e 2005-07-12 devnull Packet* packetforeign(uchar *buf, int n,
30 be7cbb4e 2005-07-12 devnull void (*free)(void *a), void *a)
33 be7cbb4e 2005-07-12 devnull Packet* packetdup(Packet *p, int offset, int n)
36 be7cbb4e 2005-07-12 devnull Packet* packetsplit(Packet *p, int n)
39 be7cbb4e 2005-07-12 devnull int packetconsume(Packet *p, uchar *buf, int n)
42 be7cbb4e 2005-07-12 devnull int packettrim(Packet *p, int offset, int n)
45 be7cbb4e 2005-07-12 devnull uchar* packetheader(Packet *p, int n)
48 be7cbb4e 2005-07-12 devnull uchar* packettrailer(Packet *p, int n)
51 be7cbb4e 2005-07-12 devnull void packetprefix(Packet *p, uchar *buf, int n)
54 be7cbb4e 2005-07-12 devnull void packetappend(Packet *p, uchar *buf, int n)
57 be7cbb4e 2005-07-12 devnull void packetconcat(Packet *p, Packet *q)
60 be7cbb4e 2005-07-12 devnull uchar* packetpeek(Packet *p, uchar *buf, int offset, int n)
63 be7cbb4e 2005-07-12 devnull int packetcopy(Packet *p, uchar *buf, int offset, int n)
66 be7cbb4e 2005-07-12 devnull int packetfragments(Packet *p, IOchunk *io, int nio,
69 be7cbb4e 2005-07-12 devnull int offset)
72 be7cbb4e 2005-07-12 devnull uint packetsize(Packet *p)
75 be7cbb4e 2005-07-12 devnull uint packetasize(Packet *p)
78 be7cbb4e 2005-07-12 devnull int packetcmp(Packet *p, Packet *q)
81 be7cbb4e 2005-07-12 devnull void packetstats(void)
84 be7cbb4e 2005-07-12 devnull void packetsha1(Packet *p, uchar sha1[20])
85 be7cbb4e 2005-07-12 devnull .SH DESCRIPTION
87 be7cbb4e 2005-07-12 devnull .B Packet
88 be7cbb4e 2005-07-12 devnull is a list of blocks of data.
89 be7cbb4e 2005-07-12 devnull Each block is contiguous in memory, but the entire packet
90 be7cbb4e 2005-07-12 devnull may not be.
91 be7cbb4e 2005-07-12 devnull This representation helps avoid unnecessary memory copies.
93 be7cbb4e 2005-07-12 devnull .I Packetalloc
94 be7cbb4e 2005-07-12 devnull allocates an empty packet.
96 be7cbb4e 2005-07-12 devnull .I Packetappend
97 be7cbb4e 2005-07-12 devnull appends the
101 be7cbb4e 2005-07-12 devnull to the end of
104 be7cbb4e 2005-07-12 devnull .I Packetasize
105 be7cbb4e 2005-07-12 devnull returns the number of data bytes allocated to
107 be7cbb4e 2005-07-12 devnull This may be larger than the number of bytes stored
110 be7cbb4e 2005-07-12 devnull because individual fragments may not be filled.
112 be7cbb4e 2005-07-12 devnull .I Packetcmp
113 be7cbb4e 2005-07-12 devnull compares the data sections of two packets as
114 be7cbb4e 2005-07-12 devnull .I memcmp
116 be7cbb4e 2005-07-12 devnull .IR memory (3))
119 be7cbb4e 2005-07-12 devnull .I Packetconcat
120 be7cbb4e 2005-07-12 devnull removes all data from
122 be7cbb4e 2005-07-12 devnull appending it to
125 be7cbb4e 2005-07-12 devnull .I Packetconsume
128 be7cbb4e 2005-07-12 devnull bytes from the beginning of
130 be7cbb4e 2005-07-12 devnull storing them into
131 be7cbb4e 2005-07-12 devnull .IR buf .
133 be7cbb4e 2005-07-12 devnull .I Packetcopy
136 be7cbb4e 2005-07-12 devnull bytes at
137 be7cbb4e 2005-07-12 devnull .I offset
141 be7cbb4e 2005-07-12 devnull .IR buf .
143 be7cbb4e 2005-07-12 devnull .I Packetdup
144 be7cbb4e 2005-07-12 devnull creates a new packet initialized with
146 be7cbb4e 2005-07-12 devnull bytes from
147 be7cbb4e 2005-07-12 devnull .I offset
151 be7cbb4e 2005-07-12 devnull .I Packetforeign
152 be7cbb4e 2005-07-12 devnull allocates a packet containing `foreign' data: the
154 be7cbb4e 2005-07-12 devnull bytes pointed to by
155 be7cbb4e 2005-07-12 devnull .IR buf .
156 be7cbb4e 2005-07-12 devnull Once the bytes are no longer needed, they are freed by calling
157 be7cbb4e 2005-07-12 devnull .IB free ( a )\fR.
159 be7cbb4e 2005-07-12 devnull .I Packetfragments
160 be7cbb4e 2005-07-12 devnull initializes up to
164 be7cbb4e 2005-07-12 devnull structures with pointers to the data in
166 be7cbb4e 2005-07-12 devnull starting at
167 be7cbb4e 2005-07-12 devnull .IR offset .
168 be7cbb4e 2005-07-12 devnull It returns the total number of bytes represented
169 be7cbb4e 2005-07-12 devnull by the returned structures.
170 be7cbb4e 2005-07-12 devnull .I Packetfragments
171 be7cbb4e 2005-07-12 devnull initializes any unused
173 be7cbb4e 2005-07-12 devnull structures with nil pointer and zero length.
175 be7cbb4e 2005-07-12 devnull .I Packetfree
176 be7cbb4e 2005-07-12 devnull frees the packet
179 be7cbb4e 2005-07-12 devnull .I Packetheader
180 be7cbb4e 2005-07-12 devnull returns a pointer to the first
182 be7cbb4e 2005-07-12 devnull bytes of
184 be7cbb4e 2005-07-12 devnull making them contiguous in memory
185 be7cbb4e 2005-07-12 devnull if necessary.
187 be7cbb4e 2005-07-12 devnull .I Packetpeek
188 be7cbb4e 2005-07-12 devnull returns a pointer to the
190 be7cbb4e 2005-07-12 devnull bytes at
191 be7cbb4e 2005-07-12 devnull .I offset
194 be7cbb4e 2005-07-12 devnull If the requested bytes are already stored contiguously in memory,
195 be7cbb4e 2005-07-12 devnull the returned pointer points at the internal data storage for
197 be7cbb4e 2005-07-12 devnull Otherwise, the bytes are copied into
198 be7cbb4e 2005-07-12 devnull .IR buf ,
200 be7cbb4e 2005-07-12 devnull .I packetpeek
202 be7cbb4e 2005-07-12 devnull .IR buf .
204 be7cbb4e 2005-07-12 devnull .I Packetprefix
205 be7cbb4e 2005-07-12 devnull inserts a copy of the
207 be7cbb4e 2005-07-12 devnull bytes at
209 be7cbb4e 2005-07-12 devnull at the beginning of
212 be7cbb4e 2005-07-12 devnull .I Packetsha1
213 be7cbb4e 2005-07-12 devnull computes the SHA1 hash of the data contained in
216 be7cbb4e 2005-07-12 devnull .I Packetsize
217 be7cbb4e 2005-07-12 devnull returns the number of bytes of data contained in
220 be7cbb4e 2005-07-12 devnull .I Packetsplit
221 be7cbb4e 2005-07-12 devnull returns a new packet initialized with
223 be7cbb4e 2005-07-12 devnull bytes removed from the beginning of
226 be7cbb4e 2005-07-12 devnull .I Packetstats
227 be7cbb4e 2005-07-12 devnull prints run-time statistics to standard output.
229 be7cbb4e 2005-07-12 devnull .I Packettrailer
230 be7cbb4e 2005-07-12 devnull returns a pointer to the last
232 be7cbb4e 2005-07-12 devnull bytes of
234 be7cbb4e 2005-07-12 devnull making them contiguous in memory
235 be7cbb4e 2005-07-12 devnull if necessary.
237 be7cbb4e 2005-07-12 devnull .I Packettrim
240 be7cbb4e 2005-07-12 devnull bytes at offset
241 be7cbb4e 2005-07-12 devnull .I offset
242 be7cbb4e 2005-07-12 devnull from packet
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 (3)
248 be7cbb4e 2005-07-12 devnull .SH DIAGNOSTICS
249 be7cbb4e 2005-07-12 devnull These functions return errors only when passed
250 be7cbb4e 2005-07-12 devnull invalid inputs,
251 be7cbb4e 2005-07-12 devnull .IR e.g. ,
252 be7cbb4e 2005-07-12 devnull requests for data at negative offsets or beyond the end of a packet.
254 be7cbb4e 2005-07-12 devnull Functions returning pointers return nil on error;
255 be7cbb4e 2005-07-12 devnull functions returning integers return \-1 on error.
256 be7cbb4e 2005-07-12 devnull Most functions returning integers return 0 on success.
257 be7cbb4e 2005-07-12 devnull The exceptions are
258 be7cbb4e 2005-07-12 devnull .I packetfragments
260 be7cbb4e 2005-07-12 devnull .IR packetcmp ,
261 be7cbb4e 2005-07-12 devnull whose return values are described above.
263 be7cbb4e 2005-07-12 devnull When these functions run out of memory, they
264 be7cbb4e 2005-07-12 devnull print error messages and call
265 be7cbb4e 2005-07-12 devnull .IR sysfatal .
266 be7cbb4e 2005-07-12 devnull They do not return.