tventi-packet.3 - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) 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 .