Bazując na tutorialu: http://www.omnetpp.org/doc/omnetpp/tictoc-tutorial/part1.html próbuję w Omnet++ zaimplementować sieć dwupierścieniową.
W folderze simulations znajduje się plik Ring.ned:
package temida.simulations;
import temida.Host;
network Ring
{
submodules:
node0: Host;
node1: Host;
node2: Host;
node3: Host;
node4: Host;
node5: Host;
node6: Host;
node7: Host;
node8: Host;
node9: Host;
node10: Host;
node11: Host;
connections:
node0.outCC --> node11.inCC;
node1.outCC --> node0.inCC;
node2.outCC --> node1.inCC;
node3.outCC --> node2.inCC;
node4.outCC --> node3.inCC;
node5.outCC --> node4.inCC;
node6.outCC --> node5.inCC;
node7.outCC --> node6.inCC;
node8.outCC --> node7.inCC;
node9.outCC --> node8.inCC;
node10.outCC --> node9.inCC;
node11.outCC --> node10.inCC;
node0.outC --> node1.inC;
node1.outC --> node2.inC;
node2.outC --> node3.inC;
node3.outC --> node4.inC;
node4.outC --> node5.inC;
node5.outC --> node6.inC;
node6.outC --> node7.inC;
node7.outC --> node8.inC;
node8.outC --> node9.inC;
node9.outC --> node10.inC;
node10.outC --> node11.inC;
node11.outC --> node0.inC;
}
Host.ned znajduje się w folderze src:
package temida;
simple Host
{
parameters:
bool sendInitialMessage = default(false);
gates:
input inC;
input inCC;
output outC;
output outCC;
}
Host.h
#ifndef HOST_H_
#define HOST_H_
#include <omnetpp.h>
namespace temida {
class Host : public cSimpleModule {
protected:
virtual void initialize();
virtual void handleMessage(cMessage *msg);
};
}; /* namespace temida */
#endif /* HOST_H_ */
Host.cpp
#include "Host.h"
namespace temida
{
Define_Module(Host);
void Host::initialize()
{
if (par("sendInitialMessage").boolValue())
{
cMessage *msg1 = new cMessage("message C");
send(msg, "outC");
cMessage *msg2 = new cMessage("message CC");
send(msg, "outCC");
}
}
void Host::handleMessage(cMessage *msg)
{
cGate *inGate = msg->getSenderGate();
if (inGate->getBaseName() == "inCC")
{
send(msg, "outCC");
}
else
{
send(msg, "outC");
}
}
};
Logika sieci nie jest istotna na tym etapie, ale żeby króciutko streścić - każdy Host ma dwie bramki wejściowe i dwie wyjściowe. Co stacja dostanie na wejściu, przekazuje od razu na wyjście z drugiej strony. Oznaczenia C i CC oznaczają clockwise i counterclockwise. Każda stacja zaraz po zainicjowaniu wysyła po jednym pakiecie na każdy pierścień.
Niestety, zamiast tego działania, otrzymuję błąd przy uruchomieniu symulacji:
W makefile'u są wpisy dotyczące klasy Host, takie same jak w analogicznym projekcie TicToc dla klasy Txc. Define_Module() znajduje się, gdzie powinien się znajdować... W IDE wszystko wygląda ok, działają podpowiedzi i "go to declaration" odsyła tam gdzie trzeba...
Próbowałam już najpopularniejszej odpowiedzi z google'a - clean project ;) Nie pomogło.