69 lines
2.3 KiB
C
69 lines
2.3 KiB
C
/* @(#)nit_buf.h 1.1 94/10/31 SMI */
|
|
|
|
/*
|
|
* Copyright (c) 1986 by Sun Microsystems, Inc.
|
|
*/
|
|
|
|
#ifndef _net_nit_buf_h
|
|
#define _net_nit_buf_h
|
|
|
|
/*
|
|
* Definitions for the streams NIT buffering module.
|
|
*
|
|
* The module gathers incoming (read-side) messages together into
|
|
* "chunks" and passes completed chunks up to the next module in
|
|
* line. The gathering process is controlled by two ioctl-settable
|
|
* parameters:
|
|
*
|
|
* timeout The maximum delay after passing the previous chunk
|
|
* upward before passing the current one up, even if the
|
|
* chunk isn't full. If the timeout value passed in is
|
|
* a null pointer, the timeout is infinite (as in the
|
|
* select system call); this is the default.
|
|
* chunksize The maximum size of a chunk of accumulated messages,
|
|
* unless a single message exceeds the chunksize, in
|
|
* which case it's passed up in a chunk containing only
|
|
* that message. Note that a given message's size includes
|
|
* the length of any leading M_PROTO blocks it may have.
|
|
*
|
|
* There is one important side-effect: setting the timeout to zero
|
|
* (polling) will force the chunksize to zero, regardless of its
|
|
* previous setting.
|
|
*/
|
|
|
|
/*
|
|
* Ioctls.
|
|
*/
|
|
#define NIOCSTIME _IOW(p, 6, struct timeval) /* set timeout info */
|
|
#define NIOCGTIME _IOWR(p, 7, struct timeval) /* get timeout info */
|
|
#define NIOCCTIME _IO(p, 8) /* clear timeout */
|
|
#define NIOCSCHUNK _IOW(p, 9, u_int) /* set chunksize */
|
|
#define NIOCGCHUNK _IOWR(p, 10, u_int) /* get chunksize */
|
|
|
|
/*
|
|
* Default chunk size.
|
|
*/
|
|
#define NB_DFLT_CHUNK 8192 /* arbitrary */
|
|
|
|
/*
|
|
* When adding a given message to an accumulating chunk, the module
|
|
* first converts all leading M_PROTO data blocks to M_DATA data blocks.
|
|
* It then constructs a nit_bufhdr (defined below), prepends it to
|
|
* the message, and pads the result out to force its length to a
|
|
* multiple of a machine-dependent alignment size guaranteed to be
|
|
* at least sizeof (u_long). It then adds the padded message to the
|
|
* chunk.
|
|
*
|
|
* The first field of the header is length of the message after the
|
|
* M_PROTO => M_DATA conversion, but before adding the header.
|
|
*
|
|
* The second header field is the total length of the message,
|
|
* including both the header itself and the trailing padding bytes.
|
|
*/
|
|
struct nit_bufhdr { /* see above commentary */
|
|
u_int nhb_msglen;
|
|
u_int nhb_totlen;
|
|
};
|
|
|
|
#endif /*!_net_nit_buf_h*/
|