29 void ModularMonitor::onPolicyInit(){
30 inOutModule = check_and_cast<
Int_MM_Out_Module*> (getSubmodule(
"inputOutSubModule"));
31 inDropModule = check_and_cast<
Int_MM_Drop_Module*> (getSubmodule(
"inputDropSubModule"));
32 outOutModule = check_and_cast<
Int_MM_Out_Module*> (getSubmodule(
"outputOutSubModule"));
33 outDropModule = check_and_cast<
Int_MM_Drop_Module*> (getSubmodule(
"outputDropSubModule"));
35 emitSignals = par(
"signal").boolValue();
37 signal = registerSignal(
"ModularSignal");
41 void ModularMonitor::postPDUInsertion(
RMTQueue* queue) {
42 RMTPort* port = rmtAllocator->getQueueToPortMapping(queue);
45 inOutModule->pduInsertered(queue, port);
46 inDropModule->pduInsertered(queue, port);
49 outOutModule->pduInsertered(queue, port);
50 outDropModule->pduInsertered(queue, port);
54 if(inTime.find(pdu) == inTime.end()) {
55 inTime[pdu] = simTime();
58 if(inPos.find(pdu) == inPos.end()) {
59 inPos[pdu] = portServed[port];
62 if(
const PDU * p = dynamic_cast<const PDU*>(pdu)) {
63 emit(signal,
new HopRcvMsg(p->getConnId().getQoSId(),
this));
70 void ModularMonitor::onMessageDrop(
RMTQueue* queue,
const cPacket* pdu) {
71 RMTPort* port = rmtAllocator->getQueueToPortMapping(queue);
74 inOutModule->pduDropped(queue, pdu, port);
75 inDropModule->pduDropped(queue, pdu, port);
78 outOutModule->pduDropped(queue, pdu, port);
79 outDropModule->pduDropped(queue, pdu, port);
82 if(
const PDU * p = dynamic_cast<const PDU*>(pdu)) {
83 emit(signal,
new HopLossMsg(p->getConnId().getQoSId(),
this));
93 void ModularMonitor::prePDURelease(
RMTQueue* queue) {
94 RMTPort* port = rmtAllocator->getQueueToPortMapping(queue);
97 inOutModule->pduReleased(queue, port);
98 inDropModule->pduReleased(queue, port);
101 outOutModule->pduReleased(queue, port);
102 outDropModule->pduReleased(queue, port);
104 if(
const PDU * pdu = dynamic_cast<const PDU*>(queue->
getFirstPDU())) {
105 if(inTime.find(pdu) != inTime.end()) {
106 int hdel = portServed[port]-inPos[pdu];
107 std::string qos = pdu->getConnId().getQoSId();
112 dynamic_cast<InfectedDataTransferPDU * >(
113 const_cast<PDU*>(pdu))) {
114 idt->addPSTdelay(hdel);
115 idt->setHopCount(idt->getHopCount()+1);
124 void ModularMonitor::postQueueCreation(
RMTQueue* queue){
125 RMTPort* port = rmtAllocator->getQueueToPortMapping(queue);
128 inOutModule->queueCreated(queue, port);
129 inDropModule->queueCreated(queue, port);
132 outOutModule->queueCreated(queue, port);
133 outDropModule->queueCreated(queue, port);
139 double ModularMonitor::getInDropProb(
RMTQueue * queue) {
140 RMTPort* port = rmtAllocator->getQueueToPortMapping(queue);
141 return inDropModule->getDropProbability(queue, port);
144 double ModularMonitor::getOutDropProb(
RMTQueue * queue) {
145 RMTPort* port = rmtAllocator->getQueueToPortMapping(queue);
146 return outDropModule->getDropProbability(queue, port);
151 return inOutModule->getnextQueue(port);
155 return outOutModule->getnextQueue(port);
159 simtime_t ModularMonitor::getInNextTime(
RMTPort* port){
160 return inOutModule->getnextTime(port);
163 simtime_t ModularMonitor::getOutNextTime(
RMTPort* port){
164 return outOutModule->getnextTime(port);
queueType getType() const
const cPacket * getFirstPDU() const
const cPacket * getLastPDU() const
Define_Module(ModularMonitor)