(OMNeT++) 为什么 PacketQueue 总是 0?
(OMNeT++) Why PacketQueue is always 0?
我正在尝试在 OMNeT++ 中编写一个应用程序,该应用程序从调用它的节点获取队列长度并将其发送到另一个节点。
计划修改路由器中调用的UdpBasicApp.cc文件,使其获取DropTailQueue模块的队列长度。
网上搜索了一下,发现这个方法是对的...
cModule *mod = getModuleByPath("router3.eth[*].mac.queue");
queueing::PacketQueue *queue = check_and_cast<queueing::PacketQueue*>(mod);
int c = queue->getNumPackets();
EV << c;
...因为 DropTailQueue 扩展了 PacketQueue 模块。
我在最后打印了一张,看看是否有问题。
当我运行仿真时,使用修改后的UdpBasicApp模块,c一直为0。
我几乎不怀疑队列总是0,但我不知道如何验证这个怀疑。
如果是错误,为什么总是0?
我的猜测是,您查询的队列与您假设的不同。你不应该在你的模型路径中使用模式(即 *
),因为它可能匹配多个 eth
模块,并且它是未指定的,哪个将被返回。
我正在尝试在 OMNeT++ 中编写一个应用程序,该应用程序从调用它的节点获取队列长度并将其发送到另一个节点。
计划修改路由器中调用的UdpBasicApp.cc文件,使其获取DropTailQueue模块的队列长度。
网上搜索了一下,发现这个方法是对的...
cModule *mod = getModuleByPath("router3.eth[*].mac.queue");
queueing::PacketQueue *queue = check_and_cast<queueing::PacketQueue*>(mod);
int c = queue->getNumPackets();
EV << c;
...因为 DropTailQueue 扩展了 PacketQueue 模块。 我在最后打印了一张,看看是否有问题。 当我运行仿真时,使用修改后的UdpBasicApp模块,c一直为0。 我几乎不怀疑队列总是0,但我不知道如何验证这个怀疑。 如果是错误,为什么总是0?
我的猜测是,您查询的队列与您假设的不同。你不应该在你的模型路径中使用模式(即 *
),因为它可能匹配多个 eth
模块,并且它是未指定的,哪个将被返回。