%description: Test channel packet error rate %file: test.ned channel MyConn extends ned.DatarateChannel { parameters: per = 0.2; } simple Node1 { gates: output out; } simple Node2 { gates: input in; } network Test { submodules: node1: Node1; node2: Node2; connections: node1.out --> MyConn --> node2.in; } %file: test.cc #include using namespace omnetpp; namespace @TESTNAME@ { #define NUM_MSGS 2000 #define PACKET_ERROR_RATE 0.2 class Node1 : public cSimpleModule { public: Node1() : cSimpleModule(16384) { } virtual void activity() override; }; Define_Module(Node1); void Node1::activity() { for (int i=0; i(receive()); if (pkt->hasBitError()) numErrors++; delete pkt; } } void Node2::finish() { double erate = numErrors / (double)NUM_MSGS; EV << "error rate: measured: " << erate << ", expected: " << PACKET_ERROR_RATE << endl; if (fabs(erate-PACKET_ERROR_RATE) > PACKET_ERROR_RATE/10) throw cRuntimeError("wrong packet error rate"); EV << "OK\n"; } }; //namespace %contains: stdout error rate: measured: 0.2065, expected: 0.2 OK