node構造体について ↑
QualNetの基本設計については(ProgrammersGuide - Simulator Basics)を参照してください。 Simulator Basicsにあるように、QualNetでは、各ノードがそれぞれ保持しているプロトコルスタックを実行することで処理が進んでいきます。そこで(プログラム的に)重要になってくるのが、ノード単位の情報であるノード構造体です。
概要 ↑
node構造体は、QualNetのソースコードのあらゆる主な関数の引数になっている重要な構造体です。その名の通り、各ノード(端末やサーバ)につきひとつずつ用意されるnode情報構造体で、ノード名(host1など)、ノードID、そのノードのNIC情報、各レイヤのプロトコル情報、ルーティング情報などが保持されています。ただし、レイヤ単位の情報は、各レイヤ用の構造体にまとめられており、それをnode構造体が保持する形式になっています。
node構造体はリスト構造になっているので、あるノードの処理を行う関数中で、シナリオ上の他のノード情報を取得することも可能です。ただし、実世界を考えると分かるように、基本的にノードは自分の情報のみ参照可能で、他のノードの情報を知りたい場合はデータ通信(Message)のやりとりを介して通知するのが現実に即した動作です。シミュレーションを単純化するためにメッセージのやりとりを行わずに、ノード構造体を辿って他のノード情報を参照することに問題はありませんが、飽くまでシミュレーションであるから出来ることである、ということを意識しておく必要があります。
最初にPARTITION_InitializeNodes()で各初期化を行うことになります。この時点でシミュレーション時刻は0秒です。対応する終了処理はPARTITION_Finalize()です。
主なメンバ変数 ↑
型 | 変数名 | 説明 |
Node* | prevNodeData | ノードリストで、ひとつ前のノードへのポインタ、なければNULL |
Node* | nextNodeData | ノードリストで、ひとつ後のノードへのポインタ、なければNULL |
clocktype* | currentTime | 現在シミュレーション時刻へのポインタ |
... | ||
PropChannel* | propChannel | チャネル情報 他のレイヤメンバ変数と違い、ノード単位の情報ではないので注意が必要。 |
NetworkData | networkData | IPレイヤ情報。内部でNIC単位の配列を持ち、IPアドレスやIPバッファ、ルーティングテーブルなどの情報を保持する |
MacData** | macData | MACレイヤ情報。NIC単位のMAC配列であり、MACプロトコル情報やプロトコル依存の構造体へのポインタ等を保持する |
PhyData** | phyData | PHYレイヤ情報。一つのノードに複数のインターフェースが存在する場合は、phyIndexにより区別される。 |
... |
メンバ変数の追加 ↑
例えば新規レイヤを作成したい場合や、全ノードに持たせたい追加設定値等がある場合は、ノード構造体に新規にメンバを追加してください。ただし、追記場所には注意が必要です。
//Users should not modify anything above this line.
のラインより下に追加してください。また、新規に既存のレイヤのプロトコルを追加したい場合は、 node構造体ではなく、各レイヤ構造体を編集することになります。(ProgrammersGuide - Writing Protocols in QualNet参照)