A következo lista egy "birka"
modul listáját tartalmazza. A modul
nem bánt semmit, ami rajta átmegy (innen ered a neve is). A modul az
üzenet továbbításához a putnext() kernel makrot használja.
#include <sys/types.h>
#include <sys/stream.h>
#include <sys/cmn_err.h>
#define NULL ((char *)(0))
extern nulldev();
static int birkwrite(), birkopen(), birkclose();
static struct module_info modinfo =
/* A stream queue jellemzoit irja le */
{ 0xa0, /* Modulazonosito szam */
"birk", /* Modul neve */
0, /* Minimalis message-meret */
INFPSZ, /* Maximalis message-meret - INFPSZ=vegtelen */
0, 0 /* High; low water mark; 0=nincs ellenorzes */
};
static struct qinit birkwinit =
/* "write" queue */
{ birkwrite, /* A message feldolgozasat vegzo eljaras */
nulldev, /* Service procedure - itt nincs */
birkopen, /* open-nel ill. PUSH-nal meghivott rutin - comment */
birkclose, /* utolso close-nal vagy pop-nal vegrehajtva - comment*/
nulldev, /* admin bejegyzes (csak a 3bnet-hez kell) */
&modinfo, /* Modulinformacios struktura */
NULL /* Statisztikakat tartalmazo tablazat */
};
static struct qinit birkrinit =
/* "read" queue */
{ birkwrite, /* Message feldolgozasa */
nulldev, /* Service proc. nincs */
birkopen, /* open-nel, PUSH-nal meghivott rutin */
birkclose, /* utolso close-nal vagy pop-nal meghivott r. */
nulldev, /* admin bejegyzes */
&modinfo, /* Modulinformacios struktura */
NULL /* Statisztikakat tartalmazo tablazat cime */
};
struct streamtab birkinfo =
/* A kernel ez alapjan tud tajekozodni a driverben */
{ &birkrinit, /* Read queue-rol informaciok */
&birkwinit, /* Write queue-rol informaciok */
NULL, /* Multiplex. read queue */
NULL /* Multiplex write queue */
};
static int birkwrite(q,mp) /* "put" rutin */
queue_t *q; /* Pointer a WRITE-queue-ra */
mblk_t *mp; /* Az adatra pointer */
{
putnext(q, mp); /* A megkapott uzenet tovabbitasa */
/*
Ha a fenti sor helyett csak egy
freemsg(mp);
sor lenne, akkor ez a korabbi driver modul megfeleloje lenne
*/
}
static int birkopen(q, dev, flag, sflag)
queue_t *q;
dev_t dev;
int flag,sflag;
{
/*
Mivel minden queuen egyforman nem csinal semmit a modul, ezert
nem kell semmi informaciot elrakni
*/
return 0; /* Minden O.K. */
}
static int birkclose(q)
queue_t *q;
{
return 0; /* Minden O.K. */
}