![]() ![]() ![]() | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
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: データ伝送時に追加情報を付加する方法 引用:
アプリケーションのデータパケット( CBR を使用しています)がネットワーク層に渡っている状態と認識しているのですが間違っているでしょうか? 引用:
すみません、追記の書き方がまずかったです。 前半はお察しの通りで、 追記の「初期値代入」というのは正しくは 初期値ではなく = 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 情報の設定 引用: int *pos_x = (int *)MESSAGE_AddInfo(node, newMsg, sizeof(int), INFO_TYPE_POS_X); 情報の参照 引用: int *pos_x = (int *)MESSAGE_ReturnInfo(msg, INFO_TYPE_POS_X); |
koichi | 投稿日時: 2008/12/16 20:35 |
常連 ![]() ![]() 登録日: 2007/10/24 居住地: 投稿: 52 |
Re: データ伝送時に追加情報を付加する方法 引用:
ありがとうございます。 投稿を参考にさせていただき、こちらでも 中継ノードで情報を確認できました。 ただ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 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |