メイン Scenario Setup & Configuration データパケットがマルチホップした経路を【Output Window】に出力させたい | 投稿するにはまず登録を |
題名 | 投稿者 | 日時 |
---|---|---|
» データパケットがマルチホップした経路を【Output Window】に出力させたい | gogotea | 2012/1/20 16:04 |
Re: データパケットがマルチホップした経路を【Output Window】に出力させたい | hed | 2012/1/20 16:41 |
Re: データパケットがマルチホップした経路を【Output Window】に出力させたい | gogotea | 2012/1/20 18:31 |
フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
gogotea | 投稿日時: 2012/1/20 16:04 |
新米 登録日: 2011/12/31 居住地: 投稿: 8 |
データパケットがマルチホップした経路を【Output Window】に出力させたい こんにちは。
Qualnet5.0.2 routing protocolはolsr_inria を使用しています。 routing_olsr-inria.cppの #define DEBUG_OUTPUT 0 上のソース部分を #define DEBUG_OUTPUT 1 に変更すると、GUI画面の【Output Window】にOLSRのルーティングテーブルが表示されdestinationとnexthopをたどりながら見ることで、パケットがどのような経路を通ってマルチホップしたかを確認することができます。 しかし、例えば100ノードを設置し、上記の方法でマルチホップした経路を確認しようとすると、ノードの数が多いのでマルチホップする回数も増えていき、目でルーティングテーブルを追っていく作業がとても大変になります。(実際に16hopの通信を4本追ったことがありますが、非常に大変でした。) 実際に見たいのは、ルーティングテーブルではなく、データパケットがどの経路を通ったかという情報です。 そこで今後の研究のためにも、【Output Window】にデータパケットがマルチホップした経路を出力されるように改良したいと考えているのですがどうすればいいでしょうか?(packets traceというQualnetの機能もあるそうですが、ノード数が多い環境では動作が非常に遅くオススメできないと聞きます。) 出力例: 169.0.0.1→169.0.0.2→169.0.0.3→......->169.0.0.100 (IPアドレスでなくてNode番号でも構いまえん) 私はolsr_inriaを使用していますので、経路はTCメッセージなどで構築しているはずです。しかし、それは経路を構築しているだけであって、実際にパケットのフォワーディングを行っている部分はolsrに依存しない部分で行われていると考えているので、olsrであることに特にこだわる必要はないと思っています。 マルチホップした経路を知りたいと思ったのは私が初めてだとはとても思えませんので、フォーラムユーザの中にこの疑問を解決した人がいるかもしれないと思い質問させていただきました。 以下は自分なりにとってみた行動をまとめてみました。 関連ワードとして、destination,nexthop,fowardingなどが考えられるので、これらのワードを主軸に関連深いソース部分を探してみましたが、 検索してヒットする量が多く、目星をつけるのも中々大変といった現状です。 フォワーディングを行っているソース部分なら nexthop=XXXXX このようにネクストホップを更新する部分があると予想しているので、そういった部分に目星をつけました。 見つかった中で特に関連深いと思ったのが以下の関数です。 // FUNCTION NetworkUpdateForwardingTable() // FUNCTION NetworkIpLoopbackForwardingTableReturnInterfaceAndNextHop() 前者の関数の中では forwardTable->row[i].destAddress = destAddress; forwardTable->row[i].destAddressMask = destAddressMask; forwardTable->row[i].interfaceIndex = interfaceIndex; forwardTable->row[i].nextHopAddress = nextHopAddress; このような記述が 公社の関数の中では *nextHopAddress = loopbackFwdTable->row[i].nextHopAddress; このような記述がありました。 関数の目的を自分なりに和訳したところ前者は IP routing tableにエントリーをアップデート(更新)もしくは加える関数 後者は destination IPアドレスと一緒に出力先のインターフェースとネクストホップIPアドレスを手に入れるために ルーティングテーブルを検索 どちらかといえば、後者の関数でデータパケットのフォワーディングを行っているような気がしたので、一旦、 loopbackFwdTable->row[i].nextHopAddress ↑の変数の値をprintf()関数で出力させようとしましたが、ここの行は実行されないことが分かりました。(ブレークポイントをつけてデバッグしても通らなかった。) 1つ目の関数内で挙げた4つの変数が更新される行はデバッグは通るのですが、そこにブレークポイントをつけたらデバッグが止まったので実行はされるようですが、止まった時のコマンドプロンプト画面をみると まだデバッグは序盤のようで、データパケット送信のタイミングでとまったわけではないことがわかります。 (CurrentSimtime=60からデータパケットを送信する設定でしたが、まだCurrentSimTimeという文字すらコマンドプロンプト上で出力されないのでわかります。) 中々思うようにいきません。 同じことにチャレンジしたことがある人、Qualnetにお詳しい方 アドバイスよろしくお願いします。 |
フラット表示 | 前のトピック | 次のトピック |