Omnet++:更改功能的位置没有按预期工作

Omnet++ : changing the location of function didn't work as expected

我实际上是在尝试编辑 etherhost2 函数以发送到多个目的地,但我第一次达到了这样的程度。

在原始代码中,只需移动两个函数 sendBurstPackets()scheduleNextPacket(simTime()),该函数即可正常工作在 if 条件 destMACAddress = 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));
}

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

我担心是否有其他自己的消息可能被该功能误认为。拥有仅适用于我的模拟的单独 EtherHost 应用程序会更好。

如果知道如何查看所有自我消息,请告诉我。