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

パスワード:


パスワード紛失

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

2024/03/20より396/1411
人気モジュール
No.1: フォーラム 18
No.2: QualNet概要 1
日曜日からの合計
人気Browser&OS
No.1:巡回ロボット17

No.1:どっかの巡回ロボット14
No.2:Google巡回ロボット2
No.3:Baidu巡回ロボット1

日曜日からの合計
メイン
   Network Layer Protocol Implementation & Model Development
     パケット保存用のキュー作成
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
kazuki
投稿日時: 2011/7/12 16:22
新米
登録日: 2011/3/24
居住地:
投稿: 8
パケット保存用のキュー作成
こんにちは,
お世話になっております.

現在,ネットワーク層にて送受信したパケットを保持しておくための
キューを作成したいと思っております.

無線環境でプロミスキャスモードを使用し,中継するものも含めて
すべてのパケット保持しておきたいと考えております.
(保持したパケットはネットワークコーディングに利用)
このような保持用のキューの作成についてなにかご教授いただけ
ないでしょうか.

ソースコードを見ながらMACレイヤから上がってきたパケットなどを
MESSAGE_Duplicate(node, msg);
で複製しておき,
void NetworkIpCreateQueues
で新しいキャッシュ用のQueueを宣言して,その中に入れれないのか.
という感じに考えていたのですが,実装に関して知識が乏しく
うまくいきません.

アドバイスをいただければ嬉しいです.
よろしくお願い致します.


gp
投稿日時: 2011/7/13 16:02
新米
登録日: 2005/12/2
居住地:
投稿: 13
Re: パケット保存用のキュー作成
こんにちは。

kazukiさんの方針でいけると思います。

たとえばですが、
・キューをノード毎に作成するなら、struct NetworkDataIpに、
インタフェース毎に作成するなら、struct IpInterfaceInfoTypeに、
保持用キューのメンバを追加しておきます。
※元々存在するキューはスケジューラが持っていますが、その必要がなければ上記のような持ち方でよいかと思います。

・NetworkIpCreateQueues()内などで、保持用キューのオブジェクトを生成しておきます。(newしてQueue::SetupQueue()を呼び出す)

・MACレイヤからのパケットをNetworkIpReceivePacket()内などで、複製し、保持用キューにQueue::insert()でキューイングします。

それでは、もう少し試してみてください。参考になれば幸いです。
kazuki
投稿日時: 2011/7/14 13:23
新米
登録日: 2011/3/24
居住地:
投稿: 8
Re: パケット保存用のキュー作成
こんにちは.

gpさん,
お返事ありがとうございます.

キューはノード毎に作成するのが望ましいのでstruct NetworkDataIpに
手を加えようとおもいます.
しかし,保持用キューのメンバーというのがよくわからないのですが,
よろしければ教えていただけないでしょうか.

また,
void NetworkIpCreateQueues(…){
のなかで自分のキャッシュ用のキューとして
NetworkIpInitCacheQueueConfiguration(node,nodeInput,interfaceIndex);
を作り,
NetworkIpInitInputQueueConfiguration(node,nodeInput,interfaceIndex);
と同じように(というかほぼコピペで)初期化の処理(cachequeueをnewしてcachequeue->SetupQueue(…))を行いました.

しかし,疑問なのですが void NetworkIpQueueInsert(…)では
(*scheduler).insert(msg,
queueIsFull,
queueIndex,
NULL, //const void* infoField,
getSimTime(node));
といった感じにキューに入れられているのですが,この時どのキューに
キューイングするなどはどこで見分けられるのでしょうか.
queueIndexだとしても,Queue::insert(…)の方にqueueIndexについての
表記がないように思うのですが.

Queue::insert(…)についての使用法や理解自体が間違っているので
しょうか.
よろしければ教えていただけないでしょうか.

質問ばかりで,すみません.
基本的なことを聞いているかもしれませんんがよろしくお願いいたします.

gp
投稿日時: 2011/7/14 14:27
新米
登録日: 2005/12/2
居住地:
投稿: 13
Re: パケット保存用のキュー作成
スケジューラの中に保持用のキューを持たせる必要はない、という前提で記述しています。
保持用のキューとして、便利なのでQueueクラスを利用しているだけと思ってもらえればよいです。(スケジューラの処理は使っていません。)

引用:
しかし,保持用キューのメンバーというのがよくわからないのですが,

struct NetworkDataIpの一番後ろにこんな感じでメンバを追加するという意味です。
typedef struct struct_network_ip_str 
{
     unsigned short              packetIdCounter;         
     NetworkForwardingTable      forwardTable;
           .
           .
           .

    Queue* cacheQueue; <-追加
}
NetworkDataIp;


引用:
NetworkIpInitInputQueueConfiguration(node,nodeInput,interfaceIndex); と同じように(というかほぼコピペで)初期化の処理(cachequeueをnewしてcachequeue->SetupQueue(…))を行いました.

NetworkIpInitInputQueueConfiguration()は、スケジューラを作成し、その中にキューを作成する処理ですが、
スケジューラの中にキューを持つ必要がなければ、シンプルに追加したメンバの初期化を行うのみでよいと思います。
       
ip->cacheQueue= new Queue;         
ip->cacheQueue->SetupQueue(<適当な設定>)


引用:
しかし,疑問なのですが void NetworkIpQueueInsert(…)では (*scheduler).insert(msg, queueIsFull, queueIndex, NULL, //const void* infoField, getSimTime(node)); といった感じにキューに入れられているのですが,この時どのキューに キューイングするなどはどこで見分けられるのでしょうか.

これも初期化の場合と同様、NetworkIpQueueInsert()はスケジューラが保持するキューに対する処理なので、このAPIを使用する必要はないと思っています。
追加したメンバにキューイングしたい場合は、直接Queue::insert()を呼べばよいですね。
kazuki
投稿日時: 2011/7/14 19:22
新米
登録日: 2011/3/24
居住地:
投稿: 8
Re: パケット保存用のキュー作成
gpさん,
ありがとうございます.

教えていただいた通りにするとcacheQueueへのキューイングができました.
BOOL queueIsFull = FALSE; 	ip->cacheQueue->insert(MESSAGE_Duplicate(node, msg), 						  NULL, 						  &queueIsFull, 						  getSimTime(node), 						  0.0);


ただ,numPacketsの変動によりキューイングがなされていることは
わかるのですが,キューイングされたパケットを参照することは
できないのでしょうか.
VisualStadioのデバックで見たところ
ip->cacheQueue->packetArrayに一応msgがあるのですが,
値が入っていないようです.

重ねての質問で申し訳ありませんが,よろしくお願い致します.

gp
投稿日時: 2011/7/15 15:39
新米
登録日: 2005/12/2
居住地:
投稿: 13
Re: パケット保存用のキュー作成
おそらく、ip->cacheQueue->packetArray[0]を見ているのだと思います。
Queue::insert()の処理を見ると、packetArrayのIndexが0からではなく、1から設定されることが分かります。

ですので、ip->cacheQueue->packetArray[1]を見ると、キューイングしたパケットが入っていると思います。
kazuki
投稿日時: 2011/7/22 12:40
新米
登録日: 2011/3/24
居住地:
投稿: 8
Re: パケット保存用のキュー作成
gpさん,

お返事が遅れてしまい申し訳ありませんでした.

ご指摘通り,packetArray[0]を見ていたようです.
長々と質問したにも関わらず,丁寧に答えていただきありがとうございます.

引き続き実装を進めていきたいと思います.
また,質問したときはよろしくお願い致します.
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ
Copyright c KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
XOOPS Cube PROJECT