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クラス(ルーティングエージェントに使われるコンテナクラス)
    • rtglib/route-proto.tclに定義
    • コンテナ注の各オブジェクトはピアエージェントのアドレス,メトリック,優先度を保持している
    • プロトコルエージェントは,ひとつのピアに対して1個のオブジェクトを保持.各ピアはエージェントアドレスとポートアドレスのペアで識別
    • init{}
      • rtPeerクラスのコンストラク
    • metric{}/metric?{}
    • preference{}/preference?{}
    • addr?{}
    • port?{}
  • Agent/rtProtoクラス(すべてのルーティングエージェントの基本クラス)
    • rtglib/route-proto.tclに定義
    • OTclで新しいルーティングエージェントを実装する際,このクラスを継承する
    • 必要に応じて,init{},compute-routes{},send-updates{}を定義.
    • さらにダイナミックルーティングを行う際,compute-all{},intf-changed{}も定義
    • init-all{}
      • 引数はノードリスト
      • Agent/rtProtoクラスの初期化を行う
    • init{}
      • Agent/rtProtoクラスのコンストラクタであり,プロトコルエージェントのオブジェクトを生成する際に実行される
      • Agent/rtProto::init{}は引数として渡されるノードハンドルに対して初期化を行い,配列変数ifs_に隣接ノードへのリンクハンドルを設定する
      • 各リンクのup/down状態を配列変数ifstate_に保存
    • compute-routes{}
      • 経路を計算するためのプロシージャ
      • ここでは特に何もしない
      • Agent/rtProtoを継承する各プロトコルエージェントでは各自にcompute-routes{}をオーバーライドする必要がある
    • send-updates{}
      • 経路情報が変更した場合,アップデートパケットを送り出すためのプロシージャ
      • rtObject::compute-routesにより呼び出され,アップデートパケットを全てのピアに向けて送出
      • ここでは特に何もしない
      • Agent/rtProtoを継承する各プロトコルエージェントでは,必要に応じて各自にsend-updates{}をオーバーライドする必要がある

rtProtoフレームワークのシーケンス図と状態遷移図



SimpleRip