"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 (省略) は自動検出/設定となる。