STREAMS-UX Programmer's Guide (February 2007)

Modules and Drivers
STREAMS Module
Chapter 4
92
Put Procedure
An example of a module’s read-side and write-side put procedure are shown:
int
mod_rput(q, mp)
queue_t *q;
mblk_t *mp;
{
mod_priv_t *modp;
/* get the module specific data */
modp = (mod_priv_t *)q->q_ptr;
if ((mp->b_datap->db_type >= QPCTL) &&
mp->b_datap->db_type != M_FLUSH )) {
/*
* Process the high priority messages immediately
* and pass it upstream
*/
...
putnext(q, mp);
return;
}
switch (mp->b_datap->db_type) {
case M_DATA:
putq(q, mp);
return;
case M_PROTO:
/* process the protocol message */
...
...
case M_FLUSH:
/* process the M_FLUSH message */
...
...
default:
/* Pass the message upstream if the module does not
* understand it.
*/
putq(q, mp);