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

パスワード:


パスワード紛失

新規登録
検索
メインメニュー
アクセスカウンター
2024/05/16:6/6
2024/05/15:17/23

2024/03/17より393/1402
人気モジュール
No.1: フォーラム 78
No.2: QualNet概要 2
No.3: ニュース 2
日曜日からの合計
人気Browser&OS
No.1:巡回ロボット57
No.2:Unknown OS1

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

日曜日からの合計
メイン
   Scenario Setup & Configuration
     他ルーティングプロトコルへのデータ転送
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
rayon
投稿日時: 2009/9/15 23:15
新米
登録日: 2009/9/15
居住地:
投稿: 6
他ルーティングプロトコルへのデータ転送
初めまして、rayonです。

他ルーティングプロトコルと協調動作をするルーティングプロトコルを作成しています。

ノードに2つのインターフェイスを持たせ、
1つ目のインターフェイスではAODV、
2つ目のインターフェイスに自作のルーティングプロトコル(以下RP)を動かしています。

AODVからRPへパケットを転送したいと考えています。

AODVからRPのインターフェイスのアドレスへパケットを転送しても、
RPのHandleProtocolPacket関数が呼び出されません。
実行結果のstatファイルを見ると、
[0], MAC, 802.11DCF,Unicasts sent = 4
[1], MAC, 802.11DCF,Unicasts received = 4
と書いてあり、MACレベルでは正常にAODVからRPへパケットが送信されていると思います。
この場合、呼び出される関数はHandleProtocolPacketではないのでしょうか?
もしくはルーティングプロトコルが異なるなどの理由により、
途中でパケットが破棄されてしまっているのでしょうか?

また、この方法以外でも構いませんので、
AODVから他のルーティングプロトコルへデータを送信する方法があれば教えてください。

どうか宜しくお願いします。

hiro
投稿日時: 2009/9/17 2:31
長老
登録日: 2005/7/16
居住地:
投稿: 452
Re: 他ルーティングプロトコルへのデータ転送
文面だけでは状況が全くわかりませんが、
呼び出してほしい RPHandleProtocolPacket が呼び出されないのであれば、
地道に追いかけるしかないと思います。

新たに RPHandleProtocolPacket関数 を作ったわけですよね、
真っ先に確認すべきは、その RPHandleProtocolPacket関数 の呼び出し部分の
条件判断部分の処理確認か、呼び出し元関数そのものが呼び出されているかです。

具体的にどの関数で RPHandleProtocolPacket関数 を呼び出すように作成したのかは
わかりませんが、一般的には DeliverPacket関数 に入れるのだと思います。
DeliverPacket関数は呼び出されていますか?
rayon
投稿日時: 2009/9/17 3:50
新米
登録日: 2009/9/15
居住地:
投稿: 6
Re: 他ルーティングプロトコルへのデータ転送
返信有り難う御座います。

調べてみた所、DeliverPacket関数自体が呼び出されていません。

RPのルーティングプロトコルを採用しているノード同士で
パケットの送受信を行うと、
正しく DeliverPacket→RPHandleProtocolPacket と呼び出されます。

しかし、AODVを採用しているノードからRPを採用しているノードに
パケットを送信した際には DeliverPacket 関数は呼び出されていません。
DeliverPacket の呼び出し元の候補を探していると
NetworkIpSendOnBackplane関数は通っていて、
その中の
 if (outgoingInterface == CPU_INTERFACE)
 {
   DeliverPacket(node, msg, incomingInterface, hopAddr);
 }
 else
 {
   QueueUpIpFragmentForMacLayer(node,msg,outgoingInterface,hopAddr, incomingInterface);
 }
の文で else を実行しているようです。
hiro
投稿日時: 2009/9/17 12:43
長老
登録日: 2005/7/16
居住地:
投稿: 452
Re: 他ルーティングプロトコルへのデータ転送
えっと、
> AODVからRPへパケットを転送したいと考えています。
というのを整理しましょう。

パケット転送は以下の2種類やりたい。
A) 同一Node内場合。
インタフェイス0はAODV
インタフェイス1はRP
この同一Node内でパケットをやり取りしたい。

B) Nodeをまたぐ場合。
Node1ではAODVのみが動いている。
Node2ではRPのみが動いている。
Node1からNode2へパケットを転送したい。

転送したいパケットとは具体的に何でしょうか。
IPパケット?
rayon
投稿日時: 2009/9/17 15:38
新米
登録日: 2009/9/15
居住地:
投稿: 6
Re: 他ルーティングプロトコルへのデータ転送
説明不足で申し訳御座いません。
基本的に想定しているのは A の場合です。

転送するのは IPパケット だと思います。
NetworkIpSendPacketToMacLayer 関数を
呼び出して送信しています。

正常に動作する RP→RP 通信は
Node1 から Node2 など別々のノード間で通信を行っています。

問題の AODV→RP 通信は
同一ノードで通信を行っています。

パケット送信に使用する関数は両方とも同じで、
上記の関数を呼び出しています。
hiro
投稿日時: 2009/9/20 18:52
長老
登録日: 2005/7/16
居住地:
投稿: 452
Re: 他ルーティングプロトコルへのデータ転送
念のため確認させて下さい。
その他の機能や設定は確認済みということでOKですか?
たとえば、ip forward設定は正しく処理されていますか?

どこまで正常動作確認しているのか、把握できなくなりました。

AODVからRPへのパケット転送 とは
IPパケットのフォワーディング処理ということで良いでしょうか。
rayon
投稿日時: 2009/9/20 20:51
新米
登録日: 2009/9/15
居住地:
投稿: 6
Re: 他ルーティングプロトコルへのデータ転送
はい、その他の機能に問題はなく、
configファイルなどの設定も問題ないと思います。

configファイルの関係のありそうな部分を抜粋しますと
 SUBNET N16-128.1.0.0 { 0 thru 50 }
 SUBNET N16-128.2.0.0 { 0 thru 60 }
 MAC-PROTOCOL MACDOT11
 MAC-DOT11-RTS-THRESHOLD 1600
 PROMISCUOUS-MODE YES
 NETWORK-PROTOCOL IP
 IP-FORWARDING YES
 [N16-128.1.0.0] ROUTING-PROTOCOL AODV
 [N16-128.2.0.0] ROUTING-PROTOCOL RP
に設定しています。

IPパケットのフォワーディングだと思います。

上記の設定を元に具体的な例を挙げてみます。

AODV同士(例えばノード1と2)の通信は正常に動きます。
RP同士(例えばノード55と56)も正常に動作します。

AODV→RPの通信(例えばノード0と60)を行うとします。
この時、経路が 0 → 30 → 60 と仮定すると、
AODVで 0→30、30のAODV→30のRP、RPで 30→60
となります。
問題となっているのは 30のAODV→30のRP の部分が正常に動かないことです。
30のAODVのルーティングテーブルには
宛先60へのエントリが入っており、
次ホップは30のRPのインターフェイス(128.2.0.31)に設定されています。
statファイルを見ますと
30のAODVのデータリンク層でパケット送信、
30のRPのデータリンク層でパケットを受信していることから
データリンクレベルでは正常に動作しているように見えます。
しかし、ネットワーク層ではパケットが届かないという問題です。

長文になってしまいましたが、どうか宜しくお願いします。
hiro
投稿日時: 2009/9/21 18:39
長老
登録日: 2005/7/16
居住地:
投稿: 452
Re: 他ルーティングプロトコルへのデータ転送
> IPパケットのフォワーディングだと思います。
ということであれば、
DeliverPacket ではなくって、ForwardPacket でした。

ForwardPacket から、
RoutePacketAndSendToMac が呼び出されます。

ここで、
incomingInterface と、
outgoingInterface を、
確認してみて下さい。

それから、動作確認を簡単にするためには、
Nodeを最小限の数にした方が良いと思います。
50とか60もあると追いかけるのが大変です。

たとえば、以下の5Nodeでどうでしょうか。
(Node1⇒Node2⇒AODV)Node3(RP⇒Node4⇒Node5)
Node1とNode5間でCBRしてみると。
Node3がAODVとRPの処理をするはずなので、
確認が簡単になると期待してます。
rayon
投稿日時: 2009/9/21 21:50
新米
登録日: 2009/9/15
居住地:
投稿: 6
Re: 他ルーティングプロトコルへのデータ転送
助言有り難う御座います。

提案された設定を用いてインターフェイスを調べてみました。
AODVとの時間関係を見るために
AodvTransmitData 関数内で NetworkIpSendPacketToMacLayer 関数の
直前にノード番号、送信インターフェイス番号、次ホップアドレスを出力し、
RoutePacketAndSendToMac 関数の呼び出し直後で
incomingInterface と outgoingInterface を表示しました。

以下はノード1から5にCBRでパケットを2つ送信した際の結果です。

 RoutePacketAndSendToMac : incomingInterface = -2 , outgoingInterface = 0
nodeId = 1, outInterface = 0, nextHop = 80010002
 RoutePacketAndSendToMac : incomingInterface = 0 , outgoingInterface = -1
nodeId = 2, outInterface = 0, nextHop = 80010003
 RoutePacketAndSendToMac : incomingInterface = 0 , outgoingInterface = -1
nodeId = 3, outInterface = 0, nextHop = 80020001
 RoutePacketAndSendToMac : incomingInterface = 1 , outgoingInterface = -1
 RoutePacketAndSendToMac : incomingInterface = -2 , outgoingInterface = 0
nodeId = 1, outInterface = 0, nextHop = 80010002
 RoutePacketAndSendToMac : incomingInterface = 0 , outgoingInterface = -1
nodeId = 2, outInterface = 0, nextHop = 80010003
 RoutePacketAndSendToMac : incomingInterface = 0 , outgoingInterface = -1
nodeId = 3, outInterface = 0, nextHop = 80020001
 RoutePacketAndSendToMac : incomingInterface = 1 , outgoingInterface = -1
hiro
投稿日時: 2009/9/27 21:34
長老
登録日: 2005/7/16
居住地:
投稿: 452
Re: 他ルーティングプロトコルへのデータ転送
-1と-2をANYとCPUに置き換えました。

 RoutePacketAndSendToMac : incomingInterface = CPU, outgoingInterface = 0
nodeId = 1, outInterface = 0, nextHop = 80010002
 RoutePacketAndSendToMac : incomingInterface = 0 , outgoingInterface = ANY
nodeId = 2, outInterface = 0, nextHop = 80010003
 RoutePacketAndSendToMac : incomingInterface = 0 , outgoingInterface = ANY
nodeId = 3, outInterface = 0, nextHop = 80020001
 RoutePacketAndSendToMac : incomingInterface = 1 , outgoingInterface = ANY

 RoutePacketAndSendToMac : incomingInterface = CPU, outgoingInterface = 0
nodeId = 1, outInterface = 0, nextHop = 80010002
 RoutePacketAndSendToMac : incomingInterface = 0 , outgoingInterface = ANY
nodeId = 2, outInterface = 0, nextHop = 80010003
 RoutePacketAndSendToMac : incomingInterface = 0 , outgoingInterface = ANY
nodeId = 3, outInterface = 0, nextHop = 80020001
 RoutePacketAndSendToMac : incomingInterface = 1 , outgoingInterface = ANY

nodeId 3で nextHop = 80020001 となっているので、
たぶんnodeId1とnodeId2とは別のサブネット側ということで見た目はあってますね。

少し話がそれますが、AODVとRT間でのルーティング情報の交換などは
どのような実装になっているのでしょうか?

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