Omnet ++:改变函数的位置并没有按预期工作

时间:2017-01-26 18:29:23

标签: omnet++ inet

我实际上是在尝试编辑etherhost2函数以发送到多个目的地,并且我达到了第一次可能的地步。

在原始代码中,如果条件为 destMACAddress,只需移动 sendBurstPackets() scheduleNextPacket(simTime())这两个函数即可正常工作= resolveDestMACAddress()这两个函数只调用一次。

这是否意味着在整个模拟过程中将destMacAddress设置一次?

原始代码

void EtherTrafGen::handleMessage(cMessage *msg)
{
    if (!isNodeUp())
        throw cRuntimeError("Application is not running");
    if (msg->isSelfMessage()) {
        if (msg->getKind() == START) {
            destMACAddress = resolveDestMACAddress();
            // if no dest address given, nothing to do
            if (destMACAddress.isUnspecified())
                return;
        }
        sendBurstPackets();
        scheduleNextPacket(simTime());
    }
    else
        receivePacket(check_and_cast<cPacket *>(msg));
}

我的变化

void EtherTrafGen::handleMessage(cMessage *msg)
{
    if (!isNodeUp())
        throw cRuntimeError("Application is not running");
    if (msg->isSelfMessage()) {
        if (msg->getKind() == START) {
if (!multipacket)
            {
                destMACAddress = resolveDestMACAddress();
                sendBurstPackets();
                scheduleNextPacket(simTime());
            }
            // if no dest address given, nothing to do
            if (destMACAddress.isUnspecified())
                return;
        }
    }
    else
        receivePacket(check_and_cast<cPacket *>(msg));
}

1 个答案:

答案 0 :(得分:0)

第一条消息仅适用于该条件(msg-> getKind()== START),这意味着通过整个模拟为每个主机设置一次mac。删除该条件使其有效。

我担心是否有其他自我消息可能与该功能有误。最好有单独的EtherHost应用程序,只适用于我的模拟。

如果有想法如何看待所有自我信息,如果有人告诉我,我将不胜感激。