メイン Routing Protocols Implementation & Model Development ipHeaderはNULL | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
dsen | 投稿日時: 2008/11/13 17:58 |
新米 登録日: 2008/1/9 居住地: 投稿: 6 |
ipHeaderはNULL はじめまして、お世話になります。
現在、指向性アンテナを用いた大規模なアドホックネットワークでの実験を行っています。次のエラーで止まりました。 Assertion(ipHeader!=NULL)failed in file ....mac_dot11-sta.h:2587 ipHeadはNULLということは分かりますが、なぜこのエラーでるのか、どこの設定悪いのか、を教えていただけたらと思います。 実験環境: Qualnet4.0/WindowsXP 802.11b/11M/TransmitPower25dbm steerable antenna/pattern file:steerable.antenna-azimuth dot11/direction antenna mode routing protocol:Bellmanford CBR:30本/0.2Mbps/1S-11S node数:60/シミュレーション時間11S また、configfileを添付しました。よろしくお願いします。 60.zip 60.zip |
ipoten | 投稿日時: 2008/11/17 18:59 |
一人前 登録日: 2005/7/12 居住地: 投稿: 102 |
Re: ipHeaderはNULL こんにちは
試しに添付されたシナリオを実行してみましたが、同じ箇所でアサーションストップしました。 私の環境は4.0.1のためか、若干行数は違いますが、以下のようになっています。
dot11->currentMessage は、IPからの送信パケットが発生した時点(関数MacDot11NetworkLayerHasPacketToSend())でセットされますが、 NAVやバックオフを待っている間に、破棄されているような雰囲気です。 デバッガで該当アドレスのメッセージ生成と解放を追ったところ、 下記の場所(l.3996)で最後に解放され、それ以降ほかの処理にメッセージ領域が使用されていることが分かりました。
この MESSAGE_Free() で解放しているメッセージはブロードキャストパケットで、dot11->currentMessage そのものです(コピーではない)。 しかし前後の処理で dot11->currentMessage がクリアされている箇所が見当たりません。 ソースコメントをみると、ここの処理はHCCA関連で変更されたソースコードのようですが、 ここでブロードキャストパケットを MESSAGE_Free() するのは妙な気がします。 ちなみにQualNet3.9.5では上記の箇所で MESSAGE_Free() はしていません。 QualNet4.5では上記に該当するコード自体が大きく書き換わっています。 QualNet4.5(.1)のReleaseNotesには、BugFixのそれらしい記述は見つけられませんでしたが、どうも4.0の不具合のような気がします。 サポートに問い合せるか、ほかのバージョンを利用してみてはいかがでしょうか。 |
dsen | 投稿日時: 2008/11/20 17:50 |
新米 登録日: 2008/1/9 居住地: 投稿: 6 |
Re: ipHeaderはNULL ipotenさん
こんにちは ご指摘の通り、ブロードキャストを出そうとする時、チャンネルがビジーになって、結局出せませんでした。なので、3996行目のMESSAGE_Free(node, packet)が呼び出されました。しかし、このMESSAGE_Free(node, packet)はメッセージの中身だけ解放し、メッセージそのものまだ残っている感じです。ですから、空のメッセージがもう一度送信され、ipHeaderがNULLになってしまいました。 MESSAGE_Free(node, packet)を検索した結果、MacDot11StationResetCurrentMessageVariables(node, dot11)といつもペアで出てくるみたいですね。MacDot11StationResetCurrentMessageVariables(node, dot11)を読んだところ、この関数はメッセージのアドレスを解放(dot11->currentMessage = NULL)します。つまり、メッセージそのもの全部消します。 そして、3996行目のMESSAGE_Free(node, packet)の後ろにMacDot11StationResetCurrentMessageVariables(node, dot11)を追加しました。悪い影響あるかどうか分かりませんが、とりあえず、いまシミュレータが正常に動いています。 ipotenさん、ありがとうございました。 |
ipoten | 投稿日時: 2008/11/20 18:39 |
一人前 登録日: 2005/7/12 居住地: 投稿: 102 |
Re: ipHeaderはNULL こんにちはdsenさん
引用: >そして、3996行目のMESSAGE_Free(node, packet)の後ろに というのも、この関数MacDot11StationStartTransmittingPacket()に渡される引数packetは、 ユニキャストの場合dot11->currentMessageのコピー
ユニキャストでは再送のためにdot11->currentMessageが保持されていますが、 勝手にMacDot11StationResetCurrentMessageVariables()でdot11->currentMessageをNULLクリアしてしまうと、 パケットメッセージ本体(コピー元)をMESSAGE_Free()するひとがいなくなります。 ブロードキャストの場合のみMacDot11StationResetCurrentMessageVariables()を呼び出すような処理が必要かもしれませんね。 もし、現状のdsenさんの修正で不安定(シミュレーション期間中に使用メモリが増えていくとか)であれば、 試してみてもよいと思います。 あ、こちらで確認したわけではないので、あくまでもご参考&自己責任で、あしからず。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |