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 应用程序会更好。
如果知道如何查看所有自我消息,请告诉我。
我实际上是在尝试编辑 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 应用程序会更好。
如果知道如何查看所有自我消息,请告诉我。