123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- .TH VENTI-PACKET 2
- .SH NAME
- Packet,
- packetalloc,
- packetappend,
- packetasize,
- packetcmp,
- packetconcat,
- packetconsume,
- packetcopy,
- packetdup,
- packetforeign,
- packetfragments,
- packetfree,
- packetheader,
- packetpeek,
- packetprefix,
- packetsha1,
- packetsize,
- packetsplit,
- packetstats,
- packettrailer,
- packettrim \- zero-copy network buffers
- .SH SYNOPSIS
- .ft L
- #include <u.h>
- .br
- #include <libc.h>
- .br
- #include <venti.h>
- .ta +\w'\fLPacket* 'u +\w'\fLxxxx'u
- .PP
- .B
- .PP
- .B
- Packet* packetalloc(void);
- .PP
- .B
- void packetappend(Packet *p, uchar *buf, int n)
- .PP
- .B
- uint packetasize(Packet *p)
- .PP
- .B
- int packetcmp(Packet *p, Packet *q)
- .PP
- .B
- void packetconcat(Packet *p, Packet *q)
- .PP
- .B
- int packetconsume(Packet *p, uchar *buf, int n)
- .PP
- .B
- int packetcopy(Packet *p, uchar *buf, int offset, int n)
- .PP
- .B
- Packet* packetdup(Packet *p, int offset, int n)
- .PP
- .B
- Packet* packetforeign(uchar *buf, int n,
- .br
- .B
- void (*free)(void *a), void *a)
- .PP
- .B
- int packetfragments(Packet *p, IOchunk *io, int nio,
- .br
- .B
- int offset)
- .PP
- .B
- void packetfree(Packet *p)
- .PP
- .B
- uchar* packetheader(Packet *p, int n)
- .PP
- .B
- uchar* packetpeek(Packet *p, uchar *buf, int offset, int n)
- .PP
- .B
- void packetprefix(Packet *p, uchar *buf, int n)
- .PP
- .B
- void packetsha1(Packet *p, uchar sha1[20])
- .PP
- .B
- uint packetsize(Packet *p)
- .PP
- .B
- Packet* packetsplit(Packet *p, int n)
- .PP
- .B
- void packetstats(void)
- .PP
- .B
- uchar* packettrailer(Packet *p, int n)
- .PP
- .B
- int packettrim(Packet *p, int offset, int n)
- .SH DESCRIPTION
- A
- .B Packet
- is a chain of blocks of data.
- Each block, called a fragment,
- is contiguous in memory, but the entire packet
- may not be.
- This representation helps avoid unnecessary memory copies.
- .PP
- .I Packetalloc
- allocates an empty packet.
- .PP
- .I Packetappend
- appends the
- .I n
- bytes at
- .I buf
- to the end of
- .IR p .
- .PP
- .I Packetasize
- returns the number of data bytes allocated to
- .IR p .
- This may be larger than the number of bytes stored
- in
- .IR p
- because fragments may not be filled completely.
- .PP
- .I Packetcmp
- compares the data sections of two packets as
- .I memcmp
- (see
- .IR memory (2))
- would.
- .PP
- .I Packetconcat
- removes all data from
- .IR q ,
- appending it to
- .IR p .
- .PP
- .I Packetconsume
- removes
- .I n
- bytes from the beginning of
- .IR p ,
- storing them into
- .IR buf .
- .PP
- .I Packetcopy
- copies
- .I n
- bytes at
- .I offset
- in
- .I p
- to
- .IR buf .
- .PP
- .I Packetdup
- creates a new packet initialized with
- .I n
- bytes from
- .I offset
- in
- .IR p .
- .PP
- .I Packetforeign
- allocates a packet containing `foreign' data: the
- .I n
- bytes pointed to by
- .IR buf .
- Once the bytes are no longer needed, they are freed by calling
- .IB free ( a )\fR.
- .PP
- .I Packetfragments
- initializes up to
- .I nio
- of the
- .I io
- structures with pointers to the data in
- .IR p ,
- starting at
- .IR offset .
- It returns the total number of bytes represented
- by the returned structures.
- .I Packetfragments
- initializes any unused
- .I io
- structures with nil pointer and zero length.
- .PP
- .I Packetfree
- frees the packet
- .IR p .
- .PP
- .I Packetheader
- returns a pointer to the first
- .I n
- bytes of
- .IR p ,
- making them contiguous in memory
- if necessary.
- .PP
- .I Packetpeek
- returns a pointer to the
- .I n
- bytes at
- .I offset
- in
- .IR p .
- If the requested bytes are already stored contiguously in memory,
- the returned pointer points at the internal data storage for
- .IR p .
- Otherwise, the bytes are copied into
- .IR buf ,
- and
- .I packetpeek
- returns
- .IR buf .
- .PP
- .I Packetprefix
- inserts a copy of the
- .I n
- bytes at
- .I buf
- at the beginning of
- .IR p .
- .PP
- .I Packetsha1
- computes the SHA1 hash of the data contained in
- .IR p .
- .PP
- .I Packetsize
- returns the length, in bytes, of the data contained in
- .IR p .
- .PP
- .I Packetsplit
- returns a new packet initialized with
- .I n
- bytes removed from the beginning of
- .IR p .
- .PP
- .I Packetstats
- prints run-time statistics to standard output.
- .PP
- .I Packettrailer
- returns a pointer to the last
- .I n
- bytes of
- .IR p ,
- making them contiguous in memory
- if necessary.
- .PP
- .I Packettrim
- deletes all bytes from the packet
- .I p
- except the
- .I n
- bytes at offset
- .IR offset .
- .SH SOURCE
- .B /sys/src/libventi
- .SH SEE ALSO
- .IR venti (2)
- .SH DIAGNOSTICS
- These functions return errors only when passed
- invalid inputs,
- .IR e.g. ,
- requests for data at negative offsets or beyond the end of a packet.
- .PP
- Functions returning pointers return nil on error;
- functions returning integers return \-1 on error.
- Most functions returning integers return 0 on success.
- The exceptions are
- .I packetfragments
- and
- .IR packetcmp ,
- whose return values are described above.
- .PP
- When these functions run out of memory, they
- print error messages and call
- .IR sysfatal .
|