メイン Routing Protocols Implementation & Model Development プロトコルの改良について | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
m-m-cast | 投稿日時: 2006/8/14 20:41 |
半人前 登録日: 2006/8/14 居住地: 投稿: 21 |
プロトコルの改良について こんばんは。QualNetを使い始めたばかりの初心者です。
ルーティングプロトコルAODVに少し改良を加えたいと考えているのですが、QualNetのソースファイルを見る限り、存在する様々なヘッダファイルには各々の構造体の定義、.cppファイルには各構造体に対するメンバ関数の実装などが書いてありますが、プロトコル全体の流れを把握する為のmainファイルがどこにも見つかりません。 もしかすると、QualNetにおけるmainファイルは、このツール全体の流れを記述しているため、公開されていないのでしょうか? そういった場合、皆さんはプロトコル全体の流れを見るのではなく、各関数を見てプロトコルを改良しているのでしょうか? 今までにそのような経験がないため、何から手をつけていいかわからずに手詰まり状態です。何か参考になるアドバイス等を頂けたら幸いです。 |
riri | 投稿日時: 2006/8/15 18:24 |
新米 登録日: 2006/7/3 居住地: 投稿: 14 |
Re: プロトコルの改良について こんにちは。はじめまして。
まず、QualNetでは離散シミュレーションを行っているのですが、離散シミュレーションの仕組みの理解については問題ないでしょうか? もし、よく分からないようでしたら、プログラマーズガイドの3章が参考になるはずです。 プロトコルは、Messageのやり取りによって設定されています。Messageのスケジューリングとタイマーの部分を理解されれば、改良できると思います。 例えば、 MESSAGE_Send(node, msg, time); でスケジューリングが行われ、時間(time)になると、switch 文などでメッセージ内容により場合分けされた処理が行われています。 (ちなみに、nodeは addons/seq/node.h、msgは include/message.hなどが参考になります。) また、mainは非公開となっているようですが、特に問題ないと思いますよ。 それから、参考になりそうなフォーラム投稿があるので、追記しておきます。 ・QNプログラミング初心者のアプローチ http://simweb.kke.co.jp/qualnet/forum/modules/newbb/viewtopic.php?viewmode=thread&topic_id=154&forum=49&post_id=442#442 ・main 関数の非公開について http://simweb.kke.co.jp/qualnet/forum/modules/newbb/viewtopic.php?viewmode=thread&topic_id=241&forum=49&post_id=813#813 |
m-m-cast | 投稿日時: 2006/8/15 23:43 |
半人前 登録日: 2006/8/14 居住地: 投稿: 21 |
Re: プロトコルの改良について ririさん、はじめまして。こんにちは。
離散型シミュレーションについては自分なりに理解しているつもりです。 ですが、不安もあるのでプログラマーズガイドの3章も読んでみます。ありがとうございます。 >プロトコルは、Messageのやり取りによって設定されています。 Messageのやり取りとや、スケジューリング、タイマーというのは、いつ メッセージが出されてそれを受け取るとタイマーによってなんらかのプロトコルメカニズムが実行されるといった様な仕組みになっているのでしょうか? 例えば、あるプロトコルの制御メッセージにそのプロトコルには存在しない別の項目を記述し、それを生かしてルーティングなどを改良する場合、そのメッセージがプログラムの別の部分(2層や3層のインターフェース部分など)で認識されず、コンパイルが通らないなどの弊害はないのでしょうか? QualNetのソースコードを見て、あまりの多さに愕然としているのですが…このソースコードは、一度全てに目を通してからプロトコルの改良に踏み切ったほうがいいと思ったのですが、その為にも最悪でも2層から5層までのプロトコルの一連の流れを理解できないものかと思いました。 プロトコルの改良には、その様な流れを理解する必要なく、必要な部分だけ動作を理解すれば、可能ということでしょうか? ririさんが紹介してくれたフォーラムは、大変参考になりそうです。 丁寧親切なコメント大変感謝しております。ありがとうございます。 今後ともまたよろしくお願いいたします。 |
riri | 投稿日時: 2006/8/17 10:55 |
新米 登録日: 2006/7/3 居住地: 投稿: 14 |
Re: プロトコルの改良について 前回のMessageについての説明が分かりづらかったみたいですみません。もう少し詳しくしておきました。↓
まず、Engine は Message をスケジューリングします。 Message には、Packet そのものをあらわす場合と、Timer のためのイベントを表す場合の2種類あり、Messageの使い方は以下のようになっています。 ○Packet そのものの場合 ・レイヤ間のインターフェースの引数として使用。 ・Packet として使われる Message を イベントとしてスケジューリングするために使用。この時は当然、対となるイベントハンドラとなる関数があって、この場合のイベントハンドラは、スケジューリングしたパケットを処理することになります。スケジューリングが必要な際には MESSAGE_Send 等のAPIが使われます。 ○Timer イベントの場合 ・Message を イベントとしてスケジューリングするために使用。(特定のパケットに依存しない、何らかの処理をある時間に呼び出したい場合) >QualNetのソースコードを見て、あまりの多さに愕然としているのですが… ・・・確かに多いですよね。はじめからこのほとんどを理解しようとすると、ケッコウ大変なのでは?と思います。 基本的には、プロトコルの改良には、必要な部分(修正するプロトコルの下位、上位レイヤとのインターフェース)を抑えておけば大丈夫だと思います。 プロトコルの改良についても、プログラマーズガイドに記載してあるはずなので、ソースだけでなくこちらも参照したほうがよいかも? フォーラム、参考になりそうでよかったです。ほかにもいろいろ検索してみるといいかもしれませんね。 |
riri | 投稿日時: 2006/8/17 10:55 |
新米 登録日: 2006/7/3 居住地: 投稿: 14 |
Re: プロトコルの改良について 前回のMessageについての説明が分かりづらかったみたいですみません。もう少し詳しくしておきました。↓
まず、Engine は Message をスケジューリングします。 Message には、Packet そのものをあらわす場合と、Timer のためのイベントを表す場合の2種類あり、Messageの使い方は以下のようになっています。 ○Packet そのものの場合 ・レイヤ間のインターフェースの引数として使用。 ・Packet として使われる Message を イベントとしてスケジューリングするために使用。この時は当然、対となるイベントハンドラとなる関数があって、この場合のイベントハンドラは、スケジューリングしたパケットを処理することになります。スケジューリングが必要な際には MESSAGE_Send 等のAPIが使われます。 ○Timer イベントの場合 ・Message を イベントとしてスケジューリングするために使用。(特定のパケットに依存しない、何らかの処理をある時間に呼び出したい場合) >QualNetのソースコードを見て、あまりの多さに愕然としているのですが… ・・・確かに多いですよね。はじめからこのほとんどを理解しようとすると、ケッコウ大変なのでは?と思います。 基本的には、プロトコルの改良には、必要な部分(修正するプロトコルの下位、上位レイヤとのインターフェース)を抑えておけば大丈夫だと思います。 プロトコルの改良についても、プログラマーズガイドに記載してあるはずなので、ソースだけでなくこちらも参照したほうがよいかも? フォーラム、参考になりそうでよかったです。ほかにもいろいろ検索してみるといいかもしれませんね。 |
m-m-cast | 投稿日時: 2006/8/19 20:13 |
半人前 登録日: 2006/8/14 居住地: 投稿: 21 |
Re: プロトコルの改良について 大変わかりやすい説明ありがとうございます。
ririさんの説明を読んで、QualNetのコードの理解方法がわかってきました。今は教えていただいたことを生かして自分なりにソースを理解していきたいと思っています。本当にわかりやすくて丁寧なご説明ありがとうございます。 後、一つ教えて頂きたいことがあるのですが、 >・Packet として使われる Message を イベントとしてスケジューリングするために使用。この時は当然、対となるイベントハンドラとなる関数があって、この場合のイベントハンドラは、スケジューリングしたパケットを処理することになります。 ここで使われているイベントハンドラというのは、どういうものなのでしょうか?よくイベントハンドラという言葉を聞くのですが、まだよく理解できていません… よろしくお願いします。 |
puruta | 投稿日時: 2006/8/21 9:52 |
半人前 登録日: 2005/7/13 居住地: 福岡 投稿: 39 |
Re: プロトコルの改良について イベントハンドラはその名のとおり、イベントを処理する関数です。
離散シミュレーションをご存知であれば、イベントとイベントを処理する関数という説明で大体想像できると思いますが、例えば、CBRアプリケーションのイベントハンドラは下のような形をとっています。
引数にそのイベントを処理するノード、msgは処理すべきイベントで、こういうのが代表的なハンドラです。呼び出し元をたどると Node_ProcessEvent ->App_ProcessEvent->AppLayerCbrClientとなっており、エンジンがスケジュール時刻になったらこのスタックコールで呼び出していることが分かります。 Node_ProcessEvent:誰が実行するのかを特定し、どのレイヤで実行されるべきイベントなのかを msg を参照して決定 App_ProcessEvent が どのアプリケーションのイベントかを特定し、最終的にCBRのイベントハンドラに引き渡しています。この辺りは基本なので、いきなりソースコードが見れないのであれば、まずはドキュメントを見てみることをお勧めします。この辺りの仕組みはかなり簡単です。 |
m-m-cast | 投稿日時: 2006/8/22 16:14 |
半人前 登録日: 2006/8/14 居住地: 投稿: 21 |
Re: プロトコルの改良について purutaさん、はじめして。
わかりやすい説明ありがとうございます。 イベントハンドラとは、イベントが発生するとそのイベントに対応したイベント処理関数が呼び出されて、その呼び出された関数がcppファイルで実装されているコード通りに処理するといった形ですね。大変よくわかりました。ありがとうございます。 CBRなどの基本的な動作をコードで理解していけば、その他の難しいプロトコルに対するコードの動作をある程度理解できるかもしれません。 とても参考になりました。ありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |