Blame


1 be7cbb4e 2005-07-12 devnull .TH VENTI-PACKET 3
2 be7cbb4e 2005-07-12 devnull .SH NAME
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
10 be7cbb4e 2005-07-12 devnull .ft L
11 be7cbb4e 2005-07-12 devnull #include <u.h>
12 be7cbb4e 2005-07-12 devnull .br
13 be7cbb4e 2005-07-12 devnull #include <libc.h>
14 be7cbb4e 2005-07-12 devnull .br
15 be7cbb4e 2005-07-12 devnull #include <venti.h>
16 be7cbb4e 2005-07-12 devnull .ta +\w'\fLPacket* 'u +\w'\fLxxxx'u
17 be7cbb4e 2005-07-12 devnull .PP
18 be7cbb4e 2005-07-12 devnull .B
19 be7cbb4e 2005-07-12 devnull .PP
20 be7cbb4e 2005-07-12 devnull .B
21 be7cbb4e 2005-07-12 devnull Packet* packetalloc(void);
22 be7cbb4e 2005-07-12 devnull .PP
23 be7cbb4e 2005-07-12 devnull .B
24 be7cbb4e 2005-07-12 devnull void packetfree(Packet *p)
25 be7cbb4e 2005-07-12 devnull .PP
26 be7cbb4e 2005-07-12 devnull .B
27 be7cbb4e 2005-07-12 devnull Packet* packetforeign(uchar *buf, int n,
28 be7cbb4e 2005-07-12 devnull .br
29 be7cbb4e 2005-07-12 devnull .B
30 be7cbb4e 2005-07-12 devnull void (*free)(void *a), void *a)
31 be7cbb4e 2005-07-12 devnull .PP
32 be7cbb4e 2005-07-12 devnull .B
33 be7cbb4e 2005-07-12 devnull Packet* packetdup(Packet *p, int offset, int n)
34 be7cbb4e 2005-07-12 devnull .PP
35 be7cbb4e 2005-07-12 devnull .B
36 be7cbb4e 2005-07-12 devnull Packet* packetsplit(Packet *p, int n)
37 be7cbb4e 2005-07-12 devnull .PP
38 be7cbb4e 2005-07-12 devnull .B
39 be7cbb4e 2005-07-12 devnull int packetconsume(Packet *p, uchar *buf, int n)
40 be7cbb4e 2005-07-12 devnull .PP
41 be7cbb4e 2005-07-12 devnull .B
42 be7cbb4e 2005-07-12 devnull int packettrim(Packet *p, int offset, int n)
43 be7cbb4e 2005-07-12 devnull .PP
44 be7cbb4e 2005-07-12 devnull .B
45 be7cbb4e 2005-07-12 devnull uchar* packetheader(Packet *p, int n)
46 be7cbb4e 2005-07-12 devnull .PP
47 be7cbb4e 2005-07-12 devnull .B
48 be7cbb4e 2005-07-12 devnull uchar* packettrailer(Packet *p, int n)
49 be7cbb4e 2005-07-12 devnull .PP
50 be7cbb4e 2005-07-12 devnull .B
51 be7cbb4e 2005-07-12 devnull void packetprefix(Packet *p, uchar *buf, int n)
52 be7cbb4e 2005-07-12 devnull .PP
53 be7cbb4e 2005-07-12 devnull .B
54 be7cbb4e 2005-07-12 devnull void packetappend(Packet *p, uchar *buf, int n)
55 be7cbb4e 2005-07-12 devnull .PP
56 be7cbb4e 2005-07-12 devnull .B
57 be7cbb4e 2005-07-12 devnull void packetconcat(Packet *p, Packet *q)
58 be7cbb4e 2005-07-12 devnull .PP
59 be7cbb4e 2005-07-12 devnull .B
60 be7cbb4e 2005-07-12 devnull uchar* packetpeek(Packet *p, uchar *buf, int offset, int n)
61 be7cbb4e 2005-07-12 devnull .PP
62 be7cbb4e 2005-07-12 devnull .B
63 be7cbb4e 2005-07-12 devnull int packetcopy(Packet *p, uchar *buf, int offset, int n)
64 be7cbb4e 2005-07-12 devnull .PP
65 be7cbb4e 2005-07-12 devnull .B
66 be7cbb4e 2005-07-12 devnull int packetfragments(Packet *p, IOchunk *io, int nio,
67 be7cbb4e 2005-07-12 devnull .br
68 be7cbb4e 2005-07-12 devnull .B
69 be7cbb4e 2005-07-12 devnull int offset)
70 be7cbb4e 2005-07-12 devnull .PP
71 be7cbb4e 2005-07-12 devnull .B
72 be7cbb4e 2005-07-12 devnull uint packetsize(Packet *p)
73 be7cbb4e 2005-07-12 devnull .PP
74 be7cbb4e 2005-07-12 devnull .B
75 be7cbb4e 2005-07-12 devnull uint packetasize(Packet *p)
76 be7cbb4e 2005-07-12 devnull .PP
77 be7cbb4e 2005-07-12 devnull .B
78 be7cbb4e 2005-07-12 devnull int packetcmp(Packet *p, Packet *q)
79 be7cbb4e 2005-07-12 devnull .PP
80 be7cbb4e 2005-07-12 devnull .B
81 be7cbb4e 2005-07-12 devnull void packetstats(void)
82 be7cbb4e 2005-07-12 devnull .PP
83 be7cbb4e 2005-07-12 devnull .B
84 be7cbb4e 2005-07-12 devnull void packetsha1(Packet *p, uchar sha1[20])
85 be7cbb4e 2005-07-12 devnull .SH DESCRIPTION
86 be7cbb4e 2005-07-12 devnull A
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.
92 be7cbb4e 2005-07-12 devnull .PP
93 be7cbb4e 2005-07-12 devnull .I Packetalloc
94 be7cbb4e 2005-07-12 devnull allocates an empty packet.
95 be7cbb4e 2005-07-12 devnull .PP
96 be7cbb4e 2005-07-12 devnull .I Packetappend
97 be7cbb4e 2005-07-12 devnull appends the
98 be7cbb4e 2005-07-12 devnull .I n
99 be7cbb4e 2005-07-12 devnull bytes at
100 be7cbb4e 2005-07-12 devnull .I buf
101 be7cbb4e 2005-07-12 devnull to the end of
102 be7cbb4e 2005-07-12 devnull .IR p .
103 be7cbb4e 2005-07-12 devnull .PP
104 be7cbb4e 2005-07-12 devnull .I Packetasize
105 be7cbb4e 2005-07-12 devnull returns the number of data bytes allocated to
106 be7cbb4e 2005-07-12 devnull .IR p .
107 be7cbb4e 2005-07-12 devnull This may be larger than the number of bytes stored
108 be7cbb4e 2005-07-12 devnull in
109 be7cbb4e 2005-07-12 devnull .IR p
110 be7cbb4e 2005-07-12 devnull because individual fragments may not be filled.
111 be7cbb4e 2005-07-12 devnull .PP
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
115 be7cbb4e 2005-07-12 devnull (see
116 be7cbb4e 2005-07-12 devnull .IR memory (3))
117 be7cbb4e 2005-07-12 devnull would.
118 be7cbb4e 2005-07-12 devnull .PP
119 be7cbb4e 2005-07-12 devnull .I Packetconcat
120 be7cbb4e 2005-07-12 devnull removes all data from
121 be7cbb4e 2005-07-12 devnull .IR q ,
122 be7cbb4e 2005-07-12 devnull appending it to
123 be7cbb4e 2005-07-12 devnull .IR p .
124 be7cbb4e 2005-07-12 devnull .PP
125 be7cbb4e 2005-07-12 devnull .I Packetconsume
126 be7cbb4e 2005-07-12 devnull removes
127 be7cbb4e 2005-07-12 devnull .I n
128 be7cbb4e 2005-07-12 devnull bytes from the beginning of
129 be7cbb4e 2005-07-12 devnull .IR p ,
130 be7cbb4e 2005-07-12 devnull storing them into
131 be7cbb4e 2005-07-12 devnull .IR buf .
132 be7cbb4e 2005-07-12 devnull .PP
133 be7cbb4e 2005-07-12 devnull .I Packetcopy
134 be7cbb4e 2005-07-12 devnull copies
135 be7cbb4e 2005-07-12 devnull .I n
136 be7cbb4e 2005-07-12 devnull bytes at
137 be7cbb4e 2005-07-12 devnull .I offset
138 be7cbb4e 2005-07-12 devnull in
139 be7cbb4e 2005-07-12 devnull .I p
140 be7cbb4e 2005-07-12 devnull to
141 be7cbb4e 2005-07-12 devnull .IR buf .
142 be7cbb4e 2005-07-12 devnull .PP
143 be7cbb4e 2005-07-12 devnull .I Packetdup
144 be7cbb4e 2005-07-12 devnull creates a new packet initialized with
145 be7cbb4e 2005-07-12 devnull .I n
146 be7cbb4e 2005-07-12 devnull bytes from
147 be7cbb4e 2005-07-12 devnull .I offset
148 be7cbb4e 2005-07-12 devnull in
149 be7cbb4e 2005-07-12 devnull .IR p .
150 be7cbb4e 2005-07-12 devnull .PP
151 be7cbb4e 2005-07-12 devnull .I Packetforeign
152 be7cbb4e 2005-07-12 devnull allocates a packet containing `foreign' data: the
153 be7cbb4e 2005-07-12 devnull .I n
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.
158 be7cbb4e 2005-07-12 devnull .PP
159 be7cbb4e 2005-07-12 devnull .I Packetfragments
160 be7cbb4e 2005-07-12 devnull initializes up to
161 be7cbb4e 2005-07-12 devnull .I nio
162 be7cbb4e 2005-07-12 devnull of the
163 be7cbb4e 2005-07-12 devnull .I io
164 be7cbb4e 2005-07-12 devnull structures with pointers to the data in
165 be7cbb4e 2005-07-12 devnull .IR p ,
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
172 be7cbb4e 2005-07-12 devnull .I io
173 be7cbb4e 2005-07-12 devnull structures with nil pointer and zero length.
174 be7cbb4e 2005-07-12 devnull .PP
175 be7cbb4e 2005-07-12 devnull .I Packetfree
176 be7cbb4e 2005-07-12 devnull frees the packet
177 be7cbb4e 2005-07-12 devnull .IR p .
178 be7cbb4e 2005-07-12 devnull .PP
179 be7cbb4e 2005-07-12 devnull .I Packetheader
180 be7cbb4e 2005-07-12 devnull returns a pointer to the first
181 be7cbb4e 2005-07-12 devnull .I n
182 be7cbb4e 2005-07-12 devnull bytes of
183 be7cbb4e 2005-07-12 devnull .IR p ,
184 be7cbb4e 2005-07-12 devnull making them contiguous in memory
185 be7cbb4e 2005-07-12 devnull if necessary.
186 be7cbb4e 2005-07-12 devnull .PP
187 be7cbb4e 2005-07-12 devnull .I Packetpeek
188 be7cbb4e 2005-07-12 devnull returns a pointer to the
189 be7cbb4e 2005-07-12 devnull .I n
190 be7cbb4e 2005-07-12 devnull bytes at
191 be7cbb4e 2005-07-12 devnull .I offset
192 be7cbb4e 2005-07-12 devnull in
193 be7cbb4e 2005-07-12 devnull .IR p .
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
196 be7cbb4e 2005-07-12 devnull .IR p .
197 be7cbb4e 2005-07-12 devnull Otherwise, the bytes are copied into
198 be7cbb4e 2005-07-12 devnull .IR buf ,
199 be7cbb4e 2005-07-12 devnull and
200 be7cbb4e 2005-07-12 devnull .I packetpeek
201 be7cbb4e 2005-07-12 devnull returns
202 be7cbb4e 2005-07-12 devnull .IR buf .
203 be7cbb4e 2005-07-12 devnull .PP
204 be7cbb4e 2005-07-12 devnull .I Packetprefix
205 be7cbb4e 2005-07-12 devnull inserts a copy of the
206 be7cbb4e 2005-07-12 devnull .I n
207 be7cbb4e 2005-07-12 devnull bytes at
208 be7cbb4e 2005-07-12 devnull .I buf
209 be7cbb4e 2005-07-12 devnull at the beginning of
210 be7cbb4e 2005-07-12 devnull .IR p .
211 be7cbb4e 2005-07-12 devnull .PP
212 be7cbb4e 2005-07-12 devnull .I Packetsha1
213 be7cbb4e 2005-07-12 devnull computes the SHA1 hash of the data contained in
214 be7cbb4e 2005-07-12 devnull .IR p .
215 be7cbb4e 2005-07-12 devnull .PP
216 be7cbb4e 2005-07-12 devnull .I Packetsize
217 be7cbb4e 2005-07-12 devnull returns the number of bytes of data contained in
218 be7cbb4e 2005-07-12 devnull .IR p .
219 be7cbb4e 2005-07-12 devnull .PP
220 be7cbb4e 2005-07-12 devnull .I Packetsplit
221 be7cbb4e 2005-07-12 devnull returns a new packet initialized with
222 be7cbb4e 2005-07-12 devnull .I n
223 be7cbb4e 2005-07-12 devnull bytes removed from the beginning of
224 be7cbb4e 2005-07-12 devnull .IR p .
225 be7cbb4e 2005-07-12 devnull .PP
226 be7cbb4e 2005-07-12 devnull .I Packetstats
227 be7cbb4e 2005-07-12 devnull prints run-time statistics to standard output.
228 be7cbb4e 2005-07-12 devnull .PP
229 be7cbb4e 2005-07-12 devnull .I Packettrailer
230 be7cbb4e 2005-07-12 devnull returns a pointer to the last
231 be7cbb4e 2005-07-12 devnull .I n
232 be7cbb4e 2005-07-12 devnull bytes of
233 be7cbb4e 2005-07-12 devnull .IR p ,
234 be7cbb4e 2005-07-12 devnull making them contiguous in memory
235 be7cbb4e 2005-07-12 devnull if necessary.
236 be7cbb4e 2005-07-12 devnull .PP
237 be7cbb4e 2005-07-12 devnull .I Packettrim
238 be7cbb4e 2005-07-12 devnull removes
239 be7cbb4e 2005-07-12 devnull .I n
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
243 be7cbb4e 2005-07-12 devnull .IR p .
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.
253 be7cbb4e 2005-07-12 devnull .PP
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
259 be7cbb4e 2005-07-12 devnull and
260 be7cbb4e 2005-07-12 devnull .IR packetcmp ,
261 be7cbb4e 2005-07-12 devnull whose return values are described above.
262 be7cbb4e 2005-07-12 devnull .PP
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.