![]() ![]() ![]() | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
yosio | 投稿日時: 2012/1/7 17:00 |
常連 ![]() ![]() 登録日: 2011/11/24 居住地: 投稿: 41 |
AODVプロトコルのローカルリペアについて いつもお世話になっております。
AODVプロトコルのローカルリペアについて、このローカルリペアが開始条件として処理されている所を教えてもらえませんか? |
chackn | 投稿日時: 2012/1/11 21:00 |
常連 ![]() ![]() 登録日: 2005/5/13 居住地: Kanagawa, Japan 投稿: 61 |
Re: AODVプロトコルのローカルリペアについて yosioさん
投稿から4日経っても誰も答えてないようなので、ちょっとソースを読んで見ました。 yosioさんはソース"routing_aodv.cpp"は見られましたか? もう見つけられたかもしれませんが、80回も閲覧されているので他のユーザの皆様のためにも、一応分かったことを書きますね。 リンクが切断するとAodvHandleLinkFailure()が呼ばれますよね。 その中からAodvMarkRouteAsLocallyRepairable()が呼ばれていて、恐らくAODVの管理しているルーティングテーブルのエントリに、「ローカルリペア可能」という印が付くのだと容易に想像できます。 一方、ローカルリペアが実際に起きるのは、ノードに到着したパケットが利用しようとしたエントリに「ローカルリペア可能」の印を見つけた時でしょうね。そう考えると、"rtEntry->locallyRepairable"をサーチしていけば自ずと見つかるはず。 って見てたらそれっぽい関数AodvHandleData()の中にこんなコメントが・・・。 // No rreq has been sent for the route if (aodv->localRepair && rtToDest && rtToDest->locallyRepairable) { --> // Try to do local repair if possible BOOL ifLocalRepairPossible = FALSE; ifLocalRepairPossible = AodvHandleLinkFailure( node, aodv, msg, rtToDest->nextHop, destAddr); ... } ここまで分かればもう大丈夫ですよね。 では頑張ってください。 |
yosio | 投稿日時: 2012/1/12 10:13 |
常連 ![]() ![]() 登録日: 2011/11/24 居住地: 投稿: 41 |
Re: AODVプロトコルのローカルリペアについて すいません,返信ありがとうございます.
一点質問させてもらいます. 上の質問につながらないことなのですが,経路選定後の動的な経路切り替えの研究をしているのですが,経路切り替えでの処理の部分がうまくかけていません.経路を切り替えるタイミングとして通信中にQueue内のパケット数がある一定の数値までにいった場合に切り替えたいと思っています. 解らない場所 実際に経路切り替えを始める処理の仕組みが解りません. 又,経路切り替え処理を書く場所が解りません. すいません,プログラミングが苦手なので戸惑っています |
chackn | 投稿日時: 2012/1/12 14:29 |
常連 ![]() ![]() 登録日: 2005/5/13 居住地: Kanagawa, Japan 投稿: 61 |
Re: AODVプロトコルのローカルリペアについて yosioさん
ご質問は二点ですね。 基本的にAODVにしろ他のルーティングプロトコルにしろ、経路表(Routing Table, Forwarding Table)を使って経路を制御しています。つまり、経路を切り替えるには経路表を書き換えてやればいいわけですね。 以下、もう少し具体的に。 1.実際に経路切り替えを始める処理の仕組みが解りません. 私がアイデアを出してしまうと私を論文の共著者入れていただかないといけませんが(冗談です)、例えば切り替えたい経路を一旦切断したことにして、再度経路構築をするというのはいかがでしょうか?Local Repairの処理はとても参考になると思いますよ。つまり、経路が切れていなくても、「ローカルリペア可能」フラグを立ててしまうとかです。 その際に、再選択される経路を選ぶメトリクス(ホップ数とか)に、工夫をするんでしょうね。AODVだとRREQ(経路要求)を送信して複数のRREP(経路応答)が返ってきた時に、今は最短HOP数の経路を選んでいると思います。これを、別の指標で選ぶようにするんでしょうね。 2.又,経路切り替え処理を書く場所が解りません. Local Repairと同じことをする(中継ノードで経路を切り替える)のであれば、Local Repairの処理をやっているところがまさにその場所です。 ・経路切替の判断をした時点で経路表エントリに印をつけて切り替えたい経路が切れたことにする。 ・データパケットが来てその経路を使おうとしたらLocal Repairを開始する。 これらは既に説明しましたね。加えて、RREPが返ってきた複数の経路から適切な経路を選択するコードを書けばいいと思います。多分、関数名からしてAodvHandleReply()あたりで処理しているんじゃないかな。 そういう目で見てみたら、こんなコメントが見つかりましたよ。 // The forward route for this destination is created or updated only if // (i) the Destination Sequence Number in the RREP is greater than the // node's copy of the destination sequence number, or // (ii) the sequence numbers are the same, but the route is no longer // active or the incremented Hop Count in RREP is smaller than // the hop count in route table entry. Sec: 8.7 どんな経路を選択するかにもよりますが、このコメントにあるルールを変更すれば良いのなら、コメントの直後のコードに手を入れればいいでしょう。 もしかしたら、経路表のエントリと、RREPパケットに判断材料となる指標値を追加する必要があるかもしれません。 ちょっと親切すぎたかな? |
yosio | 投稿日時: 2012/1/13 11:46 |
常連 ![]() ![]() 登録日: 2011/11/24 居住地: 投稿: 41 |
Re: AODVプロトコルのローカルリペアについて 返信,有難うございます。
アイディアを出していただき助かります. >経路切替の判断をした時点で経路表エントリに印をつけて切り替えたい経路が切れたことにする。 疑問に思ったことがあります. 通信を切らさないで経路切り替えを行うのが理想なのですが…「ローカルリペア可能」フラグを立てしまうと,行っている通信の処理はどうなってしまうと予想しますか? 私は,経路表に印をつけた場合,通信をするときにその経路が使えないと思い,データパケットがバッファに溜まっていってしまうと思いました.chacknさんはどう考えましたか? |
chackn | 投稿日時: 2012/1/13 12:05 |
常連 ![]() ![]() 登録日: 2005/5/13 居住地: Kanagawa, Japan 投稿: 61 |
Re: AODVプロトコルのローカルリペアについて yosioさんこんにちは。
「通信を切らさないで経路切り替えを行うのが理想」だとすると、「ローカルリペア可能」フラグとは別にフラグを用意(追加)するんですね。 そうしておいて、そのフラグが立っている経路が使われたら、パケットは通常どおり転送しておいて、同時に経路探索(ローカルリペアと同様の処理)も走らせればいいと思います。 RREPが返ってきたら、メトリクス値次第で(現在の経路よりも良い経路が見つかったら)経路表エントリをアップデートすればいいですね。 このやり方ならデータパケットをバッファに溜めずによりよい経路を探索できますね。 ただ、RREQに新たなフラグを追加したり、そのフラグを見てRREQ受信時の処理に手を加えたりする必要がありますね。 論文が完成したらぜひこのフォーラムでも概要をご紹介ください。 |
yosio | 投稿日時: 2012/1/13 12:26 |
常連 ![]() ![]() 登録日: 2011/11/24 居住地: 投稿: 41 |
Re: AODVプロトコルのローカルリペアについて chacknさん,こんにちは。
この教えてもらった情報を基にやっていこうと思っています. ここまで,Local Repairのことあげていたので,自分もRFCのAODVの所を見直して理解しようとみているのですが…Local Repairの動作がいまいちつかめません.Local Repairの動作イメージとしてリンク切断が起きた上流の中継ノードで経路探索と経路切り替えを行っているのですか? もしよろしければ,ご教授よろしくお願いします. |
chackn | 投稿日時: 2012/1/13 15:02 |
常連 ![]() ![]() 登録日: 2005/5/13 居住地: Kanagawa, Japan 投稿: 61 |
Re: AODVプロトコルのローカルリペアについて yosioさん
Local Repairの動作についてはRFC読んで勉強してください。 http://www.ietf.org/rfc/rfc3561.txt 私もそこまではお付き合いできません。 ここはQualNetのコミュニティフォーラムですから。 |
yosio | 投稿日時: 2012/1/14 8:14 |
常連 ![]() ![]() 登録日: 2011/11/24 居住地: 投稿: 41 |
Re: AODVプロトコルのローカルリペアについて はい,甘えすぎました.
後は私の理解範囲を広げてやっていきます.再度,疑問点や課題点などが出てきた場合には,お手数ですが質問をさせて頂きますのでよろしくお願いします. ありがとうございました. |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |