JP2793489B2 - 共通データ・リンク・インターフェース - Google Patents

共通データ・リンク・インターフェース

Info

Publication number
JP2793489B2
JP2793489B2 JP5331395A JP33139593A JP2793489B2 JP 2793489 B2 JP2793489 B2 JP 2793489B2 JP 5331395 A JP5331395 A JP 5331395A JP 33139593 A JP33139593 A JP 33139593A JP 2793489 B2 JP2793489 B2 JP 2793489B2
Authority
JP
Japan
Prior art keywords
ndd
filter
status
network
demultiplexer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP5331395A
Other languages
English (en)
Other versions
JPH06303286A (ja
Inventor
キュスン・チャン
ロン・エドワード・ホール
グレゴリー・スコット・ジョイス
ポール・デーヴィド・マズラナ
ランス・ウォレン・ラッセル
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPH06303286A publication Critical patent/JPH06303286A/ja
Application granted granted Critical
Publication of JP2793489B2 publication Critical patent/JP2793489B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/40Network security protocols
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/30Definitions, standards or architectural aspects of layered protocol stacks
    • H04L69/32Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、データ処理システムに
関し、具体的には、複数のデータ・フレームワークをサ
ポートするための共通インターフェースに関する。
【0002】
【従来の技術】データ処理業界では、さまざまな異なる
データ・プロトコルが開発されているが、そのそれぞれ
に特定の応用分野または用途での利点と欠点がある。た
とえば、BSDは、UNIX(UNIX System Laboratories,
Inc.の登録商標)オペレーティング・システムとの互換
性を有する通信プロトコルを実施するため、ソケットと
して知られるフレームワークを使用する、ネットワーク
・コードを提供する。ソケット・フレームワークに基づ
く多数の通信プロトコルが作成されており、TCP/I
Pが最も有名である。フレームワークとは、本質的に、
アプリケーション・プログラムから呼び出すことがで
き、データ転送に使用される基礎プロトコルから独立し
たデータ通信機能を提供する、プログラミング・インタ
ーフェースまたは1組のライブラリである。したがっ
て、特定のフレームワークのさまざまな版が、異なる基
礎プロトコルをサポートし得る。たとえば、ソケット
は、TCP/IP、SNAまたはArcNetをサポー
トできる。フレームワークとプロトコルは、既に良く知
られており、例えば、IBM出版物"AIX Version 3.2 C
ommunication Programming Concepts"、資料番号SC23-2
206-03(1992年9月)にも記載されている。
【0003】
【発明が解決しようとする課題】AT&Tは、UNIX
通信プロトコルを開発するためのフレームワークとして
ストリームを導入した。このストリーム・フレームワー
クは、ソケット・フレームワークの一部の欠点に対処し
たものであり、データ処理業界で広く使用されるように
なった。問題は、ソケットとストリームが完全に独立の
フレームワークであるという点である。したがって、オ
ペレーティング・システム提供者が新しい通信プロトコ
ルの追加を望む場合、その開発者は、その新プロトコル
を開発する前に、どちらか一方のフレームワークを選択
しなければならない。複数のフレームワークのサポート
を提供するためには、異なるハードウェア・アダプタ
と、そのようなハードウェア・アダプタに対応する異な
るデバイス・ドライバが必要である。
【0004】オペレーティング・システム開発業者が、
異なるプロセッサ、バスなどを有する複数の基礎データ
処理システム用の共通オペレーティング・システムを提
供しようとする時、この問題はさらに大きくなる。この
状況では、オペレーティング・システム提供者が、異な
るプロセッサ(たとえば、80486、68020また
はRISCマイクロプロセッサ)のためだけでなく、異
なるフレームワークおよび異なるハードウェア・アダプ
タのためにも異なるコード・サポートを有することにな
る。これは、より大きな開発資源要件と、ハードウェア
・アダプタ要件の増大を招く。
【0005】本発明の目的は、改良されたデータ処理シ
ステムを提供することである。
【0006】本発明のもう1つの目的は、改良されたデ
ータ通信サブシステムを提供することである。
【0007】本発明のもう1つの目的は、複数の通信フ
レームワークをサポートする単一のハードウェア・イン
ターフェースを提供することである。
【0008】本発明のもう1つの目的は、複数の通信フ
レームワークをサポートするハードウェア・アダプタへ
の単一のドライバ・インターフェースを提供することで
ある。
【0009】
【課題を解決するための手段】共通データ・リンク・イ
ンターフェース(CDLI)は、ネットワーク・デバイ
ス・ドライバおよびデータ・リンク・プロバイダ用のフ
レームワークを提供する。このフレームワークを用いる
と、ソケット・プロトコルとストリーム・プロトコルが
共存でき、単一のデバイス・ドライバを共用できるよう
になる。このフレームワークは、ソケットおよびプロト
コルから独立しており、共通の機能を提供するだけであ
る。一般ユーザは、ソケットとDLPI(後述する)を
介してCDLIに間接にインターフェースする。
【0010】CDLIは、3つの構成要素、すなわちネ
ットワーク・デバイス・ドライバ、ネットワーク・デマ
ルチプレクサ、およびネットワーク・サービスからな
る。ネットワーク・デバイス・ドライバ(NDD)モデ
ルは、ソケットのIFNETおよびストリームのデータ
・リンク・プロバイダ・インターフェース(DLPI)
データ・リンク層のどちらからも使用できる、ネットワ
ーク・ベースのデバイスへのコンパクトで単純なインタ
ーフェースを定義する。共通データ・リンク受信機能
は、ネットワーク・デマルチプレクサによって提供され
る。デマルチプレクサは、ネットワーク・パケットの配
布に使用される受信フィルタを指定する。ネットワーク
・サービス(NS)は、NDD、ネットワーク・デマル
チプレクサおよびNSユーザ(データ・リンクおよびプ
ロトコル)にサービスを供給する、1組のカーネル機能
である。NSは、CDLIをつなぎあわせる糊である。
【0011】
【実施例】図1に、従来の包括データ・リンク制御11
またはフレームワークの典型を示す。フレームワーク
は、アプリケーション・ユーザ13またはカーネル・ユ
ーザ15に、データ転送用データ・リンクを制御するた
めの共通の1組のコマンドを提供する、包括インターフ
ェース定義を定義する。カーネル・ユーザ15は、通信
メモリのバッファ・プール21にアクセスすることがで
き、fpカーネル・サービスによってデバイス・ドライバ
(dd)エントリ・ポイントを呼び出す。カーネル上にい
るアプリケーション・ユーザ13は、標準インターフェ
ース対カーネル・デバイス・ドライバにアクセスし、フ
ァイル・システムが、ddエントリ・ポイントを呼び出
す。データ転送は、一般に、ユーザ空間とカーネル空間
の間でのデータの移動を必要とする。アプリケーション
・ユーザ13は、アプリケーションまたはアクセス方式
として、カーネル上に常駐する。カーネル・ユーザ15
は、デバイス・マネージャのカーネル・プロセスとして
カーネル内に常駐する。ファイル入出力サブシステム1
7は、ファイル記述子およびファイル・ポインタ・サブ
ルーチンを、スイッチ・テーブル(図示せず)のファイ
ル・ポインタ(fp)アクセスに変換する。DLCデバイ
ス・マネージャ19は、ファイル入出力サブシステムと
通信入出力デバイス・ドライバの間でインターフェース
をとる際にバッファ・プールにアクセスする。このデバ
イス・マネージャは、上側の複数のユーザ、ならびに下
側の複数のデバイス・ドライバおよびアダプタをサポー
トできる。バッファ・プール21は、通信サブシステム
用のデータ・バッファ・サービスを提供する。通信入出
力デバイス・ドライバ23は、ハードウェア・アダプタ
の入出力レジスタおよびDMAレジスタを制御し、受信
パケットをDLCデバイス・マネージャに経路指定す
る。アダプタ25は、通信媒体に接続される。
【0012】マルチユーザ・マルチアダプタ構成27
を、図2に示す。これには、複数のアプリケーション・
ユーザ29と複数のカーネル・ユーザ35が、対応する
アダプタ33を伴う複数の通信入出力デバイス・ドライ
バ31と共に含まれる。この従来式の手法には、異なる
フレームワークのために複数の入出力デバイス・ドライ
バが必要になるという問題がある。
【0013】以下で、共通機能と、本発明の共通データ
・リンク・インターフェースを使用してそれらの機能を
実現する方法とを説明する。これらの機能は、一般に下
記の順序で発生する。 1 ネットワーク・デマルチプレクサの追加 2 ネットワーク・デバイス・ドライバの追加 3 ネットワーク・デバイス・ドライバの使用の割振り 4 入力パケット用受信フィルタの追加 5 状況処理関数の追加 6 ネットワーク・デマルチプレクサの追加
【0014】ネットワーク・デマルチプレクサの追加 図3を参照すると、ネットワーク・デマルチプレクサ1
4は、ネットワーク・デバイス・ドライバ(NDD)12
からの入力パケットと非同期状況とを、関心を示したN
Sユーザに(ns_add_filterまたはns_add_statusを介し
て)経路指定する責任を負う。たとえば、802.2L
LC用デマルチプレクサは、DSAP(と、おそらくは
ethertype)を使用して、どのユーザが入力パケットを
受け取るかを決定する。デマルチプレクサの関数nd_add
_filter(ns_add_filterを介してアクセスされる)と関
数nd_del_filter(ns_del_filterを介してアクセスされ
る)は、受信フィルタの追加と除去を処理する。ネット
ワーク・デマルチプレクサ14は、フィルタと関連ユー
ザのリストを保持する責任を負う。構成後、ネットワー
ク・デマルチプレクサ14は、ns_add_demuxサービスに
よってシステムから使用できるようになる。
【0015】下記の表に、ns_add_demuxサービスの例を
示す。
【表1】 struct ns_demuxer demuxer; demuxer.use_nsdmx = TRUE; demuxer.add_filter = eth_add_filter; demuxer.del_filter = eth_del_filter; demuxer.add_status = eth_add_status; demuxer.del_status = eth_del_status; demuxer.receive = eth_receive; demuxer.status = eth_status; demuxer.response = eth_response; ns_add_demux(NDD_ETHER, &demuxer);
【0016】ネットワーク・デバイス・ドライバの追加 ネットワーク・デバイス・ドライバは、構成後に、ND
Dユーザから使用できるようになる必要がある。これ
は、ns_attachネットワーク・サービスによって達成さ
れる。このサービスは、ネットワーク・サービスの、使
用可能ネットワーク・デバイス・ドライバのリストにN
DDを追加する。図4にこれを示す。上側のブロック3
0に示すように、ndd構造体32は、NULLを指す次ns_nd
dnet値(next)を有する。&dd.ndd34によってアドレ
スされる新ネットワーク・デバイスを追加しなければな
らない。この新ネットワーク・デバイスは、データ構造
36を有する。このデバイス・ドライバのNDDは、下
側のブロック40のnddデータ構造であるndd構造体32
に示すように、使用可能ネットワーク・デバイス・ドラ
イバのリストに追加される。ブロック40は、ネットワ
ーク・デバイス・ドライバを追加した後の、結果として
得られるデータ構造の相互関係を示すものである。
【0017】ns_detachサービスは、ns_attachの逆であ
る。すなわち、このサービスは、使用可能デバイスのリ
ストからネットワーク・デバイスを除去する。
【0018】ネットワーク・デバイス・ドライバの使用
の割振り デバイス・ドライバが(ns_attachを使用して)システ
ムから使用できるようになった後、ユーザはそのデバイ
ス・ドライバにアクセスできる。デバイス・ドライバの
ユーザは、ns_allocネットワーク・サービスを介してN
DDへのアクセス権を得る。このサービスは、NDDの
使用を割振り(図5のndd構造体42を介して)、必要
があればNDDをオープンする。デバイスへのアクセス
権の放棄は、ns_freeネットワーク・サービスを介して
行われる。具体的なステップを、図5に示す。
【0019】入力パケット用受信フィルタの追加 入力パケット(IP)を受け取るため、ユーザは、関心
のあるパケットのタイプを指定しなければならない。I
Pは、たとえばethertype 0x800パケットが欲しいこと
を示す。この登録は、ns_add_filterネットワーク・サ
ービスを介して実施される。指定されたNDDのネット
ワーク・デマルチプレクサは、そのフィルタおよびユー
ザのリストに、この受信フィルタを追加する。フィルタ
は、ns_del_filterサービスによって除去される。80
2.3ローカル・エリア・ネットワーク・パケットの受
信パケットの流れを、図6の下のボックス50に示す。
フィルタ構造は、符号52で定義され、符号60で示す
802.2LAN用の特定のフィルタ・パラメータを有
する。ユーザは、符号54で定義される。
【0020】状況処理関数の追加 ユーザは、NDD状況情報の受け取りを望む場合、ネッ
トワーク・デマルチプレクサに登録しなければならな
い。この登録は、ns_add_statusネットワーク・サービ
スを介して実施される。指定されたNDDのネットワー
ク・デマルチプレクサが、そのフィルタおよびユーザの
リストに状況フィルタを追加する。状況フィルタは、ns
_del_statusサービスによって除去される。
【0021】割り振られたネットワーク・デバイス・ド
ライバの使用 ここで図7を参照すると、NDDユーザは、ns_allocサ
ービスを用いてNDDを割り振った後に、NDDの関数
ndd_output70および関数ndd_ctl72を使用すること
ができる。ndd_outputは、関連するデバイス・ドライバ
74にデータを送るのに使用される。特定のハードウェ
ア・アダプタ用のさまざまなデバイス制御機能および状
況機能が 関数ndd_ctlを介して使用できる。パケット
送信と制御機能発行のためのサンプル・コードを、図7
の下側に示す。
【0022】機能的相互作用 図8に、物理デバイス26およびネットワーク・デマル
チプレクサ14の制御に使用されるネットワーク・デバ
イス・ドライバ12と、ネットワーク・サービス16
と、CDLIユーザ80との間のインターフェースおよ
び相互作用を示す。CDLIユーザは、たとえば図3の
ソケット・フレームワーク22を使用している可能性が
あり、したがって図8のCDLIユーザ80とネットワ
ーク・サービス16の間のインターフェースが図3のイ
ンターフェース41になる。あるいは、CDLIユーザ
が、図3のストリーム・フレームワーク24を使用して
いる可能性があり、したがって図8のCDLIユーザ8
0とネットワーク・サービス16の間のインターフェー
スが図3のインターフェース43になる。次に、図8に
示した関数またはルーチンのそれぞれを説明する。
【0023】ネットワーク・サービスの概観 以下のルーチンは、それぞれのルーチンの定義によって
示されるように、ネットワーク・サービスのさまざまな
態様を提供する。
【0024】ユーザ用ネットワーク・サービス(ソケッ
ト、DLPI)。 ns_alloc 指定されたネットワーク・デバイスの使用を割り振る。 ns_free ネットワーク・デバイスへのアクセス権を放棄する。 ns_add_filter フィルタに一致するパケットの受信を可能にする受信フ
ィルタを追加する。 ns_del_filter 受信フィルタを削除し、フィルタに一致するパケットの
受信を不能にする。 ns_add_status 非同期状況の経路指定用フィルタを追加する。 ns_del_status 前に追加された状況フィルタを削除する。
【0025】ネットワーク・デマルチプレクサ用ネット
ワーク・サービス。 ns_add_demux 指定されたタイプのネットワーク・デバイス用デマルチ
プレクサを追加する。 ns_del_demux 指定されたタイプのネットワーク・デバイス用デマルチ
プレクサを除去する。
【0026】ネットワーク・デバイス・ドライバ用ネッ
トワーク・サービス。 ns_attach 使用可能NSデバイス連鎖にデバイスを置く。 ns_detach 使用可能デバイス連鎖からデバイスを除去する。
【0027】以下に、上記のネットワーク・サービス・
ルーチン群を実施するための詳細な実施情報を提供す
る。
【0028】名前 ns_alloc − ネットワーク・デバイス・ドライバの使
用を割り振る。
【0029】摘要 #include <sys/ndd.h> int ns_alloc ( nddname, nddpp) char *nddname; struct ndd **nddpp;
【0030】パラメータ nddname 割り振ろうとするデバイス名。 nddpp ndd構造体を指すポインタのアドレス。
【0031】解説 このネットワーク・サービスは、NSデバイス連鎖を見
回って、指定されたnddnameを有するデバイス・ドライ
バを見つける。一致が見つかった場合、指定されたデバ
イス・ドライバの参照カウントを増分する。参照カウン
トを増分して1になる場合には、ndd構造体で指定され
たルーチンndd_open()を呼び出して、そのデバイス・ド
ライバをオープンする。
【0032】例 struct ndd *nddp; error = ns_alloc("en0", &nddp);
【0033】戻り値 一致が見つかり、デバイスのオープンに成功した場合、
指定されたデバイスのndd構造体を指すポインタをnddpp
に記憶する。一致が見つからないか、またはデバイスの
オープンに成功しなかった場合、非0値を返す。 0 − 動作に成功した。 ENODEV − 無効なネットワーク・デバイスを示す。 ENOENT − このデバイス用に使用可能なネットワーク
・デマルチプレクサがない。 他の値は、NDDのオープンからの戻り値。
【0034】ファイル net/ns.c
【0035】関連情報 インターフェース:ns_free()、ndd_open() ネットワーク・デバイス・ドライバ
【0036】名前 ns_free − ネットワーク・デバイスへのアクセス権
を放棄する。
【0037】摘要 #include <sys/ndd.h> void ns_free ( nddp) struct ndd *nddp;
【0038】パラメータ nddp 使用から解放しようとするネットワーク・デバイ
スのndd構造体を指定する。
【0039】解説 このネットワーク・サービスは、指定されたndd構造体
の参照カウントを減分する。参照カウントが0になった
場合、ndd構造体内で指定されたルーチンndd_close()を
呼び出す。
【0040】例 struct ndd *nddp; ns_free(nddp);
【0041】戻り値 なし
【0042】ファイル net/ns.c
【0043】関連情報 インターフェース:ns_alloc() ネットワーク・デバイス・ドライバ
【0044】名前 ns_add_filter − パケットの受信を可能にするため
に受信フィルタを登録する。
【0045】摘要 #include <sys/cdli.h> int ns_add_filter ( nddp, filter, len, ns_user) struct ndd *nddp; caddr_t filter; int len; struct ns_user *ns_user;
【0046】パラメータ nddp この追加要求の対象となるnddを指定する。 filter 受信フィルタを指すポインタ。 len パラメータfilterの指す受信フィルタのバイ
ト単位の長さ。 ns_user ユーザを定義するns_user構造体を指すポイ
ンタ。
【0047】解説 ns_add_filterネットワーク・サービスは、パケット受
信用の受信フィルタを登録するために呼び出される。こ
れによって、ネットワーク・デマルチプレクサがパケッ
トを適当なユーザに経路指定できるようになる。この追
加要求は、指定されたNDD用のデマルチプレクサの関
数nd_add_filterに渡される。ns_add_filterの呼出し側
は、ns_freeを呼び出す前にフィルタを放棄する責任を
負う。
【0048】例 struct ns_8022 dl; /* 802.2LAN用フィルタ
*/ struct ns_user ns_user; /* ユーザを記述する */ dl.filtertype = NS_LLC_DSAP_SNAP; dl.dsap = 0xaa; dl.orgcode[0] = 0x0; dl.orgcode[1] = 0x0; dl.orgcode[2] = 0x0; dl.ethertype = 0x0800; ns_user.isr = ipintr; ns_user.protoq = &ipintrq; ns_user.netisr = NETISR_IP; ns_user.pkt_format = NS_PROTO_SNAP; ns_add_filter(nddp, &dl, sizeof(dl), &ns_user);
【0049】戻り値 0 − 動作に成功した。 ENODEV − 無効なネットワーク・デバイスを示す。 ENOENT − このデバイス用に使用可能なネットワーク
・デマルチプレクサがない。 他の値は、ネットワーク・デマルチプレクサからの戻り
値。
【0050】ファイル net/ns.c
【0051】関連情報 インターフェース:ns_del_filter() ネットワーク・デマルチプレクサ
【0052】名前 ns_del_filter − 受信フィルタを削除する。
【0053】摘要 #include <sys/cdli.h> int ns_del_filter ( nddp, filter, len) struct ndd *nddp; caddr_t filter; int len;
【0054】パラメータ nddp この削除要求の対象となるnddを指定する。 filter 受信フィルタを指すポインタ。 len 受信フィルタのバイト単位の長さ。
【0055】解説 このネットワーク・サービスは、対応するネットワーク
・デマルチプレクサから受信フィルタを削除する。これ
は、そのフィルタに一致するパケットのパケット受信を
不能にするという効果がある。この削除要求は、指定さ
れたNDDのデマルチプレクサの関数nd_del_filterに
渡される。
【0056】例 struct ns_8022 dl; /* 802.2LAN用フィルタ
*/ dl.filtertype = NS_LLC_DSAP_SNAP; dl.dsap = 0xaa; dl.orgcode[0] = 0x0; dl.orgcode[1] = 0x0; dl.orgcode[2] = 0x0; dl.ethertype = 0x0800; ns_del_filter(nddp, &dl, sizeof(dl));
【0057】戻り値 0 − 動作に成功した。 ENODEV − 無効なネットワーク・デバイスを示す。 他の値は、ネットワーク・デマルチプレクサからの戻り
値。
【0058】ファイル net/ns.c
【0059】関連情報 インターフェース:ns_add_filter()およびns_alloc()
【0060】名前 ns_add_status − 非同期状況の経路指定用の状況フ
ィルタを追加する。
【0061】摘要 #include <sys/cdli.h> int ns_add_status (nddp, statfilter, len, ns_statuser) struct ndd *nddp; caddr_t statfilter; int len; struct ns_statuser *ns_statuser;
【0062】パラメータ nddp この追加要求の対象となるndd構造体を
指すポインタ。 statfilter 状況フィルタを指すポインタ。 len statfilterのバイト単位の長さ。 ns_statuser このユーザを定義するns_statuser構造
体を指すポインタ。
【0063】解説 ns_add_statusネットワーク・サービスは、状況フィル
タの登録のために呼び出される。この追加要求は、指定
されたNDDのデマルチプレクサの関数nd_add_status
に渡される。これによって、ユーザが、指定されたデバ
イスから非同期状況情報を受信できるようになる。
【0064】注 非同期状況を入手できるようになった時、ネットワーク
・デマルチプレクサがユーザの状況処理関数を呼び出
す。ユーザの状況処理関数は、直接に呼び出されるの
で、この状況処理関数は、スケジューリングされるルー
チンになることができない。
【0065】例 struct ns_statuser user; struct ns_com_status filter; filter.mask = NDD_HARD_FAIL; filter.sid = 0; user.isr = status_fn; user.isr_data = whatever_makes_sense; error = ns_add_status(nddp, &filter, sizeof(filte
r),&user);
【0066】戻り値 0 − 動作に成功した。 ENODEV − 無効なデバイスを示す。 他の値は、ネットワーク・デマルチプレクサからの戻り
値。
【0067】ファイル net/ns.c
【0068】関連情報 インターフェース:ns_del_status() ネットワーク・デマルチプレクサ
【0069】名前 ns_del_status − 前に追加された状況フィルタを削
除する。
【0070】摘要 #include <sys/cdli.h> int ns_del_status (nddp, statfilter, len) struct ndd *nddp; caddr_t statfilter; int len;
【0071】パラメータ nddp この削除要求の対象となるndd構造体を指
すポインタ。 statfilter 状況フィルタを指すポインタ。 len statfilterのバイト単位の長さ。
【0072】解説 ns_del_statusネットワーク・サービスは、対応するネ
ットワーク・デマルチプレクサから前に追加された状況
フィルタを削除するために呼び出される。この削除要求
は、指定されたNDDのデマルチプレクサの関数nd_del
_statusに渡される。これには、指定されたデバイスか
らの非同期状況通知を不能にする効果がある。
【0073】例 /* フィルタ・パラメータはns_add_statusの呼出しに使
用されたものと同一。 */ error = ns_add_status(nddp, &filter,sizeof(filte
r));
【0074】戻り値 0 − 動作に成功した。 ENODEV − 無効なデバイスを示す。 EINVAL − 無効なパラメータを示す。 他の値は、ネットワーク・デマルチプレクサからの戻り
値。
【0075】ファイル net/ns.c
【0076】関連情報 インターフェース:ns_add_status() ネットワーク・デマルチプレクサ
【0077】名前 ns_add_demux − 指定されたタイプのネットワーク・
インターフェース用のデマルチプレクサを追加する。
【0078】摘要 #include <sys/ndd.h> #include <sys/cdli.h> int ns_add_demux ( ndd_type, demux) int ndd_type; struct ns_demux *demux;
【0079】パラメータ ndd_type 追加しようとするデマルチプレクサのインタ
ーフェース・タイプ。 demux デマルチプレクサを定義する構造体ns_demux
を指すポインタ。
【0080】解説 このネットワーク・サービスは、使用可能ネットワーク
・デマルチプレクサのリストに、指定されたデマルチプ
レクサを追加する。デマルチプレクサは、ネットワーク
・インターフェース・タイプごとに1つしか存在できな
い。インターフェース・タイプは、同じ特性を有するネ
ットワーク・デバイスの特定のクラス(すなわち、イー
サネット、トークン・リング)を記述するものである。
sys/ndd.hにリストされたndd_type値は、SNMPによ
って定義される数である。所望のタイプがndd.hに含ま
れない場合、SNMP値が定義されているならば、その
値を使用しなければならない。定義されていない場合
は、NDD_MAX_TYPEを超える未定義の値を使用することが
できる。
【0081】例 struct ns_demux demuxer; demuxer.add_filter = eth_add_filter; demuxer.del_filter = eth_del_filter; demuxer.add_status = eth_add_status; demuxer.del_status = eth_del_status; demuxer.receive = eth_receive; demuxer.status = eth_status; demuxer.response = eth_response; ns_add_demux(NDD_ISO88023, &demuxer);
【0082】戻り値 0 − 動作に成功した。 EEXIST − 所与のタイプのデマルチプレクサが既に存
在する。 EINVAL − ndd_typeが範囲外。
【0083】ファイル net/ns.c
【0084】関連情報 ネットワーク・デマルチプレクサ、ns_del_demux()
【0085】名前 ns_del_demux − 指定されたタイプのネットワーク・
インターフェース用のデマルチプレクサを削除する。
【0086】摘要 #include <sys/ndd.h> int ns_del_demux ( ndd_type) int ndd_type;
【0087】パラメータ ndd_type 削除しようとするデマルチプレクサのネット
ワーク・インターフェース・タイプ。
【0088】解説 デマルチプレクサが現在使用中でない場合、このネット
ワーク・サービスは、使用可能ネットワーク・デマルチ
プレクサのリストから、指定されたデマルチプレクサを
削除する。デマルチプレクサに関してNDDがオープン
されている場合、そのデマルチプレクサは使用中であ
る。
【0089】例 ns_del_demux(NDD_ISO88023);
【0090】戻り値 0 − 動作に成功した。 ENOENT − 指定されたタイプのデマルチプレクサが存
在しない。 EINVAL − ndd_typeが範囲外。 EBUSY − デマルチプレクサが現在使用中である。
【0091】ファイル net/ns.c
【0092】関連情報 ネットワーク・デマルチプレクサ、ns_add_demux()
【0093】名前 ns_attach − ネットワーク・サブシステムにネット
ワーク・デバイスを付加する。
【0094】摘要 #include <sys/ndd.h> int ns_attach ( nddp) struct ndd *nddp;
【0095】パラメータ nddp 付加しようとするデバイスを記述したndd構造体
を指すポインタ。
【0096】解説 このネットワーク・サービスは、使用可能NSデバイス
連鎖にデバイスを置くために呼び出される。ns_attach
を呼び出した後にNDDはオープンする準備をしなけれ
ばならない。
【0097】注 ndd構造体は、デバイスによって割り振られ、初期設定
される。これは、ピン止めしなければならない。
【0098】例 /* NDD構成中にNDDを追加する例 */ struct ndd ndd; ndd.ndd_name = "en"; ndd.ndd_unit = adap_num; ndd.ndd_addrlen = 6; ndd.ndd_hdrlen = 14; ndd.ndd_mtu = ETHERMTU; ndd.ndd_mintu = 60; ndd.ndd_type = NDD_ETHER; ndd.ndd_flags = NDD_UP | NDD_BROADCAST | NDD_SIMPLEX; ndd.ndd_open = entopen; ndd.ndd_output = entwrite; ndd.ndd_ctl = entctl; ndd.ndd_close = entclose; ns_attach(&ndd);
【0099】戻り値 0 − 動作に成功した。 EEXIST − 使用可能NSデバイス連鎖内にデバイスが
既に存在することを示す。
【0100】ファイル net/ns.c
【0101】関連情報 インターフェース:ns_detach()
【0102】名前 ns_detach − ネットワーク・サブシステムからネッ
トワーク・デバイスを除去する。
【0103】摘要 #include <sys/ndd.h> int ns_detach ( nddp) struct ndd *nddp;
【0104】パラメータ nddp 切り離そうとするデバイスを記述したndd構造体
を指すポインタ。
【0105】解説 このサービスは、使用可能NSデバイスの連鎖からndd
構造体を除去する。
【0106】例 /* nddpは、前に付加されたndd構造体のアドレス */ ns_detach(nddp);
【0107】戻り値 0 − 動作に成功した。 ENOENT − 指定されたndd構造体が見つからなかっ
た。
【0108】ファイル net/ns.c
【0109】関連情報 インターフェース:ns_attach()
【0110】ネットワーク・デマルチプレクサの概観 ネットワーク・デマルチプレクサは、受信データおよび
状況情報を適当なユーザに経路指定するための諸機能を
提供する。デマルチプレクサは、インターフェースから
受け取る可能性のある異なるタイプの受信データを解釈
でき、経路指定できなければならない。たとえば、FD
DIインターフェース用のネットワーク・デマルチプレ
クサ(NDDタイプNDD_FDDI)は、MAC、SMT、作成
者およびLLCのフレームを解釈する必要がある。FD
DIデマルチプレクサは、ns_add_filterネットワーク
・サービス呼出しに使用される受信フィルタ(入力パケ
ット・デマルチプレクシング用の判断基準)のフォーマ
ットを指定する責任も負うことになる。
【0111】ネットワーク・デマルチプレクサは、ns_a
dd_demuxネットワーク・サービスを介してNSに登録す
る。
【0112】NSに登録されるデマルチプレクサは、ネ
ットワーク・インターフェース・タイプ(<sys/ndd.h
>に定義される)ごとに1つしか存在できない。
【0113】ネットワーク・デマルチプレクサは、下記
の関数からなる。 nd_config() この任意指定のエントリ・ポイントは、デマルチプレク
サの構成機能を提供する。 nd_receive() 受信データを適当なNSユーザに経路指定する。 nd_status() 非同期状況を適当なNSユーザに配布する。 nd_add_filter() 受信データの経路指定用の受信フィルタを追加する。 nd_del_filter() 前に指定された受信フィルタを削除する。 nd_add_status() 非同期状況の経路指定用のフィルタを追加する。 nd_del_status() 前に指定された状況フィルタを削除する。
【0114】次に、上記にリストしたネットワーク・デ
マルチプレクサ・ルーチン群を実施するための詳細な実
施情報を提供する。
【0115】名前 nd_config() − ネットワーク・デマルチプレクサ構
【0116】摘要 #include <sys/cdli.h> #include <sys/ndd.h> int nd_config( op, indata, indatalen, outdata,outd
atalen) sysconfig_op_t op; nd_config_t * indata; size_t indatalen; nd_config_t * outdata; size_t outdatalen;
【0117】パラメータ op SYSCONFIG_CONFIGUREまたはSYSCONFIG_UNC
ONFIGUREのどちらか indata デマルチプレクサ構成情報 indatalen indataのバイト単位の長さ outdata 返される構成情報 outdatalen outdataのバイト単位の長さ
【0118】解説 この関数は、ネットワーク・デマルチプレクサの構成を
提供する。SYSCONFIG_CONFIGUREを与えると、デマルチ
プレクサがシステムに構成される。このデマルチプレク
サは、SYSCONFIG_UNCONFIGUREによって除去される。ネ
ットワーク・デマルチプレクサのタイプは、indataに含
まれる。
【0119】注 SYSCONFIG_CONFIGUREの場合、ns_add_demuxネットワー
ク・サービスを呼び出して、指定されたタイプのネット
ワーク・インターフェース用のデマルチプレクサを追加
しなければならない。SYSCONFIG_UNCONFIGUREの場合、n
s_del_demuxを呼び出してデマルチプレクサを除去しな
ければならない。
【0120】戻り値 ns_add_demuxまたはns_del_demuxの戻り値
【0121】関連情報 インターフェース:ns_add_demux()、ns_del_demux() OSF/1 System Extension Guide。
【0122】名前 nd_receive() − NDDからの受信データを処理す
る。
【0123】摘要 #include <sys/ndd.h> #include <sys/mbuf.h> void nd_receive( nddp, m) struct ndd *nddp; struct mbuf *m;
【0124】パラメータ nddp 受信データの起点であるndd構造体のアドレス。 m 受信データを含むmbuf連鎖を指すポインタ。
【0125】解説 この関数は、着信データを処理し、そのデータを適当な
ユーザに経路指定する。この関数は、そのインターフェ
ース・タイプから受信される可能性のある異なるタイプ
のフレームを解釈できなければならない。ネットワーク
・デバイス・ドライバは、有効な受信フレーム(ハード
ウェアによって示される)のすべてを、ネットワーク・
デマルチプレクサ受信関数に渡す。
【0126】注 関数nd_receive()は、割込みに対して安全でなければな
らない。mbuf連鎖の最初のmbufは、M_PKTHDRフォーマッ
トでなければならない。フィールドm_pkthdr.lenは、パ
ケットの全長に設定しなければならない。mbufのフィー
ルドm_nextpktを用いて連鎖することによって、複数の
入力パケットをデマルチプレクサに渡すことができる。
入力パケットをユーザに渡さない場合、関数nd_receive
が、バッファを解放する責任を負う。
【0127】戻り値 この関数には戻り値がない。
【0128】関連情報 ネットワーク・デバイス・ドライバ、mbufサービス
【0129】名前 nd_status() − NDDからの状況情報を処理する。
【0130】摘要 #include <sys/ndd.h> #include <sys/cdli.h> void nd_status( nddp, status) struct ndd *nddp; ndd_stat_t *status;
【0131】パラメータ nddp この情報の起点のデバイスのndd構造体を指定
する。 status ndd_stat_t状況ブロックを指すポインタ。この
状況ブロックは、状況事象に関するデバイス固有の情報
を含む。この状況ブロックは、sys/ndd.hで定義され
る。
【0132】解説 状況事象がネットワーク・デバイス上で発生する時、N
DDが、適当な状況ブロックを作成し、状況関数を呼び
出す。この関数は、状況情報を適当なユーザに経路指定
する責任を負う。
【0133】注 関数nd_status()は、割込みに対して安全でなければな
らない。状況ブロックは、参照によって渡され、この呼
出しの持続期間の間だけ有効である。
【0134】戻り値 この関数には戻り値がない。
【0135】関連情報 ネットワーク・デマルチプレクサ
【0136】名前 nd_add_filter() − 指定されたデバイスの受信フィ
ルタを追加する。
【0137】摘要 #include <sys/ndd.h> #include <sys/cdli.h> int nd_add_filter ( nddp, filter, len, ns_user) struct ndd *nddp; caddr_t filter; int len; struct ns_user *ns_user;
【0138】パラメータ nddp そのデバイスのndd構造体を指定する。 filter 追加しようとする受信フィルタを指す。フォ
ーマットはデマルチプレクサに依存する。 len パラメータfilterの指す受信フィルタのバイ
ト単位の長さ。デマルチプレクサは、この長さが正しい
ことを検査しなければならない。 ns_user このユーザを記述したns_user構造体を指す
ポインタ。
【0139】解説 関数nd_add_filter()は、ns_add_filterネットワーク・
サービス呼出しから呼び出される。ルーチンnd_add_fil
ter()は、指定された受信フィルタを、可能受信パター
ンのリストに追加する。これに続いて、NDDのndd_ctl関
数が、NDD_ADD_FILTER動作とこのパラメータfilterで指
定された値を用いて呼び出される。
【0140】戻り値 0 − 動作に成功した。 EEXIST − 受信フィルタは既に使用中である。 EINVAL − 受信フィルタが無効である。 他の値は、デマルチプレクサに依存する戻り値。
【0141】関連情報 インターフェース:ns_add_filter()
【0142】名前 nd_del_filter() − 指定されたデバイス用の受信フ
ィルタを削除する。
【0143】摘要 #include <sys/ndd.h> #include <sys/cdli.h> int nd_del_filter ( nddp, filter, len) struct ndd *nddp; caddr_t filter; int len;
【0144】パラメータ nddp この削除要求のデバイスのndd構造体を指定す
る。 filter 削除しようとする受信フィルタを指す。フォー
マットはデマルチプレクサに依存する。 len パラメータfilterの指す受信フィルタのバイト
単位の長さ。デマルチプレクサは、この長さが正しいこ
とを検査しなければならない。
【0145】解説 nd_del_filter()は、ns_del_filterネットワーク・サー
ビス呼出しから呼び出される。ルーチンnd_del_filte
r()は、可能受信パターンのリストから、指定された受
信フィルタを除去する。これに続いて、NDDのndd_ctl関
数が、NDD_DEL_FILTER動作とこのパラメータfilterで指
定された値を用いて呼び出される。
【0146】戻り値 0 − 動作に成功した。 EINVAL − 無効な受信フィルタを示す。 他の値は、デマルチプレクサに依存する戻り値。
【0147】関連情報 インターフェース:ns_del_filter()およびns_add_demu
x()
【0148】名前 nd_add_status() − 指定されたデバイス用の状況処
理関数を追加する。
【0149】摘要 #include <sys/ndd.h> #include <sys/cdli.h> int nd_add_status ( nddp, statfilter, len, ns_statuser) struct ndd *nddp; caddr_t statfilter; int len; struct ns_statuser *ns_statuser;
【0150】パラメータ nddp この追加要求のデバイスのndd構造体を
指定する。 statfilter 追加しようとする状況フィルタを指す。
フォーマットはデマルチプレクサに依存する。 len パラメータstatfilterの指す状況フィル
タのバイト単位の長さ。 ns_statuser このユーザを記述したns_statuser構造
体を指すポインタ。
【0151】解説 関数nd_add_status()は、ns_add_statusネットワーク・
サービス呼出しから呼び出される。ルーチンnd_add_sta
tus()は、指定された状況フィルタを状況処理関数のリ
ストに追加する。これに続いて、NDDのndd_ctl関数が、
NDD_ADD_STATUS動作とこのパラメータstatfilterで指定
された値を用いて呼び出される。
【0152】戻り値 0 − 動作に成功した。 EINVAL − 状況フィルタが無効である。 他の値は、デマルチプレクサに依存する戻り値。
【0153】関連情報 インターフェース:ns_add_status()
【0154】名前 nd_del_status() − 指定されたデバイス用の状況フ
ィルタを削除する。
【0155】摘要 #include <sys/ndd.h> #include <sys/cdli.h> int nd_del_status ( nddp, statfilter, len) struct ndd *nddp; caddr_t statfilter; int len;
【0156】パラメータ nddp この削除要求のデバイスのndd構造体を指
定する。 statfilter 削除しようとする状況フィルタを指す。フ
ォーマットはデマルチプレクサに依存する。 len パラメータstatfilterの指す状況フィルタ
のバイト単位の長さ。
【0157】解説 関数nd_del_status()は、ns_del_statusネットワーク・
サービス呼出しから呼び出される。ルーチンnd_del_sta
tus()は、指定された状況フィルタを使用して、呼出し
側の状況処理関数を除去する。これに続いて、NDDの
ndd_ctl関数が、NDD_DEL_STATUS動作とこのパラメータs
tatfilterで指定された値を用いて呼び出される。
【0158】戻り値 0 − 動作に成功した。 EINVAL − 無効なパラメータ。 他の値は、デマルチプレクサに依存する戻り値。
【0159】関連情報 インターフェース:ns_del_status()
【0160】名前 nd_response() − 802.2LLC XIDまたは
TEST要求用の応答フレームを作成し、送信する。
【0161】摘要 #include <sys/ndd.h> #include <sys/mbuf.h> void nd_response( nddp, m, llcoffset) struct ndd *nddp; struct mbuf *m; caddr_t llcoffset;
【0162】パラメータ nddp 応答を送信しなければならない対象のndd
構造体のアドレス。 m XIDパケットまたはTESTパケットを
含むmbuf連鎖を指すポインタ。 llcoffset 802.2LLCヘッダの先頭のオフセッ
ト。
【0163】解説 この関数は、MACレベル処理を実行することによっ
て、着信XID要求または着信TEST要求を処理す
る。たとえば、802.3デマルチプレクサは、80
2.3ヘッダ内のソース・フィールドと宛先フィールド
を反転しなければならない。この関数の呼出し側は、既
に802.2のXID処理またはTEST処理を行って
いなければならない。パケット処理の後に、この関数
は、指定されたNDDのndd_output関数を呼び出す。
【0164】注 関数nd_response()は、割込みに対して安全でなければ
ならない。連鎖の最初のmbufは、M_PKTHDRフォーマット
でなければならない。フィールドm_pkthdr.lenは、パケ
ットの全長に設定しなければならない。mbufのフィール
ドm_nextpktを用いて連鎖することによって、複数のパ
ケットをこの関数に渡すことはできない。エラーが発生
する場合、mbufは解放されず、応答フレームは送信され
ない。
【0165】戻り値 この関数には戻り値がない。
【0166】関連情報 ネットワーク・デバイス・ドライバ
【0167】ネットワーク・デバイス・ドライバの概観 ネットワーク・デバイス・ドライバ(NDD)は、物理
ハードウェアとのデータ送受信のための諸機能を提供す
る。ユーザ・アプリケーションは、ソケットまたはスト
リームによってネットワーク・デバイスとインターフェ
ースする。NDDは、下記のエントリ・ポイントおよび
関数からなる。 ndd_config − 構成機能を提供する。 ndd_open − システム資源を割り振り、データの読み
書きのためデバイスを初期設定する。 ndd_close − デバイスを既知の状態にリセットし、
システム資源を解放する。 ndd_output − データ送信のための手段を提供する。 ndd_ctl − デバイスを制御するためのさまざまな機
能。
【0168】NDDは、下記の関数を介してデマルチプレ
クサともインターフェースする。 nd_rcv − この関数は、ネットワーク・デマルチプレ
クサのnd_receive関数の構文に適合する。 nd_stat − この関数は、ネットワーク・デマルチプ
レクサのnd_status関数の構文に適合する。
【0169】構成の完了時に、ns_attachネットワーク
・サービスを呼び出して、指定されたデバイスを使用可
能NSデバイス連鎖に置く。ns_attachの呼出しは、必
要なマイクロコード、経路指定テーブルまたは他の情報
がロードされるまで延期される可能性がある。
【0170】終了が完了する前に、ns_detachネットワ
ーク・サービスを呼び出して、指定されたデバイスを使
用可能NSデバイス連鎖から除去する。
【0171】以下に、上にリストしたネットワーク・デ
バイス・ドライバ・ルーチン群を実施するための詳細な
実施情報を提供する。
【0172】名前 ndd_open関数 − 指定されたデバイスをオープンす
る。
【0173】摘要 #include <sys/ndd.h> int ndd_open ( nddp) struct ndd *nddp;
【0174】パラメータ nddp このオープン要求の対象のデバイスのndd構造体
を指すポインタ。
【0175】解説 関数ndd_open()が呼び出される時、デバイス・ドライバ
は、必要なシステム資源のすべてを割り振り、そのデバ
イスをネットワークに付加しなければならない。1デバ
イスあたり1つのオープンだけがサポートされる。ネッ
トワーク・デマルチプレクサの受信関数および状況関数
は、この呼出しの前にNSによってndd構造体内に置か
れる。
【0176】注 デバイスを使用するデータの送受信は、ndd_open()関数
が成功裡に完了した後でなければ実行できない。オープ
ンの時、ネットワーク・デバイス・ドライバ(NDD)
は、ネットワークへ付加するため、必要な初期設定のす
べてを行う。NDDは、「妥当な」時間の間、初期設定
の完了を待ちながらブロックする。正当な時間は、アダ
プタ固有である。これは、イーサネットの場合には1分
になり、トークンリングの場合には1秒になることがあ
る。この時間制限に達した場合、NDDは、フラグNDD_
UPをセットし、呼出し側に成功を返す。初期設定が最終
的に完了した時に、非同期状況を送って、オープンが完
了したことを示す。ndd構造体のフィールドndd_flags内
で、フラグNDD_RUNNINGもセットされる。ハード・オー
プン・エラーだけが返される。非同期オープンに関して
接続に失敗した場合、フラグNDD_UPをオフにする。ndd_
open関数は、ns_allocネットワーク・サービスからのみ
呼び出される。
【0177】戻り値 0 − 動作に成功した。 EBUSY − デバイスが既にオープンされている。 ENOMEM − 必要なメモリを割り振れない。 ENODEV − 無効なデバイス。 ENOCONNECT − オープンに失敗し、ネットワークに接
続できなかったことを示す。
【0178】関連情報 関数ndd_close()
【0179】名前 ndd_close関数 − 指定されたデバイスをクローズす
る。
【0180】摘要 #include <sys/ndd.h> int ndd_close( nddp) struct ndd *nddp;
【0181】パラメータ nddp クローズしようとするデバイスのndd構造体を指
すポインタ。
【0182】解説 関数ndd_close()が呼び出される時、デバイス・ドライ
バは、指定されたデバイスをネットワークから切り離
し、前に割り振られたシステム資源を解放する。デバイ
スは、そのデバイスの送信待ち行列の処理を許可される
まで、ネットワークから切り離されない。すなわち、nd
d_close()は、すべてのパケットの送信が終わるまでリ
ターンしない。デバイスがクローズの時点で動作不能で
ある場合、そのデバイスの送信待ち行列を空にさせる必
要はない。NDDは、ndd_close()の時点で所有してい
るすべてのバッファを解放する責任を負う。この関数
は、デバイスを既知の状態にリセットする。
【0183】注 ndd_close関数は、ns_freeネットワーク・サービスから
のみ呼び出される。
【0184】戻り値 0 − 動作に成功した。
【0185】関連情報 関数ndd_open()
【0186】名前 ndd_output関数 − 指定されたネットワーク・デバイ
スにデータを出力する。
【0187】摘要 #include <sys/ndd.h> #include <sys/mbuf.h> int ndd_output(nddp, m) struct ndd *nddp; struct mbuf *m;
【0188】パラメータ nddp そのデバイスのndd構造体のアドレス。 m 送信しようとするパケットのmbufポインタ。
【0189】解説 関数ndd_output()は、ネットワーク上にデータを送信す
るため、NSユーザによって呼び出される。送信データ
はmbuf内で渡される。成功した書込み要求の際に、ND
Dは、その要求に関連するすべてのバッファを解放する
責任を負う。ndd_outputの呼出しが失敗の場合、NDD
はmbufを解放しない。連鎖されたパケットのうちのどれ
かを送信できる場合、その書込みは成功とみなされ、N
DDはその連鎖のすべてのmbufを解放する責任を負う。
【0190】注 ndd_output()は、割込みに対して安全でなければなら
ず、ブロックすることはできない。mbuf連鎖の最初のmb
ufは、M_PKTHDRフォーマットでなければならず、フィー
ルドm_pkthdr.lenは、パケットの全長(バイト単位)に
設定しなければならない。mbufのフィールドm_nextpkt
を使用することによって、複数のパケットを連鎖するこ
とができる。
【0191】戻り値 0 − 送信に成功した。 EAGAIN − 送信待ち行列が満杯である。 ENETDOWN − ネットワークが永久的にダウンしてい
る。 ENETUNREACH − ネットワークが一時的にアクセス不
能である。
【0192】関連情報 関数ndd_open()、mbufサービス
【0193】名前 ndd_ctl関数 − デバイス制御関数を提供する
【0194】摘要 #include <sys/ndd.h> int ndd_ctl ( nddp, cmd, arg, len) struct ndd *nddp; int cmd; caddr_t arg; int len;
【0195】パラメータ nddp デバイスのndd構造体のアドレス。 cmd 実行しようとする制御動作を指定する。コマンド
は下で説明する。 arg 制御パラメータ・ブロックのアドレスを指定す
る。フォーマットはコマンド固有である。 len パラメータargの長さ(バイト単位)。
【0196】解説 NDD_GET_STATS 包括的な統計とデバイス固有の統計を検索する。arg
は、統計を返すバッファのアドレスである。 NDD_ENABLE_ADDRESS 代替アドレスを用いたパケットの受信を可能にする(た
とえばマルチキャスト)。argは、可能にしようとする
マルチキャスト・アドレスを指す。argのフォーマット
は、NDDタイプに固有である。フィールドndd_flags
にフラグNDD_ALTADDRSをセットしなければならない。 NDD_DISABLE_ADDRESS 代替アドレスの受信を不能にする。パラメータargは、
使用不能にしようとするアドレスを指す。argのフォー
マットは、NDDタイプに固有である。最後の代替アド
レスである場合、ndd構造体のフィールドndd_flagsでフ
ラグNDD_ALTADDRSをリセットしなければならない。 NDD_PROMISCUOUS_ON 乱雑モードをサポートするデバイスに対しては乱雑モー
ドをオンにする。 NDD_PROMISCUOUS_OFF 乱雑モードを終了する。 NDD_ADD_FILTER このコマンドは、ハードウェア・レベルのフィルタリン
グをサポートするデバイスが使用するためのものであ
る。パラメータargは、フィルタ・リストに追加しよう
とする受信フィルタ(たとえばsap)を指す。フィルタ
のフォーマットは、デバイス・タイプ固有である。arg
のフォーマットは、NDDタイプに固有である。 NDD_DEL_FILTER ハードウェア・フィルタ・リストから、前に追加された
フィルタを除去する。パラメータargは、除去しようと
するフィルタを指す。argのフォーマットは、NDDタ
イプに固有である。 NDD_MIB_SET 指定されたデバイスに対してMIBをセットする。パラ
メータargは、下記のフィールドを含むndd_mib_acc構造
体のアドレスを指定する。 length パラメータndd_mib_setのバイト単位の全長。 ndd_mib_set count − セットするMIB変数の数。 下記のフィールドは、count回だけ繰り返される。 mib − セットするMIB変数。 status − セット動作から返される状況。値は、sys/
ndd.hで定義される。 mib_len − フィールドmib_valueのバイト単位の長
さ。 mib_value − MIB変数にセットする値。 NDD_MIB_QUERY デバイス固有のMIBがサポートされるかどうかを判定
する。パラメータargは、ndd_mib_acc構造体を指す。 length mdd_mib_queryのバイト単位の全長 ndd_mib_query デバイス固有MIB構造体を指すポイ
ンタ。この構造体のこの部分には、各MIB変数のサポ
ートの水準を示すフラグが書き込まれる。これらのフラ
グは、sys/ndd.hで定義される。 NDD_MIB_GET 指定されたデバイス上のすべてのMIBの値を検索す
る。パラメータargは、ndd_mib_acc構造体を指す。 length ndd_mib_getのバイト単位の全長。 ndd_mib_get デバイス固有MIB構造体を指すポイン
タ。 NDD_ENABLE_MULTICAST すべてのマルチキャスト・パケットの受信を可能にす
る。ndd構造体のフィールドndd_flags中でフラグNDD_MU
LTICASTをセットしなければならない。 NDD_DISABLE_MULTICAST すべてのマルチキャスト・パケットの受信を不能にす
る。ndd構造体のフィールドndd_flags中でフラグNDD_MU
LTICASTをリセットしなければならない。
【0197】注 NDDインターフェースに適合するすべてのデバイス・
ドライバは、上記のコマンド動作のそれぞれを、必ずし
もサポートしなくともよいが、認識しなければならな
い。追加の制御動作は、必要に応じて個々のNDDによ
って指定できる。
【0198】関数ndd_ctl()は、割込みに対して安全で
なければならない。また、ndd_ctl()は、参照カウント
を必要とする制御動作(たとえば乱雑モードのセット)
の参照カウントを維持しなければならない。
【0199】これらの関数には、特権検査は不要であ
る。特権検査は、より高いレベルで行われる。
【0200】戻り値 0 − 成功。 EOPNOTSUPP − そのコマンドはサポートされない。 EINVAL − 無効なパラメータが指定された。 ENETUNREACH − ネットワークが現在アクセス不能で
ある。 ENETDOWN − ネットワークが永久的にダウンしてい
る。
【0201】共通デマルチプレクサ・サービスの概観 共通デマルチプレクサ・サービスは、ネットワーク・デ
マルチプレクサをより簡単に作成できるように、共通機
能を提供する。これらのサービスは、下記の関数からな
る。
【0202】dmx_8022_receive() 受信した802.2LLCデータを適当なユーザに経路
指定する。
【0203】dmx_status() 非同期状況を適当なユーザに配布する。
【0204】dmx_8022_add_filter() 受信データの経路指定用の802.2受信フィルタを追
加する。
【0205】dmx_8022_del_filter() 前に指定された802.2受信フィルタを削除する。
【0206】dmx_add_status() 非同期状況の経路指定用フィルタを追加する。
【0207】dmx_del_status() 前に追加された状況フィルタを削除する。
【0208】次に、上記にリストした共通デマルチプレ
クサ・サービス・ルーチン群を実施するための詳細な実
施情報を提供する。
【0209】名前 dmx_8022_receive() − NDDからの受信データを処
理する。
【0210】摘要 #include <sys/ndd.h> #include <sys/mbuf.h> void dmx_8022_receive(nddp, m, llcoffset) struct ndd *nddp; struct mbuf *m; int llcoffset;
【0211】パラメータ nddp 受信データの起点のndd構造体のアドレ
ス。 m 受信パケットを含むmbuf連鎖を指すポイン
タ。 llcoffset 802.2LLCヘッダへのバイト単位の
オフセットを指定する。
【0212】解説 この関数は、着信802.2データを処理し、そのデー
タを適当なユーザに経路指定する。データの経路指定
は、前にns_add_filterおよびdmx_8022_add_filterネッ
トワーク・サービスを介して追加された802.2フィ
ルタを使用することによって達成される。
【0213】注 関数dmx_8022_receive()は、割込みに対して安全でなけ
ればならない。連鎖の最初のmbufは、M_PKTHDRフォーマ
ットでなければならない。フィールドm_pkthdr.lenは、
パケットの全長に設定しなければならない。mbufのフィ
ールドm_nextpktを用いて連鎖することによって、複数
のパケットをこの関数に渡すことはできない。入力パケ
ットをユーザに渡さない場合、関数dmx_8022_receiveが
バッファを解放する。
【0214】戻り値 この関数には戻り値がない。
【0215】関連情報 ネットワーク・デバイス・ドライバ
【0216】名前 dmx_status() − NDDからの状況情報を処理する。
【0217】摘要 #include <sys/ndd.h> #include <sys/cdli.h> void dmx_status(nddp, status) struct ndd *nddp; struct ndd_statblk *status;
【0218】パラメータ nddp この情報の起点のデバイスのndd構造体を指
定する。 status ndd_statblk状況ブロックを指すポインタ。
この状況ブロックは、状況事象に関するデバイス固有情
報を含む。この情報ブロックは、sys/ndd.hで定義され
る。
【0219】解説 dmx_statusネットワーク・サービスは、ネットワーク・
デマルチプレクサの状況関数から呼び出される。これ
は、状況情報を適当なユーザに経路指定する責任を負
う。
【0220】注 関数dmx_status()は、割込みに対して安全でなければな
らない。
【0221】状況ブロックは、参照によって渡され、こ
の呼出しの持続期間の間だけ有効である。
【0222】戻り値 この関数には戻り値がない。
【0223】関連情報 ネットワーク・デマルチプレクサ
【0224】名前 dmx_8022_add_filter() − 指定されたデバイス用の
802.2受信フィルタを追加する。
【0225】摘要 #include <sys/ndd.h> #include <sys/cdli.h> int dmx_8022_add_filter (nddp, filter, ns_user) struct ndd *nddp; struct ns_8022 *filter; struct ns_user *ns_user;
【0226】パラメータ nddp デバイスのndd構造体を指定する。 filter 追加しようとする802.2受信フィルタを
指す。 ns_user このユーザを記述したns_user構造体を指す
ポインタ。
【0227】解説 関数dmx_8022_add_filter()は、ネットワーク・デマル
チプレクサのフィルタ追加関数から呼び出される。この
ルーチンは、指定された802.2LLC受信フィルタ
を可能受信パターンのリストに追加する。
【0228】戻り値 0 − 動作に成功した。 ENOMEM − 要求された資源を割り振れない。 EEXIST − 受信フィルタが既に使用中である。 EINVAL − 受信フィルタが無効である。
【0229】関連情報 インターフェース:ns_add_filter()
【0230】名前 dmx_8022_del_filter() − 指定されたデバイスの8
02.2LLC受信フィルタを削除する。
【0231】摘要 #include <sys/ndd.h> #include <sys/cdli.h> int dmx_8022_del_filter (nddp, filter) struct ndd *nddp; struct ns_8022 *filter;
【0232】パラメータ nddp この削除要求の対象となるデバイスのndd構造
体を指定する。 filter 削除しようとする受信フィルタを指定するns_8
022構造体を指す。
【0233】解説 dmx_8022_del_filter()サービスは、ネットワーク・デ
マルチプレクサのフィルタ削除関数から呼び出される。
これは、指定された802.2LLC受信フィルタを、
可能受信パターンのリストから削除する。
【0234】戻り値 0 − 動作に成功した。 ENOENT − 指定されたフィルタが見つからなかった。 EINVAL − 無効な受信フィルタを表す。
【0235】関連情報 インターフェース:ns_del_filter()
【0236】名前 dmx_add_status() − 指定されたデバイス用の状況処
理関数を追加する。
【0237】摘要 #include <sys/ndd.h> #include <sys/cdli.h> int dmx_add_status (nddp, statfilter, ns_statuser) struct ndd *nddp; struct ns_com_status *statfilter: struct ns_statuser *ns_statuser;
【0238】パラメータ nddp この追加要求の対象となるデバイスのnd
d構造体を指定する。 statfilter 追加しようとする状況フィルタを指す。 ns_statuser このユーザを記述したns_statuser構造
体を指すポインタ。
【0239】解説 関数dmx_add_status()は、ネットワーク・デマルチプレ
クサの状況追加関数から呼び出される。これは、指定さ
れたns_com_statusフィルタを状況処理関数のリストに
追加する。dmx_statusサービスは、状況事象を処理する
ために状況ユーザを呼び出すべきであるかどうかを判定
する時、この状況フィルタを使用する。
【0240】戻り値 0 − 動作に成功した。 ENOMEM − 要求された資源を割り振れない。 EINVAL − 状況フィルタが無効。
【0241】関連情報 インターフェース:ns_add_status( )
【0242】名前 dmx_del_status() − 指定されたデバイス用の状況フ
ィルタを削除する。
【0243】摘要 #include <sys/ndd.h> #include <sys/cdli.h> int dmx_del_status (nddp, statfilter) struct ndd *nddp; struct ns_com_status *statfilter;
【0244】パラメータ nddp この削除要求の対象となるデバイスのndd
構造体を指定する。 statfilter 削除しようとする状況フィルタを指す。
【0245】解説 関数dmx_del_status()は、ネットワーク・デマルチプレ
クサの状況削除関数から呼び出される。これは、指定さ
れたns_com_statusフィルタを状況処理関数のリストか
ら削除する。ns_com_status構造体のフィールドsidを使
用して、正しい状況フィルタを除去する。このため、共
通状況関数のユーザは、dmx_add_status呼出しからの状
況フィルタを保管しなければならない。
【0246】戻り値 0 − 動作に成功した。 ENOENT − 指定されたフィルタが見つからなかった。 EINVAL − 無効なパラメータ。
【0247】関連情報 インターフェース:ns_del_status()
【0248】下記のデータ構造定義が、共通データ・リ
ンク・インターフェースを可能にするために、上記の諸
ルーチンと共に使用される。
【0249】名前 ndd − ネットワーク・デバイス・ドライバを定義す
る。
【0250】摘要 #include <sys/ndd.h> struct ndd { struct ndd *ndd_next; u_int ndd_refcnt; char *ndd_name; u_short ndd_unit; u_long ndd_flags; caddr_t ndd_correlator; /* プロシージャ・ハンドル */ int (*ndd_open)(); int (*ndd_close)(); int (*ndd_output)(); int (*ndd_ctl)(); /* ユーザ受信関数およびユーザ状況関数 */ void (*nd_receive)(); void (*nd_status)(); /* ドライバの記述 */ u_long ndd_mtu; u_long ndd_mintu; u_char ndd_type; u_char ndd_addrlen; u_char ndd_hdrlen; caddr_t ndd_physaddr; /* 統計 */ struct ndd_genstats ndd_genstats; caddr_t ndd_specsats; caddr_t ndd_speclen; struct ns_demuxer *ndd_demuxer; struct ns_dmx_ctl *ndd_nsdemux; caddr_t ndd_specdemux; };
【0251】フィールド ndd_next 使用可能NDD連鎖内の次のNDDを指すポインタ。こ
のフィールドは、ns_attachおよびns_detachネットワー
ク・サービスによってのみ修正されなければならない。
【0252】ndd_refcnt このNDDに関する未解決ns_allocの数のカウンタ。ns
_allocネットワーク・サービスはこのカウンタを増分
し、ns_freeサービスはこれを減分する。
【0253】ndd_name このNDDの名前。たとえば"en"。
【0254】ndd_unit 同一タイプの特定のデバイスを識別するのに使用する。
イーサネットNDDは、システム内に2つのアダプタが
ある場合に、"en"という名前と0または1のユニットを
有することができる。その場合、このNDDのユーザ
は、"en0"および"en1"という名前でアダプタを参照する
ことになる。
【0255】ndd_flags デバイスの状況と特性を記述する。これらのフラグはす
べて、NDDによってセットされる。NDD_RUNNING、NDD
_DEADおよびNDD_LIMBOは、相互に排他的である。 NDD_UP NDDのオープンに成功した時にセッ
トされる。非同期オープンが後に失敗する場合、このフ
ラグをリセットしなければならない。 NDD_RUNNING NDDがオープンされており、動作し
ている。 NDD_DEAD アダプタが動作していない。 NDD_LIMBO NDDが、デバイス・エラーから回復
しようと試みている。 NDD_BROADCAST このアダプタは、媒体同報通信能力を
有する。 NDD_SIMPLEX アダプタが、それ自体の送信を聞き取
れない。 NDD_DEBUG NDDが、デバッグ・モードで動作し
ている。 NDD_PROMISC アダプタが、乱雑モードである。 NDD_ALTADDRS アダプタが、代替アドレス(たとえば
マルチキャスト)を受信している。 NDD_MULTICAST アダプタが、全マルチキャスト・アド
レスを受信している。
【0256】ndd_correlator このフィールドは、NDDが、内部制御構造体との相関
に使用することができる。
【0257】ndd_open NDDのオープン関数のアドレス。
【0258】ndd_close NDDのクローズ関数のアドレス。
【0259】ndd_output NDDのパケット送信関数のアドレス。
【0260】ndd_ctl NDDのデバイス制御関数のアドレス。
【0261】ndd_rcv デマルチプレクサ受信関数を指すポインタ。NDDは、
パケットを受信した時、この関数を呼び出す。このフィ
ールドは、ns_allocネットワーク・サービスによって初
期設定される。
【0262】ndd_stat デマルチプレクサ状況関数を指すポインタ。NDDは、
非同期状況を入手できる時、この関数を呼び出す。この
フィールドは、ns_allocネットワーク・サービスによっ
て初期設定される。
【0263】ndd_mtu 送信可能な最大パケット・サイズ。
【0264】ndd_mintu 送信可能な最小パケット・サイズ。
【0265】ndd_type NDDの媒体タイプ(たとえば、FDDI NDDの場
合にはNDD_FDDI)。イーサネットNDDが802.3を
サポートする場合、NDD_ISO88023というタイプを使用し
なければならない。そうでない場合には、NDD_ETHERで
なければならない。可能な値のリストについてはsys/nd
d.hを参照されたい。
【0266】ndd_addrlen このフィールドには、物理アドレスのバイト単位の長さ
が含まれる。たとえば、これは、イーサネットの場合に
は6になる。
【0267】ndd_hdrlen このNDDの媒体レベルおよびリンク・レベルのヘッダ
のバイト単位の全長。ヘッダが可変長の場合、最大長を
指定しなければならない。
【0268】ndd_physaddr このデバイスの物理アドレスを指すポインタ。
【0269】ndd_genstats ndd_genstats構造体には、すべてのNDDタイプに共通
の単純なカウンタが含まれる。
【0270】ndd_specstats NDD固有カウンタを指すポインタ。デバイス固有カウ
ンタがない場合、このフィールドをNULLにしてよい。
【0271】ndd_speclen ndd_specstatsが指すデバイス固有統計の長さ。
【0272】ndd_demuxer このフィールドは、NDDに関連するネットワーク・デ
マルチプレクサ(struct ns_demuxer)を指す。最初のn
s_allocの時点でNULLである場合、このフィールドは、
ネットワーク・サービスによって初期設定される。そう
でない場合、指定されたデマルチプレクサを使用する。
【0273】ndd_nsdemux 共通デマルチプレクサ・サービスが、NDDに関連する
デマルチプレクサによって使用される場合、このフィー
ルドは、デマルチプレクサ制御構造体を指す。ネットワ
ーク・サービスが、このフィールドを初期設定する。
【0274】ndd_specdemux デマルチプレクサは、このフィールドを初期設定し、各
NDD用のデマルチプレクサ構造体を指すのに使用する
ことができる。
【0275】解説 ndd構造体は、ネットワーク・デバイス・ドライバを定
義し、NDDとそのユーザの間の連係を提供する。各ネ
ットワーク・デバイスに、1つのndd構造体が関連付け
られる。
【0276】注 ndd構造体は、NDDによって割り振られ、所有され
る。これは、ピン止めされなければならない。
【0277】ファイル sys/ndd.h
【0278】名前 ndd_genstats − 共通NDD統計を定義する。
【0279】摘要 #include <sys/ndd.h> struct ndd_genstats { u_long ndd_ipackets_msw; u_long ndd_ipackets_lsw; u_long ndd_ibytes_msw; u_long ndd_ibytes_lsw; u_long ndd_recvintr_msw; u_long ndd_recvintr_lsw; u_long ndd_ierrors; u_long ndd_opackets_msw; u_long ndd_opackets_lsw; u_long ndd_obytes_msw; u_long ndd_obytes_lsw; u_long ndd_xmitintr_msw; u_long ndd_xmitintr_lsw; u_long ndd_oerrors; u_long ndd_nobufs; u_long ndd_xmitque_max; u_long ndd_xmitque_ovf; /*XXX - Paul */};
【0280】フィールド ndd_ipackets_msw このNDD上で受信したパケットの数の最上位ワード。
【0281】ndd_ipackets_lsw このNDD上で受信したパケットの数の最下位ワード。
【0282】ndd_ibytes_msw 全受信バイト数の最上位ワード。
【0283】ndd_ibytes_lsw 全受信バイト数の最下位ワード。
【0284】ndd_ierrors 遭遇した受信エラーの数。
【0285】ndd_opackets_msw このNDD上で送信したパケットの数の最上位ワード。
【0286】ndd_opackets_lsw このNDD上で送信したパケットの数の最下位ワード。
【0287】ndd_obytes_msw 送信したバイトの数の最上位ワード。
【0288】ndd_obytes_lsw 送信したバイトの数の最下位ワード。
【0289】ndd_oerrors このNDDに関する出力エラーの数。
【0290】ndd_xmitintr_msw 送信完了割込みの回数の最上位ワード。
【0291】ndd_xmitintr_lsw 送信完了割込みの回数の最下位ワード。
【0292】ndd_recvintr_msw データ受信割込みの回数の最上位ワード。
【0293】ndd_recvintr_lsw データ受信割込みの回数の最下位ワード。
【0294】ndd_nobufs バッファが使用できなかった回数。
【0295】ndd_xmitque_max 待ち行列化された送信の最大数。
【0296】ndd_xmitque_ovf 送信待ち行列オーバーフロー・エラーの数。
【0297】解説 ndd_genstats構造体は、すべてのNDDタイプに共通の
単純なカウンタを保存するのに使用される。
【0298】注 ndd_genstats構造体は、ndd構造体の一部である。
【0299】ファイル sys/ndd.h
【0300】名前 ndd_statblk − ネットワーク・デバイス・ドライバ
状況ブロック。
【0301】摘要 #include <sys/ndd.h> struct ndd_statblk { u_int code; u_int option[10]; };
【0302】フィールド code 状況ブロックのタイプを定義する。可能なコード値は、
sys/ndd.hで定義される。 NDD_HARD_FAIL ハードウェア障害が発生した NDD_LIMBO_ENTER ネットワーク回復モードに入った NDD_LIMBO_EXIT ネットワーク回復モードから出た NDD_STATUS さまざまな状況情報と事象情報
【0303】option このフィールドは、理由コードまたは他の情報を含むこ
とができる。フィールドoptionのフォーマットは、code
ごとに指定される。 NDD_ADAP_CHECK アダプタ・チェック停止状態 NDD_BUS_ERROR バス・エラー NDD_CMD_FAIL デバイス・コマンドが障害を発生した NDD_PIO_FAIL PIO動作が障害を発生した NDD_UCODE_FAIL デバイス・マイクロコードの障害 NDD_TX_ERROR 送信エラーが発生した NDD_TX_TIMEOUT 送信タイムアウト・エラー NDD_RCV_ERROR 受信エラーが発生した NDD_AUTO_RMV 自動除去エラーを検出した NDD_CONNECTED デバイス・オープン成功 NDD_BAD_PKTS 不良パケットを受信した
【0304】解説 この構造体は、非同期デバイス状況情報をCDLIユー
ザに伝えるのに使用される。
【0305】ファイル sys/ndd.h
【0306】名前 ns_user − 入力パケット配布に関するユーザ特性を
記述する。
【0307】摘要 #include <sys/cdli.h> #include <net/if.h> struct ns_user { int (*isr)(); caddr_t isr_data; struct ifqueue *protoq; u_short pkt_format; u_short netisr; struct ifnet *ifp; };
【0308】フィールド isr 入力パケットを処理する関数のアドレス。この関数は、
ユーザ指定のフィルタに一致する受信データを入手でき
る時に呼び出される。
【0309】isr_data パラメータprotoqがNULLの場合、このフィールドが、パ
ラメータとしてisrに渡される。
【0310】protoq 入力ifqueueのアドレス。このフィールドが非NULLの場
合、入力パケットが、待ち行列化され、isrが、schedne
tisr(netisr)を用いてスケジューリングされる。これが
NULLの場合、下記のようにisrが直接呼び出される。 . isr(nddp, m, macp, isr_data); ただし、nddpは、データの起点のndd構造体。mは、入力
パケット。macpは、パケットの先頭を指す。isr_data
は、ns_add_filterの呼出しで指定された値。
【0311】pkt_format このフィールドは、入力パケットのパケット・ヘッダ表
示を指定する。可能な値は下記のとおりである。 NS_PROTO リンク・レベル・ヘッダをすべて除去する。SNAPは
使用しない。 NS_PROTO_SNAP SNAPを含むリンク・レベル・ヘッダをすべて除去す
る。 NS_INCLUDE_LLC LLCヘッダを定位置に残す。 NS_INCLUDE_MAC ヘッダを全く除去しない。 NS_HANDLE_NON_UI XIDフレームおよびTESTフレームを自動的に処理
する。
【0312】netisr このフィールドは、ユーザisr関数のスケジューリング
に使用されるnetisr数を示す。netisrが非0の場合、pr
otoqがすべて指定されなければならず、ユーザは、neti
sr_addサービスを呼び出して、netisrを登録しなければ
ならない。
【0313】ifp 呼出し側がIFNETドライバの場合、このフィールド中で
適当なifnetポインタをセットしなければならない。呼
出し側がIFNETドライバでない場合、このフィール
ドをNULLにしなければならない。
【0314】解説 この構造体は、パケットをデマルチプレクサのユーザに
配布する方法を記述するのに使用される。ユーザは、ns
_add_filterサービスを呼び出す前にこの構造体を初期
設定する。
【0315】ファイル sys/cdli.h
【0316】名前 ns_statuser − あるデバイスの非同期状況ユーザを
記述する。
【0317】摘要 struct ns_statuser int (*isr)(); caddr_t isr_data; };
【0318】フィールド isr 非同期状況を処理する関数のアドレス。この関数は、非
同期状況事象が発生した時に呼び出される。isrは、下
記のように直接呼び出される。 isr(nddp, status, isr_data); ただしnddpは、この状況の起点のndd構造体。status
は、ndd_statblk構造体を指すポインタ。isr_dataは、n
s_add_statusの呼出しで指定された値。
【0319】isr_data このフィールドは、パラメータとしてisrに渡される。
【0320】解説 この構造体は、状況ユーザを記述するのに使用される。
これは、非同期状況の発生時にそれを提示するのに使用
される。
【0321】ファイル sys/cdli.h
【0322】名前 ns_8022 − 共通デマルチプレクサ・サービスが使用
する802.2LLC受信フィルタ。
【0323】摘要 struct ns_8022 { u_int filtertype; u_char dsap; u_char orgcode[3]; u_short ethertype; };
【0324】フィールド filtertype 受信フィルタリングのタイプを指定する。下記のうちの
どれか。 NS_8022_LLC_DSAP 802.2DSAPフィールドに対するフィルタ NS_8022_LLC_DSAP_SNAP SNAPを有する802.2に対するフィルタ NS_TAP NDDからすべてのネットワーク・パケットを受信す
る。NS_TAPユーザは、パケットの待ち行列化を指定でき
ない。NS_TAPユーザは、直接呼び出され、パケットに関
心がある場合にはそのパケットをコピーしなければなら
ない。
【0325】dsap フィルタリングの対象となる802.2LLC DSA
P。
【0326】orgcode 802.2SNAPヘッダ内の編成コードを指定する。
このフィールドは、filtertypeがNS_8022_LLC_DSAP_SNA
Pにセットされている場合に限って有効である。
【0327】ethertype 802.2SNAPヘッダ内のフィールドethertypeを
指定する。このフィールドは、filtertypeがNS_8022_LL
C_DSAP_SNAPにセットされている場合に限って有効であ
る。
【0328】解説 この構造体は、共通デマルチプレクサ・サービスが使用
する受信フィルタである。これを用いると、プロトコル
多重化のために802.2LLCを使用する、ネットワ
ークに対するフィルタリングが可能になる。
【0329】ファイル sys/cdli.h
【0330】名前 ns_comstatus − 共通デマルチプレクサ・サービス用
の状況フィルタ。
【0331】摘要 struct ns_comstatus { u_int filtertype; u_int mask; u_int sid; };
【0332】フィールド filtertype 状況フィルタのタイプを指定する。これは、NS_STATUS_
MASKにセットしなければならない。 mask 状況コードマスク値。あるデバイス上で非同期事象が発
生した時、ネットワーク・デマルチプレクサは、指定さ
れたフィールドmaskと状況ブロックのフィールドcodeの
論理和をとる。その結果が非0である場合、その状況ブ
ロックがユーザに配布される。 sid このフィールドは、ns_add_statusサービスによって計
算される状況IDを保持する。ユーザは、この値を記憶
し、これをns_del_statusサービスに供給しなければな
らない。
【0333】解説 この構造体は、共通デマルチプレクサ・サービスが使用
する状況フィルタである。これは、ユーザに、どの状況
事象に関心があるかを指定する手段を与える。
【0334】ファイル sys/cdli.h
【0335】名前 ifqueue − ネットワーク・パケット待ち行列。
【0336】摘要 struct ifqueue { struct mbuf *ifq_head; struct mbuf *ifq_tail; int ifq_len; int ifq_maxlen; int ifq_drops; };
【0337】フィールド ifq_head 待ち行列の最初のmbufを指すポインタ。 ifq_tail 待ち行列の最後のmbufを指すポインタ。 ifq_len 待ち行列内のパケットの数。 ifq_maxlen この待ち行列上で待機できるパケットの最大数。 ifq_drops 待ち行列が満杯だったために捨てられたパケットの数。
【0338】解説 この構造体は、待ち行列サービスを要求したCDLIユ
ーザのためにネットワーク・パケットを待ち行列化する
のに使用される。ifqueuesを操作するためのマクロが、
net/if.hにある。パケットは、待機状態FIFOであ
る。mbufのフィールドm_nextpktは、待合せ機構として
使用される。パケットは、IF-DEQUEUEマクロを使用する
ことによって、一時に1つずつ除去することができる。
【0339】ファイル net/if.h
【0340】名前 nd_dmxstats − ネットワーク・デマルチプレクサ統
計。
【0341】摘要 struct nd_dmxstats { u_long nd_nofilter; u_long nd_nobufs: u_long nd_bcast; u_long nd_mcast; };
【0342】フィールド nd_nofilter ユーザがいないので捨てられたパケットの数。 nd_nobufs バッファを使用できなかったので捨てられたパケットの
数。 nd_bcast 受信した同報通信パケットの数。 nd_mcast 受信したマルチキャスト・パケットの数。
【0343】解説 この構造体は、デマルチプレクサ・タイプから独立な統
計を含む。この統計は、使用カウンタと診断カウンタを
提供する。
【0344】ファイル sys/cdli.h
【0345】名前 ns_demuxer − ネットワーク・デマルチプレクサを定
義する。
【0346】摘要 struct ns_demuxer { u_short inuse; u_short use_nsdmx; int (*add_filter)(); int (*del_filter)(); int (*add_status)(); int (*del_status)(); int (*receive)(); int (*status)(); int (*response)(); };
【0347】フィールド inuse あるデマルチプレクサが現在使用中であるかどうかを示
す。このフィールドは、ネットワーク・サービスによっ
てのみセットされる。これは、ns_allocごとに増分さ
れ、ns_freeごとに減分される。
【0348】use_nsdmx このフィールドは、デマルチプレクサが、CDLIの提
供する共通デマルチプレクサ・サービスを使用しようと
している場合に真にセットしなければならない論理変数
である。共通サービスを使用しない場合、この値を偽に
セットしなければならない。
【0349】add_filter デマルチプレクサのフィルタ追加関数のアドレス。この
関数は、ns_add_filterネットワーク・サービスから呼
び出される。
【0350】del_filter デマルチプレクサのフィルタ削除関数のアドレス。この
関数は、ns_del_filterネットワーク・サービスから呼
び出される。
【0351】add_status デマルチプレクサの状況追加関数のアドレス。この関数
は、ns_add_statusネットワーク・サービスから呼び出
される。
【0352】del_status デマルチプレクサの状況削除関数のアドレス。この関数
は、ns_del_statusネットワーク・サービスから呼び出
される。
【0353】receive デマルチプレクサのパケット入力関数のアドレス。受信
データを入手できる時、NDDがこの関数を呼び出す。
【0354】status デマルチプレクサの状況処理関数のアドレス。非同期状
況が発生した時、NDDがこの関数を呼び出す。
【0355】response XIDフレーム応答またはTESTフレーム応答が必要
な時に呼び出される関数のアドレス。
【0356】解説 この構造体は、ns_add_demuxサービスを介してネットワ
ーク・デマルチプレクサを登録するのに使用される。こ
れは、デマルチプレクサのさまざまなエントリ・ポイン
トを指定する。
【0357】ファイル sys/cdli.h
【0358】名前 nd_config − ネットワーク・デマルチプレクサ構成
情報を提供する。
【0359】摘要 #include <sys/cdli.h> struct nd_config { int version; int errcode; int ndd_type; };
【0360】フィールド version nd_config構造体のバージョン番号。ND_CONFIG_VERSION
_1にセットされる。
【0361】errcode デマルチプレクサ構成から返される状況。
【0362】ndd_type このデマルチプレクサがサービスするNDDのタイプを
指定する。
【0363】解説 この構造体は、ネットワーク・デマルチプレクサに構成
情報を渡すのに使用される。
【0364】ファイル sys/cdli.h
【0365】
【発明の効果】要約すると、単一のハードウェア・アダ
プタの使用を介して複数のデータ・フレームワークを可
能にするための均一なインターフェースが提供される。
これによって、さまざまなハードウェア・プラットフォ
ームへのオペレーティング・システムの可搬性が大幅に
単純化され、そのような複数フレームワーク・サポート
を提供するためのハードウェア・アダプタ要件が最小に
なる。
【図面の簡単な説明】
【図1】包括プログラミング・インターフェースを使用
するデータ・リンク・サービスまたはネットワーク・サ
ービスを提供する従来のフレームワークを示す図であ
る。
【図2】図1に示したものの、従来のマルチユーザ・マ
ルチアダプタ構成を示す図である。
【図3】共通データ・リンク・インターフェース(CD
LI)の全体的システム・ブロック図である。
【図4】CDLIシステムへのネットワーク・デバイス
・ドライバの追加を示す図である。
【図5】CDLIシステムでのネットワーク・ドライバ
の使用の割振りを示す図である。
【図6】CDLIシステムでの入力パケット用受信フィ
ルタの追加を示す図である。
【図7】CDLIシステムでの割り振られたネットワー
ク・デバイス・ドライバの使用を示す図である。
【図8】CDLIシステムでのデータおよびコードの流
れを示す図である。
【符号の説明】
12 ネットワーク・デバイス・ドライバ(NDD) 13 アプリケーション・ユーザ 14 ネットワーク・デマルチプレクサ 15 カーネル・ユーザ 16 ネットワーク・サービス 18 IFNET 20 DLPI 22 ソケット・フレームワーク 23 通信入出力デバイス・ドライバ 24 ストリーム・フレームワーク 25 アダプタ 26 物理デバイス
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ロン・エドワード・ホール アメリカ合衆国78759、テキサス州オー スチン、ダブル・スパー・ループ 10607 (72)発明者 グレゴリー・スコット・ジョイス アメリカ合衆国78753、テキサス州オー スチン、ファロウ・コーヴ 12318ビー (72)発明者 ポール・デーヴィド・マズラナ アメリカ合衆国78758、テキサス州オー スチン、レベッカ・ドライブ 1006 (72)発明者 ランス・ウォレン・ラッセル アメリカ合衆国78624、テキサス州フレ デリックスバーグ・ルート3 ボックス 310ビー (56)参考文献 特開 平4−279952(JP,A) (58)調査した分野(Int.Cl.6,DB名) G06F 13/00 H04L 12/00

Claims (3)

    (57)【特許請求の範囲】
  1. 【請求項1】データ通信サブシステム内で複数のフレー
    ムワークをサポートするためのシステムであって、 オペレーティング・システム・サービスとハードウェア
    ・アダプタをインターフェースするためのデバイス・ド
    ライバ手段と、 前記デバイス・ドライバ手段に結合された、前記通信サ
    ブシステム内で活動状態デバイスを維持するためのサー
    ビス手段と、 前記デバイス・ドライバ手段に結合された、第1フレー
    ムワークを使用可能にするための層1手段と、 前記デバイス・ドライバ手段に結合された、第2フレー
    ムワークを使用可能にするための層2手段と、 前記デバイス・ドライバ手段に結合された、受信データ
    をフィルタするためのネットワーク・デマルチプレクサ
    手段とを具備し、 前記第1フレームワークが、ストリーム・フレームワー
    クを含むことを特徴とするシステム。
  2. 【請求項2】データ通信サブシステム内で複数のフレー
    ムワークをサポートするためのシステムであって、 オペレーティング・システム・サービスとハードウェア
    ・アダプタをインターフェースするためのデバイス・ド
    ライバ手段と、 前記デバイス・ドライバ手段に結合された、前記通信サ
    ブシステム内で活動状態デバイスを維持するためのサー
    ビス手段と、 前記デバイス・ドライバ手段に結合された、第1フレー
    ムワークを使用可能にするための層1手段と、 前記デバイス・ドライバ手段に結合された、第2フレー
    ムワークを使用可能にするための層2手段と、 前記デバイス・ドライバ手段に結合された、受信データ
    をフィルタするためのネットワーク・デマルチプレクサ
    手段とを具備し、 前記第2フレームワークが、ソケット・フレームワーク
    を含むことを特徴とするシステム。
  3. 【請求項3】前記第2フレームワークが、ソケット・フ
    レームワークを含むことを特徴とする、請求項1のシス
    テム。
JP5331395A 1993-01-13 1993-12-27 共通データ・リンク・インターフェース Expired - Fee Related JP2793489B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US414593A 1993-01-13 1993-01-13
US004145 1993-01-13

Publications (2)

Publication Number Publication Date
JPH06303286A JPH06303286A (ja) 1994-10-28
JP2793489B2 true JP2793489B2 (ja) 1998-09-03

Family

ID=21709391

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5331395A Expired - Fee Related JP2793489B2 (ja) 1993-01-13 1993-12-27 共通データ・リンク・インターフェース

Country Status (2)

Country Link
US (1) US5548731A (ja)
JP (1) JP2793489B2 (ja)

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6026454A (en) * 1993-12-17 2000-02-15 Packard Bell Nec, Inc. Interface for multiplexing and reformatting information transfer between device driver programs and a network application program which only accepts information in a predetermined format
US5687376A (en) * 1994-12-15 1997-11-11 International Business Machines Corporation System for monitoring performance of advanced graphics driver including filter modules for passing supported commands associated with function calls and recording task execution time for graphic operation
JPH0973412A (ja) * 1995-06-30 1997-03-18 Toshiba Corp データ転送方法及びメモリ管理装置
US5812767A (en) * 1995-07-28 1998-09-22 International Business Machines Corporation System for user registering an address resolution routine to provide address resolution procedure which is used by data link provider interface for resolving address conflicts
US5758070A (en) * 1995-10-06 1998-05-26 Canon Kabushiki Kaisha System for dynamically determining a network media type of a LAN using frame type identifying value from a configuration table
US5815707A (en) * 1995-10-19 1998-09-29 Hewlett-Packard Company Dynamic function replacement for streams framework
US5754831A (en) * 1996-05-30 1998-05-19 Ncr Corporation Systems and methods for modeling a network
US6230193B1 (en) * 1996-10-31 2001-05-08 3Com Corporation Method and apparatus supporting network communications
US5999541A (en) * 1997-02-28 1999-12-07 3Com Corporation Transmission of token-ring packets over ethernet by tunneling
US5872956A (en) * 1997-04-24 1999-02-16 International Business Machines Corporation Design methodology for device drivers supporting various operating systems network protocols and adapter hardware
US5949784A (en) * 1997-05-01 1999-09-07 3Com Corporation Forwarding mechanism for multi-destination packets to minimize per packet scheduling overhead in a network forwarding engine
US5996024A (en) * 1998-01-14 1999-11-30 Emc Corporation Method and apparatus for a SCSI applications server which extracts SCSI commands and data from message and encapsulates SCSI responses to provide transparent operation
FR2773935A1 (fr) * 1998-01-19 1999-07-23 Canon Kk Procedes de communication entre systemes informatiques et dispositifs les mettant en oeuvre
US6130924A (en) * 1998-04-20 2000-10-10 Sun Microsystems, Inc. Method and apparatus for administrative control over data transmission using dynamic filtering in a multicast network
US6675218B1 (en) * 1998-08-14 2004-01-06 3Com Corporation System for user-space network packet modification
US6266707B1 (en) 1998-08-17 2001-07-24 International Business Machines Corporation System and method for IP network address translation and IP filtering with dynamic address resolution
US6546021B1 (en) * 1998-12-30 2003-04-08 International Business Machines Corporation Method and apparatus for user programmable packet to connection translation
US7146566B1 (en) 1999-12-14 2006-12-05 International Business Machines Corporation Method and system for multiformat presentation
US6671280B1 (en) 2000-03-29 2003-12-30 International Business Machines Corporation Network processor for multiprotocol data flows
US6813729B1 (en) 2000-06-15 2004-11-02 Advanced Micro Devices, Inc. Programmable bi-directional MII testing methodology and device including same
US6937571B1 (en) 2000-06-19 2005-08-30 Advanced Micro Devices, Inc. Method of testing a network device through a medium independent interface (MII)
US6978318B1 (en) 2000-06-19 2005-12-20 Advanced Micro Devices, Inc. Network interface apparatus and method of internal communication within the same
US7058788B2 (en) * 2001-02-23 2006-06-06 Falconstor Software, Inc. Dynamic allocation of computer memory
US6715098B2 (en) 2001-02-23 2004-03-30 Falconstor, Inc. System and method for fibrechannel fail-over through port spoofing
US7093127B2 (en) * 2001-08-09 2006-08-15 Falconstor, Inc. System and method for computer storage security
US20040233910A1 (en) * 2001-02-23 2004-11-25 Wen-Shyen Chen Storage area network using a data communication protocol
SE523330C2 (sv) * 2001-03-01 2004-04-13 Operax Ab Metod, nätportsväxel och dataprogramprodukt för att överföra datapaket i kommunikationsnätverk
US7099922B2 (en) * 2002-01-23 2006-08-29 International Business Machines Corporation Method and system for simultaneous management of multiple tokens on a communication ring
US6986108B2 (en) * 2002-03-21 2006-01-10 Toshiba Tec Kabushiki Kaisha System for accessing digital imaging devices
US7249201B1 (en) * 2003-07-02 2007-07-24 Adaptec, Inc. Single driver for multifunctional SCSI chips
US7506214B2 (en) * 2004-04-22 2009-03-17 International Business Machines Corporation Application for diagnosing and reporting status of an adapter
US7492704B2 (en) * 2005-09-15 2009-02-17 International Business Machines Corporation Protocol definition for software bridge failover
US20080259951A1 (en) * 2007-04-23 2008-10-23 Omar Cardona Method and apparatus for unplanned and uninterrupted network adapter replacement
US8068986B1 (en) 2007-04-27 2011-11-29 Majid Shahbazi Methods and apparatus related to sensor signal sniffing and/or analysis
US10560373B2 (en) * 2017-04-06 2020-02-11 Gvbb Holdings S.A.R.L. System and method for timely and uniform distribution for real-time packet transmission

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4330847A (en) * 1976-10-04 1982-05-18 International Business Machines Corporation Store and forward type of text processing unit
US4400778A (en) * 1979-11-05 1983-08-23 Litton Resources Systems, Inc. Large-volume, high-speed data processor
US4306289A (en) * 1980-02-04 1981-12-15 Western Electric Company, Inc. Digital computer having code conversion apparatus for an encrypted program
US4706081A (en) * 1984-12-14 1987-11-10 Vitalink Communications Corporation Method and apparatus for bridging local area networks
US5206951A (en) * 1987-08-21 1993-04-27 Wang Laboratories, Inc. Integration of data between typed objects by mutual, direct invocation between object managers corresponding to object types
US5088032A (en) * 1988-01-29 1992-02-11 Cisco Systems, Inc. Method and apparatus for routing communications among computer networks
JPH02165241A (ja) * 1988-12-19 1990-06-26 Toshiba Corp ファイルアクセス方式
US5249292A (en) * 1989-03-31 1993-09-28 Chiappa J Noel Data packet switch using a primary processing unit to designate one of a plurality of data stream control circuits to selectively handle the header processing of incoming packets in one data packet stream
US5063494A (en) * 1989-04-12 1991-11-05 Unisys Corporation Programmable data communications controller
US5084877A (en) * 1989-05-05 1992-01-28 At&T Bell Laboratories High speed transport protocol
US5278978A (en) * 1990-03-26 1994-01-11 International Business Machines Corporation Method and system for describing and exchanging data between heterogeneous database systems with data converted by the receiving database system
JPH04279952A (ja) * 1991-03-07 1992-10-06 Nec Corp オンライン端末装置
US5096480A (en) * 1991-03-20 1992-03-17 Glasstech, Inc. Apparatus for radiatively cooling glass sheets
US5265239A (en) * 1991-04-08 1993-11-23 Ardolino Anthony A Method for remotely accessing service programs of a local processing system supporting multiple protocol stacks and multiple device drivers
US5327544A (en) * 1991-08-29 1994-07-05 At&T Bell Laboratories Method and apparatus for designing gateways for computer networks

Also Published As

Publication number Publication date
US5548731A (en) 1996-08-20
JPH06303286A (ja) 1994-10-28

Similar Documents

Publication Publication Date Title
JP2793489B2 (ja) 共通データ・リンク・インターフェース
US7089335B2 (en) Bridging multiple network segments and exposing the multiple network segments as a single network to a higher level networking software on a bridging computing device
US6678734B1 (en) Method for intercepting network packets in a computing device
US8005022B2 (en) Host operating system bypass for packets destined for a virtual machine
US6246692B1 (en) Packet switching fabric using the segmented ring with resource reservation control
US7782869B1 (en) Network traffic control for virtual device interfaces
EP0619036B1 (en) Method and apparatus for processing data within stations of a communication network
US6243753B1 (en) Method, system, and computer program product for creating a raw data channel form an integrating component to a series of kernel mode filters
US8625431B2 (en) Notifying network applications of receive overflow conditions
US20110010427A1 (en) Quality of Service in Virtual Computing Environments
Balaji et al. Head-to-toe evaluation of high-performance sockets over protocol offload engines
EP1880308A2 (en) Method and system for closing an rdma connection
CA2753747A1 (en) Method for operating a node cluster system in a network and node cluster system
US5812767A (en) System for user registering an address resolution routine to provide address resolution procedure which is used by data link provider interface for resolving address conflicts
CN109947581A (zh) 高并发的数据传送方法及用于交换机的数据传送方法
US6839355B1 (en) Cable modem link layer bridge
US8072884B2 (en) Method and system for output flow control in network multiplexers
Hartkopp et al. The CAN networking subsystem of the Linux kernel
Cisco CMPC, CMPC+, and CSNA Commands
US6792467B2 (en) Layer manager
JP3505412B2 (ja) ソケット管理装置およびソケット管理方法
JPH04233353A (ja) ファイバ分散形データインタフェースネットワークのためのネットワーク制御装置
KR0146025B1 (ko) 유닉스 시스템 커널에서 스트림 방식을 이용한 섬유분포 데이터 인터페이스 보드 구동장치
Besaw Berkeley UNIX† System Calls and Interprocess Communication
JPH10271140A (ja) リアルタイム通信方法

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees