首页 > 解决方案 > (OMNeT++) 为什么 PacketQueue 总是 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?

标签: queuerouteromnet++packetinet

解决方案


我的猜测是,您查询的队列与您假设的不同。您不应该*在模型路径中使用模式(即 ),因为这可能在多个eth模块上匹配,并且未指定将返回哪个模块。


推荐阅读