![]() ![]() ![]() | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
kimura | 投稿日時: 2011/1/21 19:28 |
新米 ![]() ![]() 登録日: 2009/10/19 居住地: 投稿: 2 |
GenericMAC(CSMA/CA)と新規作成したMACプロトコルとの周波数共用時のエラーについて いつもお世話になっております。今回初投稿のQualNet初心者です。
GUI上でシナリオ実行時にエラーが生じてしまい、自分なりに調べても解決できなかったため投稿させて頂きます。 同一チャネルの共用を、MACプロトコルの改善から実現することを検討しています。(いわゆるコグニティブ無線技術) 新規にMAC層プロトコルを追加するための1段階目として、デフォルトで組み込まれているGenericMACと同様の動作を行うMACプロトコルをProposeMACという名称で作成しました。CSMA/CAの動作をベースにしたプロトコル開発を行うためです。 試しにProposeMACを利用した無線TCPダウンリンクの単純なモデルを作成・シミュレートしてみたところ、問題なく動作しました。 ところが、次にGenericMAC-CSMA/CAとProposeMAC-CSMA/CAが混在する環境をシミュレートしてみたところ、GUI実行時に以下のエラーが出て停止しました。 Asserion (msg->headerProtocols[msg->numberOfHeaders-1]==traceProtocol) failed in file ..\main\message.cpp:1181<br>TRACE: Removing trace header that doesn't match!<br><br> (ちなみに、ProposedMAC⇒GenericMAC-CSMA/CAに直して同一シナリオを実行しても、上記エラーは発生しません。) エラー箇所に関しては、コードを自分で編集してはいません。同じエラーが出た方の投稿を探してみたところ、以下が見つかりました。 http://simweb.kke.co.jp/qualnet/forum/modules/newbb/viewtopic.php?viewmode=flat&order=ASC&topic_id=500&forum=32 上記の投稿の場合は複数チャネル利用時のListenable Channel Maskの設定で解決していますが、私のシナリオでは同一無線チャネルでの共存を考えているため、Channel Maskは1のままで変更していません。MACプロトコル追加時に、なにか編集し忘れた部分があるのかもしれませんが.... 何か別の原因があるのでしょうか。エラーとなったシナリオフォルダを添付いたします。 (状況のまとめ) ・GenericMACのソースコードを参考に、重複する変数の名称などをリネームしながらProposedMACを作成。MAC層に設定すると、問題なく動作することを確認。 ・ProposedMACの動作については、GenericMACと何も変更していない。 ・GenericMAC、CSMA/CA、ACK=ONに設定したサブネットを5端末に繋ぎ、1端末が周辺の4端末にCBRで通信を行う。 ・ProposedMAC、CSMA/CA、ACK=ONに設定したサブネットを別の2端末に繋ぎ、FTP/GENERICで通信を行う。 ・それぞれのサブネットに繋がった端末は同じチャネルを使用し、互いに干渉する位置に配置。 ・同一シナリオで、ProposedMACをGenericMACに変えても何もエラーは出ない。802.11に変えると同じエラーが出る。 ・使用Ver.: QualNet Ver.4.5 ・使用OS: Windows XP version 5.1 running on x86 ・IDE: IDE/1 spec=1.43.3 impl=200803141608 ・Java: 1.5.0_19 ![]() |
ino | 投稿日時: 2011/1/24 19:52 |
新米 ![]() ![]() 登録日: 2011/1/24 居住地: 投稿: 16 |
Re: GenericMAC(CSMA/CA)と新規作成したMACプロトコルとの周波数共用時のエラーについて MESSAGE_RemoveHeaderで、受信したパケットを上位層へ引き渡す際
想定外のヘッダを剥がそうとしているようです。 ソースを詳しく読まないとわかりませんが、GenericとProposeを 混在したときのみおこることから、Genericが送信した信号をProposeが 受信してしまっている(若しくはその逆)と予想されます。 たとえば、 「Gereric端末がTraceProtocolType=TRACE_GENERICMACとして送出した 信号をPropose端末が受信してしまい、その後の処理において TraceProtocolType=TRACE_PROPOSEMAC (仮)を期待して MESSAGE_RemoveHeaderが呼ばれ、Assertionに引っかかっている」 というようなケースです。 件のAssertionの箇所ですが、 msg->headerProtocols[msg->numberOfHeaders-1] == traceProtocol 上記式が評価される際の辺々それぞれの値はどのようになっていますでしょうか? 同一CHでの利用を想定しているならば、これらのプロトコル間において 異なる方式のものは受信しないような仕掛けを加える必要があります。 |
kimura | 投稿日時: 2011/1/27 17:03 |
新米 ![]() ![]() 登録日: 2009/10/19 居住地: 投稿: 2 |
Re: GenericMAC(CSMA/CA)と新規作成したMACプロトコルとの周波数共用時のエラーについて inoさん
的確なアドバイスを頂きまして、有難うございます。 返答が私用により遅くなってしまい、申し訳ありません。 ご指摘の個所 msg->headerProtocols[msg->numberOfHeaders-1] == traceProtocol に関して調べてみたところ、確かにMESSAGE_RemoveHeaderが別のMACのパケットを受信した際に呼ばれていることが確認出来ました。 そこで、以下の変更を加えたところ、無事問題を解決することができました。 ・mac_generic.cpp static void GenericMacHandOffSuccessfullyReceivedUnicast, static void GenericMacHandOffSuccessfullyReceivedBroadcastに関して、if( msg->headerProtocols[msg->numberOfHeaders-1] == TRACE_GENERICMAC )によりTRACEプロトコルを調べ、異なる方式は受信しないように変更。 ・mac_propose.cpp 上記と同様の個所を変更 以上、おかげさまで無事解決できました。有難うございます。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |