| tventi-packet.3 - plan9port - [fork] Plan 9 from user space | |
| git clone git://src.adamsgaard.dk/plan9port | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| tventi-packet.3 (4573B) | |
| --- | |
| 1 .TH VENTI-PACKET 3 | |
| 2 .SH NAME | |
| 3 Packet, | |
| 4 packetalloc, | |
| 5 packetappend, | |
| 6 packetasize, | |
| 7 packetcmp, | |
| 8 packetconcat, | |
| 9 packetconsume, | |
| 10 packetcopy, | |
| 11 packetdup, | |
| 12 packetforeign, | |
| 13 packetfragments, | |
| 14 packetfree, | |
| 15 packetheader, | |
| 16 packetpeek, | |
| 17 packetprefix, | |
| 18 packetsha1, | |
| 19 packetsize, | |
| 20 packetsplit, | |
| 21 packetstats, | |
| 22 packettrailer, | |
| 23 packettrim \- zero-copy network buffers | |
| 24 .SH SYNOPSIS | |
| 25 .ft L | |
| 26 #include <u.h> | |
| 27 .br | |
| 28 #include <libc.h> | |
| 29 .br | |
| 30 #include <venti.h> | |
| 31 .ta +\w'\fLPacket* 'u +\w'\fLxxxx'u | |
| 32 .PP | |
| 33 .B | |
| 34 .PP | |
| 35 .B | |
| 36 Packet* packetalloc(void); | |
| 37 .PP | |
| 38 .B | |
| 39 void packetappend(Packet *p, uchar *buf, int n) | |
| 40 .PP | |
| 41 .B | |
| 42 uint packetasize(Packet *p) | |
| 43 .PP | |
| 44 .B | |
| 45 int packetcmp(Packet *p, Packet *q) | |
| 46 .PP | |
| 47 .B | |
| 48 void packetconcat(Packet *p, Packet *q) | |
| 49 .PP | |
| 50 .B | |
| 51 int packetconsume(Packet *p, uchar *buf, int n) | |
| 52 .PP | |
| 53 .B | |
| 54 int packetcopy(Packet *p, uchar *buf, int offset, int n) | |
| 55 .PP | |
| 56 .B | |
| 57 Packet* packetdup(Packet *p, int offset, int n) | |
| 58 .PP | |
| 59 .B | |
| 60 Packet* packetforeign(uchar *buf, int n, | |
| 61 .br | |
| 62 .B | |
| 63 void (*free)(void *a), void *a) | |
| 64 .PP | |
| 65 .B | |
| 66 int packetfragments(Packet *p, IOchunk *io, int nio, | |
| 67 .br | |
| 68 .B | |
| 69 int offset) | |
| 70 .PP | |
| 71 .B | |
| 72 void packetfree(Packet *p) | |
| 73 .PP | |
| 74 .B | |
| 75 uchar* packetheader(Packet *p, int n) | |
| 76 .PP | |
| 77 .B | |
| 78 uchar* packetpeek(Packet *p, uchar *buf, int offset, int n) | |
| 79 .PP | |
| 80 .B | |
| 81 void packetprefix(Packet *p, uchar *buf, int n) | |
| 82 .PP | |
| 83 .B | |
| 84 void packetsha1(Packet *p, uchar sha1[20]) | |
| 85 .PP | |
| 86 .B | |
| 87 uint packetsize(Packet *p) | |
| 88 .PP | |
| 89 .B | |
| 90 Packet* packetsplit(Packet *p, int n) | |
| 91 .PP | |
| 92 .B | |
| 93 void packetstats(void) | |
| 94 .PP | |
| 95 .B | |
| 96 uchar* packettrailer(Packet *p, int n) | |
| 97 .PP | |
| 98 .B | |
| 99 int packettrim(Packet *p, int offset, int n) | |
| 100 .SH DESCRIPTION | |
| 101 A | |
| 102 .B Packet | |
| 103 is a chain of blocks of data. | |
| 104 Each block, called a fragment, | |
| 105 is contiguous in memory, but the entire packet | |
| 106 may not be. | |
| 107 This representation helps avoid unnecessary memory copies. | |
| 108 .PP | |
| 109 .I Packetalloc | |
| 110 allocates an empty packet. | |
| 111 .PP | |
| 112 .I Packetappend | |
| 113 appends the | |
| 114 .I n | |
| 115 bytes at | |
| 116 .I buf | |
| 117 to the end of | |
| 118 .IR p . | |
| 119 .PP | |
| 120 .I Packetasize | |
| 121 returns the number of data bytes allocated to | |
| 122 .IR p . | |
| 123 This may be larger than the number of bytes stored | |
| 124 in | |
| 125 .IR p | |
| 126 because fragments may not be filled completely. | |
| 127 .PP | |
| 128 .I Packetcmp | |
| 129 compares the data sections of two packets as | |
| 130 .I memcmp | |
| 131 (see | |
| 132 .MR memory (3) ) | |
| 133 would. | |
| 134 .PP | |
| 135 .I Packetconcat | |
| 136 removes all data from | |
| 137 .IR q , | |
| 138 appending it to | |
| 139 .IR p . | |
| 140 .PP | |
| 141 .I Packetconsume | |
| 142 removes | |
| 143 .I n | |
| 144 bytes from the beginning of | |
| 145 .IR p , | |
| 146 storing them into | |
| 147 .IR buf . | |
| 148 .PP | |
| 149 .I Packetcopy | |
| 150 copies | |
| 151 .I n | |
| 152 bytes at | |
| 153 .I offset | |
| 154 in | |
| 155 .I p | |
| 156 to | |
| 157 .IR buf . | |
| 158 .PP | |
| 159 .I Packetdup | |
| 160 creates a new packet initialized with | |
| 161 .I n | |
| 162 bytes from | |
| 163 .I offset | |
| 164 in | |
| 165 .IR p . | |
| 166 .PP | |
| 167 .I Packetforeign | |
| 168 allocates a packet containing `foreign' data: the | |
| 169 .I n | |
| 170 bytes pointed to by | |
| 171 .IR buf . | |
| 172 Once the bytes are no longer needed, they are freed by calling | |
| 173 .IB free ( a )\fR. | |
| 174 .PP | |
| 175 .I Packetfragments | |
| 176 initializes up to | |
| 177 .I nio | |
| 178 of the | |
| 179 .I io | |
| 180 structures with pointers to the data in | |
| 181 .IR p , | |
| 182 starting at | |
| 183 .IR offset . | |
| 184 It returns the total number of bytes represented | |
| 185 by the returned structures. | |
| 186 .I Packetfragments | |
| 187 initializes any unused | |
| 188 .I io | |
| 189 structures with nil pointer and zero length. | |
| 190 .PP | |
| 191 .I Packetfree | |
| 192 frees the packet | |
| 193 .IR p . | |
| 194 .PP | |
| 195 .I Packetheader | |
| 196 returns a pointer to the first | |
| 197 .I n | |
| 198 bytes of | |
| 199 .IR p , | |
| 200 making them contiguous in memory | |
| 201 if necessary. | |
| 202 .PP | |
| 203 .I Packetpeek | |
| 204 returns a pointer to the | |
| 205 .I n | |
| 206 bytes at | |
| 207 .I offset | |
| 208 in | |
| 209 .IR p . | |
| 210 If the requested bytes are already stored contiguously in memory, | |
| 211 the returned pointer points at the internal data storage for | |
| 212 .IR p . | |
| 213 Otherwise, the bytes are copied into | |
| 214 .IR buf , | |
| 215 and | |
| 216 .I packetpeek | |
| 217 returns | |
| 218 .IR buf . | |
| 219 .PP | |
| 220 .I Packetprefix | |
| 221 inserts a copy of the | |
| 222 .I n | |
| 223 bytes at | |
| 224 .I buf | |
| 225 at the beginning of | |
| 226 .IR p . | |
| 227 .PP | |
| 228 .I Packetsha1 | |
| 229 computes the SHA1 hash of the data contained in | |
| 230 .IR p . | |
| 231 .PP | |
| 232 .I Packetsize | |
| 233 returns the length, in bytes, of the data contained in | |
| 234 .IR p . | |
| 235 .PP | |
| 236 .I Packetsplit | |
| 237 returns a new packet initialized with | |
| 238 .I n | |
| 239 bytes removed from the beginning of | |
| 240 .IR p . | |
| 241 .PP | |
| 242 .I Packetstats | |
| 243 prints run-time statistics to standard output. | |
| 244 .PP | |
| 245 .I Packettrailer | |
| 246 returns a pointer to the last | |
| 247 .I n | |
| 248 bytes of | |
| 249 .IR p , | |
| 250 making them contiguous in memory | |
| 251 if necessary. | |
| 252 .PP | |
| 253 .I Packettrim | |
| 254 deletes all bytes from the packet | |
| 255 .I p | |
| 256 except the | |
| 257 .I n | |
| 258 bytes at offset | |
| 259 .IR offset . | |
| 260 .SH SOURCE | |
| 261 .B \*9/src/libventi | |
| 262 .SH SEE ALSO | |
| 263 .MR venti (3) | |
| 264 .SH DIAGNOSTICS | |
| 265 These functions return errors only when passed | |
| 266 invalid inputs, | |
| 267 .IR e.g. , | |
| 268 requests for data at negative offsets or beyond the end of a packet. | |
| 269 .PP | |
| 270 Functions returning pointers return nil on error; | |
| 271 functions returning integers return \-1 on error. | |
| 272 Most functions returning integers return 0 on success. | |
| 273 The exceptions are | |
| 274 .I packetfragments | |
| 275 and | |
| 276 .IR packetcmp , | |
| 277 whose return values are described above. | |
| 278 .PP | |
| 279 When these functions run out of memory, they | |
| 280 print error messages and call | |
| 281 .IR sysfatal . |