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

パスワード:


パスワード紛失

新規登録
検索
メインメニュー
アクセスカウンター
2024/05/09:20/22
2024/05/08:22/25

2024/03/10より373/1385
人気モジュール
No.1: フォーラム 96
No.2: QualNet概要 6
日曜日からの合計
人気Browser&OS
No.1:巡回ロボット89
No.2:Linux3
No.3:Unknown OS1

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

日曜日からの合計
メイン
   Routing Protocols Implementation & Model Development
     特定ノードにおけるパケット破棄
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
the_thirdman
投稿日時: 2006/1/6 22:38
新米
登録日: 2005/9/21
居住地:
投稿: 10
特定ノードにおけるパケット破棄
あけましておめでとうございます。
昨年は親切な対応ありがとうございました。
本年もいろいろとお世話になることと思いますがどうぞ
よろしくお願いいたします。

現在、以下のような状況を実現しようとaodv.cppのソースを
いじっています。

(目標)
あるノードID(例えばID1からID10)をもつノードをグループA
他のノードID(例えばID11からID20)をもつノードをグループBとし、
グループBのノードはグループAのノードからのパケットを受信しない。

このような目標を実現するべく、現在

(ネットワーク設定)
ノードID1、2、3を横一列に配置。
ノード1からのRREQがノード3に直接届くことはない。
ノード1からノード3にCBR送信。

といった設定において、
ノードID1からのRREQパケットを受け取ったノードId2のノードは
そのRREQパケットを破棄する。
といったことをまず実現しようとしています。

本フォーラムの"特定ノードのソース改良"やマニュアルを参考にし、
aodv.cpp 3635行目の関数 AodvHandleRequestの内部を改造すれば
よいのではないかと考えました。

そこで、関数AodvHandleRequest内に
NodeAddress nodeId = node->nodeId;
というコードを追加し、ノードIDを確保。

あとはこのnodeIdを用いて、
if(nodeId == 2){
RREQパケット破棄
}
といったことをしようと考えたのですが、どうにもうまく動作
しません。

RREQパケットの破棄というのはソースのどの部分(あるいは関数)で
処理されているでしょうか??

また、あるノードIDからのパケットを別のノードIDのノードは破棄(無視)
するという動作を行なわせるには具体的にどのようなことをすれば
実現できるのでしょうか??

御手数ですが、回答のほうよろしくお願いします。


forum_support
投稿日時: 2006/1/7 11:57
モデレータ
登録日: 2005/5/17
居住地: 東京都中野区中央4-5-3 ?構造計画研究所
投稿: 322
Re: 特定ノードにおけるパケット破棄
引用:

the_thirdmanさんは書きました:

そこで、関数AodvHandleRequest内に
NodeAddress nodeId = node->nodeId;
というコードを追加し、ノードIDを確保。

あとはこのnodeIdを用いて、
if(nodeId == 2){
RREQパケット破棄
}
といったことをしようと考えたのですが、どうにもうまく動作
しません。

RREQパケットの破棄というのはソースのどの部分(あるいは関数)で
処理されているでしょうか??


RREQの破棄は AodvHandleRequest をコールした後で行われています。

void AodvHandleProtocolPacket(...)
{
06381     switch (*packetType)
06382     {
06383         case AODV_RREQ:
06384         {

06400 
06401             AodvHandleRequest(
06402                 node,
06403                 msg,
06404                 srcAddr,
06405                 ttl,
06406                 interfaceIndex);
06407 
06408             MESSAGE_Free(node, msg);
06409             break;
06410         }
}

AodvHandleRequest 内で Message を消さずに、特定ノードIDでは
AodvHandleRequest 自体を呼ばないようにしたらよいのではないで
しょうか?

引用:

また、あるノードIDからのパケットを別のノードIDのノードは破棄(無視)
するという動作を行なわせるには具体的にどのようなことをすれば
実現できるのでしょうか??


QUALNET_HOME/main/message.cpp の

00194 void MESSAGE_PacketAlloc(Node *node,
00195                          Message *msg,
00196                          int packetSize,
00197                          TraceProtocolTypeoriginatingProtocol)

がパケットを作成する際のAPIですが、この中で、

00221     msg->originatingNodeId = node->nodeId;

という様に作成ノードのノードIDを記録しています。
これを受信ノードで参照すれば可能だと思います。
the_thirdman
投稿日時: 2006/1/7 20:12
新米
登録日: 2005/9/21
居住地:
投稿: 10
Re: 特定ノードにおけるパケット破棄
迅速な対応ありがとうございます。
非常に助かりました。

教えていただいたとおり、

case AODV_RREQ:
06384 {

06400
if(nodeId!=2){
06401 AodvHandleRequest(
06402 node,
06403 msg,
06404 srcAddr,
06405 ttl,
06406 interfaceIndex);
06407 }
06408 MESSAGE_Free(node, msg);
06409 break;
06410 }
}

のようにしたところ、nodeId2のノードのみがRREQを破棄すると
いった状況を実現することができました。

また、あるノードIDからのパケットを別のノードIDのノードは破棄(無視)
するという動作につきましても msg->originatingNodeId を参照する
ことで実現することができました。

いつも丁寧な対応をしていただきとても感謝しています。
また、たびたび質問することと思いますが
どうぞよろしくお願いいたします。



スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ
Copyright c KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
XOOPS Cube PROJECT