#c #simulation #omnet
Вопрос:
В Omnet я создал сеть, в которой корневой узел отправлял сообщение дочерним узлам. Дочерний узел отправляет подтверждение корневому узлу и отправляет другое сообщение своим дочерним узлам, но мой код также отправляет сообщение корневому узлу. Я хочу предотвратить отправку нового сообщения на корневой узел. Код подтверждения является:
cGate * sender = msg->getSenderGate();
for (cModule::GateIterator i(this); !i.end(); i )
{
cGate *gate = i();
std::string gateStr = gate->getName();
if (gateStr == "out" amp;amp; gate->getPathEndGate()->getOwnerModule() == sender->getOwnerModule() )
{
int senderId = gate->getIndex();
cMessage *reply=new cMessage("reply");
send(reply, "out", senderId);
}
}
и код для отправки нового сообщения дочерним узлам являются:
for (int i = 0; i < gateSize("out"); i ) {
cMessage *l2 = new cMessage ("l2");
send(l2, "out", i);
}
Ответ №1:
Можете ли вы использовать inout
ворота. Если да, то сделайте так, чтобы код для отправки нового сообщения был похож на:
cGate * sender = msg->getSenderGate();
for (cModule::GateIterator i(this); !i.end(); i ){
if(i!=sender){
cMessage *l2 = new cMessage ("l2");
send(l2, "out", i);
}
}
В противном случае подумайте о создании отдельных интерфейсов с одним входным и одним выходным шлюзом, а затем отметьте, с какого интерфейса пришло сообщение. Как в структуре INET: MacRelayUnitBase.cc:71