私の複合モジュールは、添付の図に示すように複数のレイヤーです。ここで OMNet ++の別のモジュールにパケットを直接注入する方法
レイヤ2はcPacketQueue
バッファを持っており、私はレイヤー1のモジュールは、直接レイヤ2のこのcPacketQueue
にパケットを挿入します。レイヤー1とレイヤー2のゲートは、図のように片方向に接続されています。 UPDATED
Layer1Gate --> Layer2Gate
:
Layer 1
は異なる優先度(0-7)
持つパケットを作成し、priorityBuffers[i]
と命名Layer2
で8
異なるcPacketQueues
、(iはインデックスである)に注入します。
Layer2
は、intervals of 10ns
で自己メッセージを送信して、それぞれiteration
とsend
のパケットをすべてポーリングします。
これはすべて私が今やっていることです。それはうまく動作します。しかし、私は10nsのポーリングがこれを行いQoSを達成する効率的な方法ではないことを知っています。だから、より良い選択肢を求めている。
実際に質問したい質問が見つからないようです。マニュアルの[this](https://omnetpp.org/doc/omnetpp/manual/usman.html#sec161)の部分を探しているように私には聞こえるし、 [cPacketQueue.insert](https://omnetpp.org/doc/omnetpp/api/classcPacketQueue.html#a9ecf782bfd8f5c5f3749a945d040bafd)を使用して、ゲートからキューにイベントを移動するだけです。 –
@ user3243499:「直接」とはどういう意味ですか? 'Layer1'と' Layer2'の間に遅延なしでチャンネルを定義すれば、 'send()'メソッドを使うことができます。 'Layer1'のパケットは' Layer2'で遅れなく受信されます。それは送られた)。そして、 'Layer2'の' handleMessage() 'では、受け取ったメッセージを' cPacket'オブジェクトにキャストして、あなたのキューに挿入するべきです。 'cPacket * packet = check_and_cast(msg); yourqueue-> insert(パケット); ' –
@JerzyD。はい、それは遅れなく提供されます。しかし、問題は、レイヤ2で複数のバッファを使用してQoS(複数のバッファを使用する優先度)をサポートすることです。そして、私はレイヤ2で自己メッセージタイマーをスケジューリングする必要があります。これで、このバッファのポーリング間隔を 'scheduleAt()'を使って6nsと非常に小さく設定すると、シミュレーションは非常に遅くなり、パケットは最後に待機して見えます宛先モジュールに実際にパケットを配信することなく、 – user3243499