我实际上是在尝试编辑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));
}
答案 0 :(得分:0)
第一条消息仅适用于该条件(msg-> getKind()== START),这意味着通过整个模拟为每个主机设置一次mac。删除该条件使其有效。
我担心是否有其他自我消息可能与该功能有误。最好有单独的EtherHost应用程序,只适用于我的模拟。
如果有想法如何看待所有自我信息,如果有人告诉我,我将不胜感激。