![]() ![]() ![]() | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
KIN | 投稿日時: 2012/9/2 20:27 |
新米 ![]() ![]() 登録日: 2012/6/25 居住地: 投稿: 17 |
OLSRでのノードの処理の遅延 OLSRにおいて、各ノードがhelloメッセージを受信したら
一定時間、処理を行わないようにしたいと考えています。 そこで、routing_olsr-inria.cppの8581行目からのプログラムが 各ノードがhelloメッセージを受信した後の処理だと思い 遅延処理を書き込んでみたのですが、 実際に、実行してみると遅延処理を書き込まない場合と、 書き込んだ場合の処理が変わっていませんでした。 上記のような処理を行わせるには、どうしたらいいでしょうか? |
scallion | 投稿日時: 2012/9/7 14:10 |
常連 ![]() ![]() 登録日: 2010/10/21 居住地: 投稿: 51 |
Re: OLSRでのノードの処理の遅延 遅延処理とはどのようなコードを記述されたのでしょうか。
|
KIN | 投稿日時: 2012/9/10 19:40 |
新米 ![]() ![]() 登録日: 2012/6/25 居住地: 投稿: 17 |
Re: OLSRでのノードの処理の遅延 返信ありがとうございます。
8600行くらいの // /** // FUNCTION :: OlsrProcessReceivedHello // LAYER :: APPLICATION // PURPOSE :: Process hello message // PARAMETERS :: // + node : Node* : Pointer to Node structure // + message : hl_message * : Pointer to hello message // + incomingInterface: Int32: interface at which packet arrived // + from_addr: Address: neighbor interface address that sent packet // RETURN :: Int32 : 1 if error // **/ の場所に Message* hellodelayMsg; ////message allo hellodelayMsg = MESSAGE_Alloc(node, APP_LAYER, APP_ROUTING_OLSR_INRIA, MSG_APP_OlsrHellodelay); //// delay MESSAGE_Send(node, hellodelayMsg, 0.03 * SECOND); を追加して処理を遅延させようとしました。 |
scallion | 投稿日時: 2012/9/11 15:42 |
常連 ![]() ![]() 登録日: 2010/10/21 居住地: 投稿: 51 |
Re: OLSRでのノードの処理の遅延 MESSAGE_Send(node, hellodelayMsg, 0.03 * SECOND);
の後、すぐにreturnで抜け、0.03 * SECOND後に、 OlsrProcessReceivedHello相当の処理を行ったという理解で良いでしょうか。 問題はないように思いますが・・。 基本的なことしか言えず申し訳ないですが、以下、確認してみて下さい。、 ・上記のMessage_Send後にそのままOlsrProcessReceivedHelloの処理を続けていませんか? ・0.03*SECOND経過後、通過させたい関数を通っていますか? ・0.03*SECONDの遅延を入れて、処理が変わるという前提は正しいでしょうか? |
KIN | 投稿日時: 2012/9/18 14:42 |
新米 ![]() ![]() 登録日: 2012/6/25 居住地: 投稿: 17 |
Re: OLSRでのノードの処理の遅延 おそらく
MESSAGE_Send()の扱いについてよくわかっていないのが 原因だと思います。 11100行目あたりの // /** // FUNCTION :: RoutingOlsrInriaLayer // LAYER :: APPLICATION // PURPOSE :: The main layer structure routine, called from application.cpp // PARAMETERS :: // + node : Node* : Pointer to Node structure // + msg : Message* : Message to be handled // RETURN :: void : NULL // **/ の部分の case文の中に記述すべき内容がよくわかっていません。 なので、 現在はMESSAGE_Free()だけを記述してあります。 MESSAGE_Send()で遅延を実現できると考えていたのですが、 違うのでしょうか? |
utsubo | 投稿日時: 2012/9/19 18:36 |
新米 ![]() ![]() 登録日: 2010/11/9 居住地: 投稿: 13 |
Re: OLSRでのノードの処理の遅延 こんにちは。
case MSG_APP_OlsrHellodelay と書いていますか? 書いてあるのであれば、そのcase文の中で0.03 * SECOND後に行いたい処理を書けば良いだけです。 遅延させたいだけであれば、新しく関数を定義し、 Helloメッセージ受信時に本来行うべき処理(遅延させたい処理)を記述します。 あとはcase文でその関数を呼び出してください。 |
KIN | 投稿日時: 2012/10/1 20:57 |
新米 ![]() ![]() 登録日: 2012/6/25 居住地: 投稿: 17 |
Re: OLSRでのノードの処理の遅延 返信ありがとうございます。
自分なりに遅延をさせるプログラム作成してみたのですが、 コンパイルは通るのですが、GUIで実行してみたところ、 シミュレーションタイムが止まってしまうので、困っています。 自分で改造した部分は、 8600行目 9670行目 11200行目です。 原因がわからないので、アドバイスをお願いします。 ![]() |
utsubo | 投稿日時: 2012/10/2 18:21 |
新米 ![]() ![]() 登録日: 2010/11/9 居住地: 投稿: 13 |
Re: OLSRでのノードの処理の遅延 9670行目の方法では、受信したmsg(RoutingOlsrHandlePacket()の引数)の中身が渡されていません。
そのため、11200行目でOlsrProcessReceivedHello()を呼び出しても、引数がおかしいため、止まってしまっているのだと思います。 (特にhellopacketの値は宣言したのみです) タイマ処理で情報を渡す方法については QualNet Hacksの第二章のイベント処理を読むとわかると思います。 |
KIN | 投稿日時: 2012/10/5 12:33 |
新米 ![]() ![]() 登録日: 2012/6/25 居住地: 投稿: 17 |
Re: OLSRでのノードの処理の遅延 返信ありがとうございます。
基本的なプログラムの問題ですいませんでした。 ご迷惑とは思いましたが、再度質問させてください。 自分なりにプログラムを修正しました。 修正したのは、routing_olsr-inria.cppの前述の行と、 application.cppの5830行目、 routing_olsr-inria.hの1165行目以降の部分です。 修正してコンパイルをしてみたのですが、 見たことのないエラーが出てしまいました。 自分では解決できなかったので、 アドバイスをお願いします。 ![]() |
utsubo | 投稿日時: 2012/10/5 19:10 |
新米 ![]() ![]() 登録日: 2010/11/9 居住地: 投稿: 13 |
Re: OLSRでのノードの処理の遅延 APP_ProcessEvent()に引数を追加したためのエラーですね。
APP_ProcessEvent()はいろんな人が使うので、たぶん変更してはいけないはずです。 いろんなところに影響がでてしまいます。 ですので、タイマーイベントのinfoを使ってincomingInterface等の情報を渡す方法でやったほうが良いと思います。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |