"Neta"   1番目のユニット"Netb"   2番目のユニット
OS とは独立してリンクされ、システム起動時に以下のコマンドで起動される。
kerext netdrv [!優先度] (デフォールト優先度は 25)
以下の属性データをサポートする。
| R | 読み込みのみ可 | 
| W | 書き込みのみ可 | 
| RW | 読み込み / 書き込み可 | 
/* NEDRV データ番号 */
typedef enum {
    /* 個別属性 */
    DN_NETEVENT     = -100,
    DN_NETRESET     = -103,
    DN_NETADDR      = -105,
    DN_NETDEVINFO   = -110,
    DN_NETSTINFO    = -111,
    DN_NETCSTINFO   = -112,
    DN_NETRXBUF     = -113,
    DN_NETRXBUFSZ   = -114
} NetDrvDataNo;
DN_NETEVENT :
data: ID
事象通知用メッセージバッファID を取得 / 設定する。
DN_NETREST :
data: W
任意のデータの書き込み、または読み込みにより、ネットワークアダプタを リセットして動作を再開する。(読み込みでもリセットされる点に注意)。
DN_NETADDR :
data:   NetAddr
typedef struct  {
    UB    c[6];
} NetAddr;
ネットワークアダプタに設定されているイサーネット物理アドレスを取得する。
DN_NETDEVINFO :
data:   NetDevInfo
#define L_NETPNAME  (40)     /* 製品名長さ */
typedef struct {
    UB    name[L_NETPNAME];  /* 製品名(ASCII) */
    UW    iobase;            /* I/O 開始アドレス */
    UW    iosize;            /* I/O サイズ */
    UW    intno;             /* 割り込み番号 */
    UW    kind;              /* ハードウェア種別インデックス */
    UW    ifconn;            /* 接続コネクタ */
    W     stat;              /* 動作状態 (>= 0: 正常) */
} NetDevInfo;
ネットワークアダプタのデバイス情報を取得する。
#define IFC_UNKNOWN (0) /* 不明 / デフォールト */ #define IFC_AUI (1) /* AUI (10 Base 5) */ #define IFC_TPE (2) /* TPE (10 Base T) */ #define IFC_BNC (3) /* BNC (10 Base 2) */ #define IFC_100TX (4) /* 100 Base TX */ #define IFC_100FX (5) /* 100 Base FX */ #define IFC_AUTO (6) /* Auto */
DN_NETSTINFO :
data:   NetStInfo
typedef struct  {
    UW    rxpkt;      /* 受信したパケット数 */
    UW    rxerr;      /* 受信エラー発生回数 */
    UW    misspkt;    /* 受信して廃棄したパケット数 */
    UW    invpkt;     /* 不正パケット数 */
    UW    txpkt;      /* 送信パケット(要求)数 */
    UW    txerr;      /* 送信エラー発生回数 */
    UW    txbusy;     /* 送信ビジー回数 */
    UW    collision;  /* コリジョン数 */
    UW    nint;       /* 割り込み発生回数 */
    UW    rxint;      /* 受信割り込み回数 */
    UW    txint;      /* 送信割り込み回数 */
    UW    overrun;    /* ハードオーバーラン回数 */
    UW    hwerr;      /* ハードエラー回数 */
    UW    other[3];   /* その他 */
} NetStInfo;
ネットワークアダプタの統計情報を取得する。
DN_NETCSTINFO :
data: NetStInfo
ネットワークアダプタの統計情報をを取得し、 取得後に、すべての状態を 0 にクリアする。
DN_NETRXBUF :
data: VP
受信バッファを設定する。
受信バッファは、DN_NETRXBUFSZ で設定した最大受信パケットサイズ以上の領域を
持っていなくてはいけない。
NULL を設定すると、今まで設定した受信バッファをすべて廃棄する。
パケットの受信を行うためには、あらかじめ、適当な数の受信バッファを設定して
おく必要がある。パケットを受信すると設定された受信バッファのうちの 1 つに
データを設定して、DN_NETEVENT で設定されたメッセージバッファに受信イベントを
通知する。受信することにより、設定されていた受信バッファが 1 つ減るため、
新たな受信バッファを設定する必要がある。
受信バッファはメモリ常駐でなくてはいけないが、一般のアプリケーションでは
使用しない前提のため、アクセスに関してのチェックは行われない。
DN_NETRXBUFSZ :
data:   NetRxBufSz
typedef struct {
    W     minsz;     /* 最小受信パケットサイズ */
    W     maxsz;     /* 最大受信パケットサイズ */
} NetRxBufSz;
受信するパケットの最大、最小サイズを取得 / 設定する。
受信したパケットのサイズが設定した範囲外のとき、そのパケットは廃棄される。
デフォールトは、minsz = 60、maxsz = 1520 である。
設定した値が、不正なときはエラーとなる。
ただし、maxsz が、ドライバで定義されている最大値を超えるときは、
エラーとはならずに最大値が設定される。
| データ番号: | 0 (W) | 
| データ数: | 書き込みバイト数 | 
一回の書き込みを一つのパケットとして送信を行う。
送信可能な最大パケットサイズを超えた場合はエラーとなる。
送信ができないときは、ER_BUSY となる。
DN_NETEVENT で設定されたメッセージバッファに、以下のメッセージを事象通知する。
typedef struct {
    UH    len;       /* 受信したデータのバイト数 */
    VP    buf;       /* 受信バッファアドレス */
} NetEvent;
上位 (TCPIP) での標準的な使用方法は以下のようになる。
1. デバイスを排他書き込みオープンする。
2. 物理アドレスを読み込む。(DN_NETADDR)
3. 受信バッファサイズを設定する。(DN_NETRXBUFSZ)
4. 受信バッファを適当な数だけ設定する。 (DN_NETRXBUF)
5. 事象通知用メッセージバッファ ID を書き込む。(DN_NETEVENT)
6. 事象通知用メッセージバッファの待ち、および送信要求の待ちに入る。
       受信メッセージのとき
           受信したパケットを処理する。
           受信バッファを補充設定する。(DN_NETRXBUF)
      送信要求のとき
      送信可メッセージのとき
           送信するパケットがあれば、送信する。(データ番号 0)
7. 受信バッファを廃棄する。(DN_NETRXBUF への NULL 書き込み)
8. 事象通知用メッセージバッファを空にする。
9. デバイスをクローズする。
上位 (TCPIP) で、排他書き込みオープンすることにより、 他のユーティリティにより、デバイスを読み込みオープンして、 ネットワークデバイス情報、ネットワーク統計情報を取得することが できる。また、異常時にリセットすることができる。
ドライバファイル (netdrv) のレコードタイプ 15 のレコードに、 サポートしているネットワークアダプタのハードウェア種別 (kind) と 名称 (name) を示す以下の形式のデータが入っている。
  UH kind-1, TC name-1[], TNULL
  UH kind-2, TC name-2[], TNULL
          :       :
  UH 0 (終了)
以下にドライバレコードの具体的な内容を示す。
0x0000 "使用しない\0" 0x0001 "Intel EE−PRO/10[ISA]\0" 0x0107 "Intel EE−PRO/100[PCI]\0" 0x0002 "3Com 3C509[ISA]\0" 0x0102 "3Com 3C590/595[PCI]\0" 0x0103 "3Com 3C900/905[PCI]\0" 0x0202 "3Com 3C589[PCカード]\0" 0x0004 "NE2000互換[ISA]\0" 0x0104 "NE2000互換[PCI]\0" 0x0204 "NE2000互換[PCカード]\0" 0x0106 "DEC 21140互換[PCI]\0" 0x0108 "Realtek RTL8139[PCI]\0" 0x0100 "自動検出[PCI]\0" 0
DEVCONF ファイルの以下のエントリによりコンフィグレーションを行う。
  NETDEV0  kind [ioaddr] [irq]  -- 1 番目のユニット
  NETDEV1  kind [ioaddr] [irq]  -- 2 番目のユニット
  kind : ハードウェア種別 = CCCC FBBB KKKK KKKK
      C : 接続コネクタ指定
          NetDevInfo の ifconn と同じ。
          通常は 0 (IFC_UNKNOWN) を指定する。
      F : 強制オープン指定
          = 0: デバイスをオープンしたときに動作の初期化を行なう。
               PC カードでは挿入されていても、オープンされていな
               ければ、電源を供給しない。(オープンに多少時間がかかる)。
          = 1: デバイスを検出したときに動作の初期化を行なう。
               PC カードでは挿入されている間、常に電源を供給する。
          WOL(Wakeup On LAN) 機能を有しているネットワークアダプタでは、
          F = 0 を指定した場合に、WOL 機能が有効になる。
      B..K : ハードウェア種別 (B : バスタイプ)
             B = 0 : ISA、1 : PCI、2 : PC カード
             ドライバレコードで設定されている値。
  ioaddr: I/O 開始アドレス
      0 (省略) は自動検出/設定となる。
  irq:    割り込み番号
      0 (省略) は自動検出/設定となる。