NS2でルーティングプロトコルを開発
rtProtoフレームワーク
パケットの送受信,ヘッダの定義以外,主にOTclで実装する.
- RouteLogicクラス(ユニキャストルーティングエージェントの基本クラス.ルーティングプロトコル登録やノードへの実装など)
- simulator.h内で定義.メソッドはtcl/lib/ns-route.tclに定義
- ユニキャストルーティングプロトコルを実装するために以下のメソッドを提供
- register{}
- configure{}
- lookup{}
- rtObjectクラス(ダイナミックルーティングエージェントにより使われる基本クラス.ルーティングエージェントの生成,ノードへの実装)
- rtglib/route-proto.tclに定義
- init-all{}
- init{}
- add-proto{}
- lookup{}
- compute-routes{}
- dump-route{}
- Proto?{}
- nextHop?{}
- rtpref?{}
- metric?{}
- rtPeerクラス(ルーティングエージェントに使われるコンテナクラス)
- Agent/rtProtoクラス(すべてのルーティングエージェントの基本クラス)
- rtglib/route-proto.tclに定義
- OTclで新しいルーティングエージェントを実装する際,このクラスを継承する
- 必要に応じて,init{},compute-routes{},send-updates{}を定義.
- さらにダイナミックルーティングを行う際,compute-all{},intf-changed{}も定義
- init-all{}
- 引数はノードリスト
- Agent/rtProtoクラスの初期化を行う
- init{}
- compute-routes{}
- 経路を計算するためのプロシージャ
- ここでは特に何もしない
- Agent/rtProtoを継承する各プロトコルエージェントでは各自にcompute-routes{}をオーバーライドする必要がある
- send-updates{}
- 経路情報が変更した場合,アップデートパケットを送り出すためのプロシージャ
- rtObject::compute-routesにより呼び出され,アップデートパケットを全てのピアに向けて送出
- ここでは特に何もしない
- Agent/rtProtoを継承する各プロトコルエージェントでは,必要に応じて各自にsend-updates{}をオーバーライドする必要がある