Japan QualNet Community Forums Japan QualNet Community Forums
Welcome Guest 
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
検索
メインメニュー
アクセスカウンター
2024/04/30:2/2
2024/04/29:22/24

2024/03/01より292/1375
人気モジュール
No.1: フォーラム 29
日曜日からの合計
人気Browser&OS
No.1:巡回ロボット36

No.1:どっかの巡回ロボット35
No.2:Majestic-12巡回ロボット1

日曜日からの合計
メイン
   Routing Protocols Implementation & Model Development
     OLSRでのノードの処理の遅延
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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行目です。


原因がわからないので、アドバイスをお願いします。
OLSR.zip
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行目以降の部分です。

修正してコンパイルをしてみたのですが、
見たことのないエラーが出てしまいました。

自分では解決できなかったので、
アドバイスをお願いします。

OLSR.zip
utsubo
投稿日時: 2012/10/5 19:10
新米
登録日: 2010/11/9
居住地:
投稿: 13
Re: OLSRでのノードの処理の遅延
APP_ProcessEvent()に引数を追加したためのエラーですね。
APP_ProcessEvent()はいろんな人が使うので、たぶん変更してはいけないはずです。
いろんなところに影響がでてしまいます。

ですので、タイマーイベントのinfoを使ってincomingInterface等の情報を渡す方法でやったほうが良いと思います。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ
Copyright c KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
XOOPS Cube PROJECT