To use the STREAMS environment, STREAMS drivers and modules that are part of the transport provider must conform to the interface prototyped in this section. Interface definitions are specified in Reference 1 (Further Readings on Streams). STREAMS drivers/modules must provide the following interface procedures which are called by STREAMS:
Note The prefix “Xxx” is used as an example only. In real life, a descriptive prefix is used for these procedures. For example, the open procedure of the TCP driver is called TcpOpen; the close procedure of the UDP driver is called UdpClose.
The procedure Xxxopen is called by STREAMS to open a STREAMS driver or module. See Reference 1 for details.
INT Xxxopen( IN STRUCT queue *rq, IN OUT dev_t *devp, IN INT flag, IN INT sflag, IN VOID *credp );
After being registered by StrmRegisterDriver, a STREAMS driver can be opened via the Windows NT path:
\Device\Streams\name
where name is the driver specified in the streamtab structure, as follows:
streamtab.st_rdinit->qi_minfo->mi_idname
Every STREAMS driver for Windows NT must be clonable. The stream head creates a new file object every time a STREAMS driver is opened, and always calls the open procedure of the driver with the CLONEOPEN flag.
The return value from the open procedure of the driver (egopen) must either be 0 or OPENFAIL. If the return value is 0, egopen must have assigned a minor device number to the stream, and returned it via the devp parameter.
The Xxxclose procedure is called by STREAMS to close a STREAMS driver or module. See Further Readings on Streams, Reference 1 for details.
INT Xxxclose( IN STRUCT queue *rq, IN INT flag, IN VOID *credp );
The Xxxput procedure is an example of a queue routine that receives messages from preceding queues in the stream. See Further Readings on Streams, Reference 1 for details.
INT Xxxput( IN STRUCT queue *q, IN STRUCT msgb *mp );
The procedure Xxxsrv is an example of a service procedure for a STREAMS driver/module.
INT Xxxsrv( IN STRUCT queue *q );