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

パスワード:


パスワード紛失

新規登録
検索
メインメニュー
アクセスカウンター
2024/05/18:16/20
2024/05/17:19/24

2024/03/19より398/1409
人気モジュール
No.1: フォーラム 120
No.2: QualNet概要 4
No.3: ニュース 2
日曜日からの合計
人気Browser&OS
No.1:巡回ロボット93
No.2:Unknown OS1
No.3:Windows NT1

No.1:どっかの巡回ロボット83
No.2:Majestic-12巡回ロボット7
No.3:Google巡回ロボット3

日曜日からの合計
メイン
   Routing Protocols Implementation & Model Development
     データ伝送時に追加情報を付加する方法
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
koichi
投稿日時: 2008/12/10 19:51
常連
登録日: 2007/10/24
居住地:
投稿: 52
データ伝送時に追加情報を付加する方法
データの伝送時に
送信ノードからの追加情報(例として送信ノードのx座標)を加え、
中継ノードに伝達したいと考えています。

そこで message.h の struct message_str
の最後に
int source_x;
を追加し、

routing_aodv.cpp 内の AodvHandleReply()関数内

aodv->stats.numDataInitiated++; と
AodvTransmitData() の間に

double posi_x = node->mobilityData->current->position.common.c1;
newMsg->source_x = int(posi_x);

という行を加え、コンパイル、実行すると
エラーが起きました。

debug文を入れたどっていくと
mac.cpp 内の 8822行 MAC_HandOffSuccessfullyReceivedPacket()
までは実行されていることが確認できたのですが、
この辺りの処理がよく分からず、
それ以降のどこでエラー原因が起きているのか分からない状況です。

上記の追加コードで何か間違いや不足がありますでしょうか?
children
投稿日時: 2008/12/10 20:06
新米
登録日: 2006/9/26
居住地:
投稿: 18
Re: データ伝送時に追加情報を付加する方法
エラー内容が不明ですが、修正後、全てコンパイルし直してますか?
私は以前ヘッダを修正したものの、一部のみしかコンパイルしなくて2日間ハマりました。
koichi
投稿日時: 2008/12/11 18:40
常連
登録日: 2007/10/24
居住地:
投稿: 52
Re: データ伝送時に追加情報を付加する方法
ありがとうございます。

nmake clean
nmake

し直したところ、本当にエラーがなくなりました。

しかし、中継ノードで値が渡っているか確認しようと

AodvHandleData()関数内の

aodv->stats.numDataForwarded++; と

AodvTransmitData(); の間で

msg->source_x をprintf文で出力してみると
なぜか正しい値を吐き出す場合と
初期値のままの場合が見られます。

何か初期化段階や代入処理で不足があるのでしょうか?

追記
Data送信を開始する箇所は2箇所あるので
初めに記したAodvHandleReply()内と同様に
AodvRouterFunction()内の
AodvTransmitData();直前でも
追記情報の初期値代入を行っております。
children
投稿日時: 2008/12/12 16:59
新米
登録日: 2006/9/26
居住地:
投稿: 18
Re: データ伝送時に追加情報を付加する方法
nmake clean
nmake
でなおったとのこと、幸いでした
QualnetのMakefileは、ヘッダファイルを変更しても関連するソースをコンパイルするようにはなってないようです。

ところで、設定した情報を確認しようとしたがうまく確認できないとのことですが...

情報の設定は、AodvHandleReply()内のaodv->stats.numDataInitiated++; と AodvTransmitData() の間でやっているとのことなので、AODVのパケットに情報を添付しているのではないでしょうか?

一方、情報の確認は、AodvHandleData()内のaodv->stats.numDataForwarded++; と AodvTransmitData(); の間でやっているので、AODVパケットではなく、アプリケーションのデータパケットで情報を確認しようとしているのではないでしょうか?

koichi
投稿日時: 2008/12/13 7:04
常連
登録日: 2007/10/24
居住地:
投稿: 52
Re: データ伝送時に追加情報を付加する方法
再び助言ありがとうございます。

パケットの種類が異なっているのではないかということですが、私はどちらもAODVのパケットだと考えていました。

確認部はアプリケーションのデータパケットということになるのでしょうか?情けないのですがご指摘いただいた今でもよく分かりません。

データの中継ノードで情報を取得したいのですが、できればこの場合どこで確認すべきなのかお教えいただけないでしょうか?
children
投稿日時: 2008/12/15 19:06
新米
登録日: 2006/9/26
居住地:
投稿: 18
Re: データ伝送時に追加情報を付加する方法
申し訳ないことに、私が勘違いしてました。

AodvHandleReply()内のaodv->stats.numDataInitiated++; と AodvTransmitData() の間でやっているのは、
 newMsg->source_x = int(posi_x);
なんですね。
最初の投稿をきちっと把握できておらず、
 msg->source_x = int(posi_x)
とされているものと思いこんでいました。

アプリケーションのデータパケットに情報を追加して、アプリケーションのデータパケットで確認しようとしているのですね。
(AODVのパケットではないですよね?)

なお、
|msg->source_x をprintf文で出力してみると
|なぜか正しい値を吐き出す場合と
|初期値のままの場合が見られます。
とある部分で、
+ 正しい値とは node->mobilityData->current->position.common.c1
+ 初期値とは 0
のことだと思えばよいでしょうか?

一方、
|追記
|Data送信を開始する箇所は2箇所あるので
|初めに記したAodvHandleReply()内と同様に
|AodvRouterFunction()内の
|AodvTransmitData();直前でも
|追記情報の初期値代入を行っております。
とある部分の「初期値代入」とは上の初期値の代入なのでしょうか?
koichi
投稿日時: 2008/12/15 22:27
常連
登録日: 2007/10/24
居住地:
投稿: 52
Re: データ伝送時に追加情報を付加する方法
引用:

アプリケーションのデータパケットに情報を追加して、アプリケーションのデータパケットで確認しようとしているのですね。
(AODVのパケットではないですよね?)


アプリケーションのデータパケット( CBR を使用しています)がネットワーク層に渡っている状態と認識しているのですが間違っているでしょうか?

引用:

なお、
|msg->source_x をprintf文で出力してみると
|なぜか正しい値を吐き出す場合と
|初期値のままの場合が見られます。
とある部分で、
+ 正しい値とは node->mobilityData->current->position.common.c1
+ 初期値とは 0
のことだと思えばよいでしょうか?

一方、
|追記
|Data送信を開始する箇所は2箇所あるので
|初めに記したAodvHandleReply()内と同様に
|AodvRouterFunction()内の
|AodvTransmitData();直前でも
|追記情報の初期値代入を行っております。
とある部分の「初期値代入」とは上の初期値の代入なのでしょうか?


すみません、追記の書き方がまずかったです。
前半はお察しの通りで、
追記の「初期値代入」というのは正しくは
初期値ではなく
= node->mobilityData->current->position.common.c1
のことです。

はじめの投稿に載せたコードと
同じものを組み込んでいると考えていただければと思います。

ただし、AodvTransmitData()の引数にあわせて
newMsg->source_x = node->mobilityData->current->position.common.c1;
ではなく
msg->source_x = node->mobilityData->current->position.common.c1;
としています。
children
投稿日時: 2008/12/16 12:25
新米
登録日: 2006/9/26
居住地:
投稿: 18
Re: データ伝送時に追加情報を付加する方法
CBRの送信間隔が短いと付加した情報が中継ノードで残っていたり残らなかったりですが、送信間隔を長くしたら付加した情報が中継ノードでは見事に消えますね...
AODVの処理に詳しい訳ではないので、なぜなのかまでは追い切れませんでしたが...

なお、私が以前同じように位置情報をメッセージに付加した時は、OLSR/DYMOでしたが、MESSAGE_AddInfo()/MESSAGE_ReturnInfo()を使いました。
Infoを利用してみたら、AODVでも、中継ノードで情報を確認できましたよ。

新たなINFO_TYPEを追加:<message.h>
引用:
typedef enum message_info_type_str
{
.......... ,
INFO_TYPE_POS_X
}


情報の設定
引用:
int *pos_x = (int *)MESSAGE_AddInfo(node, newMsg, sizeof(int), INFO_TYPE_POS_X);
*pos_x = (int) node->mobilityData->current->position.common.c1;


情報の参照
引用:
int *pos_x = (int *)MESSAGE_ReturnInfo(msg, INFO_TYPE_POS_X);
printf("nodeId[%u] X=%d\n",node->nodeId, *pos_x);
koichi
投稿日時: 2008/12/16 20:35
常連
登録日: 2007/10/24
居住地:
投稿: 52
Re: データ伝送時に追加情報を付加する方法
引用:

なお、私が以前同じように位置情報をメッセージに付加した時は、OLSR/DYMOでしたが、MESSAGE_AddInfo()/MESSAGE_ReturnInfo()を使いました。
Infoを利用してみたら、AODVでも、中継ノードで情報を確認できましたよ。


ありがとうございます。
投稿を参考にさせていただき、こちらでも
中継ノードで情報を確認できました。

ただ1つ引っかかることがあるのですが
<message.h>のtypedef enum message_info_type_strの
注釈を見ると

ENUM :: MessageInfoType
DESCRIPTION :: Type of information in the info field. One message can only have up to one info field with a specific info type.

とありますよね?

これは「1つのメッセージは1つのinfo type fieldしか持てない」という意味でしょうか?

現在2種のINFO_TYPEを追加して
同一のmessageに2つの情報を設定し、無事参照できているのですが少し不安です。

私の和訳解釈が何か間違っているのでしょうか?
children
投稿日時: 2008/12/17 10:29
新米
登録日: 2006/9/26
居住地:
投稿: 18
Re: データ伝送時に追加情報を付加する方法
1種のINFO_TYPEに値1つなのでは
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ
Copyright c KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
XOOPS Cube PROJECT