next up previous contents
Next: További deklarációk Up: Egy STREAMS loopback Previous: Egy STREAMS loopback

Driver interface strukturák

#include <sys/types.h>
#include <sys/stream.h>
#include <sys/cmn_err.h>
#include <sys/errno.h>
#include <sys/sysmacros.h>

#define NULL   ((char *)(0))

extern nulldev();
static int lpbkwrite(), lpbkopen(), lpbkclose(), lpbkserv();

static struct module_info modinfo =
/* A stream queue jellemzoit irja le */
  { 0,         /* Modulazonosito szam */
    (char *)0, /* Modul neve */
    0,         /* Minimalis message-meret */
    INFPSZ,    /* Maximalis message-meret */
    1024, 512  /* High; low water mark; 0=nincs ellenorzes */
  };

static struct qinit lpbkwinit =
  /* "write" queue - lefele halado uzenetek queueja */
  { putq,      /* A message megy a service rutinnak */
    lpbkserv,  /* Service procedure */
    lpbkopen,  /* open-nel meghivott rutin */
    lpbkclose, /* utolso close-nal lesz vegrehajtva */
    nulldev,   /* admin bejegyzes (csak a 3bnet-hez kell) */
    &modinfo,  /* Modulinformacios struktura */
    NULL       /* Statisztikakat tartalmazo tablazat */
  };

static struct qinit lpbkrinit =
  /* "read" queue */
  { nulldev,   /* Message feldolgozasa */
    lpbkserv,  /* Service procedure */
    lpbkopen,  /* open-nel meghivott rutin */
    lpbkclose, /* utolso close-nal meghivott rutin */
    nulldev,   /* admin bejegyzes */
    &modinfo,  /* Modulinformacios struktura */
    NULL       /* Statisztikakat tartalmazo tablazat cime */
  };

struct streamtab lpbkinfo =
  /* A kernel ez alapjan tud tajekozodni a driverben */
  { &lpbkrinit, /* Read queue-rol informaciok */
    &lpbkwinit, /* Write queue-rol informaciok */
    NULL,       /* Multiplexer read queue */
    NULL        /* Multiplexer write queue */
  };
Itt érdemes megjegyezni azt, hogy ha a driver valamelyik queueja tartalmaz service rutint, és a put rutin azon a queuen nem csinálna semmit az üzenettel, csak továbbadná, akkor az ahhoz a sorhoz tartozó qinit strukturában put rutinként jegyezzük be a putq() kernel segédrutint. Itt kihasználtuk azt, hogy a putq() egy függvény, és nem makro, ezért a memóriabeli címére hivatkozhatunk.



Csizmazia Balazs
Tue Apr 2 00:06:27 MET DST 1996