この付録では Tru64 UNIX オペレーティング・システムのトークン・リング・ドライバの開発に関連する次の情報について説明します。
ソース・ルーティング
キャノニカル・アドレスの使用
データの境界合わせ
ドライバの
softc
構造体フィールドの設定
ソース・ルーティングはトークン・リング・ローカル・エリア・ネットワーク (LAN) 上のシステムが,相互接続しているトークン・リング LAN 上の他のシステムにメッセージを送信する際に使用するブリッジ機構です。 この機構では,メッセージのソースであるシステムはルート・ディスカバー・プロセスを使用してトークン・リング LAN 上の最適なルートを判別し,デスティネーション・システムにブリッジします。
トークン・リング・ソース・ルーティング・モジュールを使用するためにカーネル構成ファイルに TRSRCF オプションを追加する必要があります。
TRSRCF オプションを追加するには,次のように
doconfig -c
コマンドを使用します。
スーパユーザのプロンプト (#) から
doconfig -c
HOSTNAME
コマンドを入力する。
HOSTNAME
にはシステムの名前を大文字で指定します。
たとえば,システム名が
host1
の場合,
# doconfig -c HOST1
と入力します。
カーネル構成ファイルに TRSRCF オプションを追加する。
カーネル構成ファイルを編集するかどうかについての質問に
y
と応答します。
doconfig
コマンドでは
ed
エディタを使用して構成ファイルを編集することができます。
ed
エディタの詳細についてはリファレンス・ページの
ed
(1)
次のコードは
ed
エディタを使用して
host1
のカーネル構成ファイルに TRSRCF オプションを追加する例です。
追加する行の番号はカーネル構成ファイルによって異なります。
*** KERNEL CONFIGURATION AND BUILD PROCEDURE *** Saving /sys/conf/HOST1 as /sys/conf/HOST1.bck Do you want to edit the configuration file? (y/n) [n]: y Using ed to edit the configuration file. Press return when ready, or type 'quit' to skip the editing session: 2153 48a options TRSRCF . 1,$w 2185 q *** PERFORMING KERNEL BUILD ***
doconfig
コマンドで作成された新しいカーネルをルート・ディレクトリ (/
) に移動し,システムをリブートする。
カーネルの再構築および
doconfig
コマンドに関する詳細は『システム管理ガイド』を参照してください。
トークン・リング・ソース・ルーティング機能は
trn_units
変数が 1 以上の場合に初期化されます。
trn_units
変数はシステム上で初期化されたトークン・リング・アダプタの数を表わします。
ドライバは次のように
trn_units
を宣言する必要があります。
extern int trn_units;
attach
ルーチンの最後でドライバは次のように
trn_units
をインクリメントする必要があります。
trn_units++;
ソース・ルーティング管理については『ネットワーク管理ガイド:接続編』を参照してください。
E.2 キャノニカル・アドレス
トークン・リング・ドライバがアドレスをドライバより上層に渡している間,メディア・アクセス・コントロール (MAC) ヘッダ・ファイルのデスティネーション・アドレス (DA) とソース・アドレス (SA) はキャノニカル形式であることが要求されます。
キャノニカル・フォームは最下位ビット (LSB) 形式とも呼ばれます。 キャノニカル・フォームは,最上位ビット (MSB) を最初に転送するノンキャノニカル・フォーム (または MSB 形式) と異なり,LSB を最初に転送します。 また両者には各オクテット内のビットの順序が逆であるという相違があります。
次のアドレスはノンキャノニカル・フォームの例です。
10:00:d4:f0:22:c4
上記のアドレスはキャノニカル・フォームでは次のようになります。
08-00-2b-0f-44-23
ハードウェアが MAC ヘッダのアドレスがキャノニカル・アドレスのドライバを提供していない場合,アドレスを上層に渡す前に,アドレスをキャノニカル・フォームに変換する必要があります。
次のフォーマットを含む
haddr_convert
カーネル・ルーチンを使用してキャノニカル・アドレスからノンキャノニカル・アドレスへの変換またはその反対の変換を行なうことができます。
haddr_convert(
addr)
unsigned char *addr
addr
変数は変換を必要とする 6 バイトのアドレスへのポインタです。
変換されたアドレスは同じバッファに返されます。
E.3 データの境界合わせ
ドライバが受信するフレームは,ルーティング情報フィールド (RIF) とデータをインクルードするメディア・アクセス・コントロール (MAC) ヘッダで構成されます。 RIF の長さは 0 バイトから 18 バイトまでの間で変化するので,RIF の後のデータがロングワードの境界に揃わないことがあります。 性能の低下を防ぐために,RIF フィールドの埋め込みを行ない,データが常にロングワード境界から開始されるようにすることをお勧めします。
図 E-1
は MCA ヘッダのコンポーネントと典型的なフレームのデータの関係を示した概念図です。
図 E-1: 典型的なフレーム
softc
構造体にはドライバに特有の情報が含まれています。
ドライバの
attach
ルーチンで
softc
構造体の次のフィールドを設定する必要があります。
sc->isac.ac_arphrd=ARPHRD_802;
sc
は
softc
構造体のポインタで,ARPHRD_802
はこのインタフェースから送られたアドレス解決プロトコル (ARP) パケットで使用されるハードウェア・タイプの値です。
ARPHRD_802
の値が 6 の場合 IEEE 802 ネットワークを示します。