RINASim  October 2016
Documentation of framework for OMNeT++
DumbMaxQ.cc
Go to the documentation of this file.
1 //
2 // The MIT License (MIT)
3 //
4 // Copyright (c) 2014-2016 Brno University of Technology, PRISTINE project
5 //
6 // Permission is hereby granted, free of charge, to any person obtaining a copy
7 // of this software and associated documentation files (the "Software"), to deal
8 // in the Software without restriction, including without limitation the rights
9 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 // copies of the Software, and to permit persons to whom the Software is
11 // furnished to do so, subject to the following conditions:
12 //
13 // The above copyright notice and this permission notice shall be included in
14 // all copies or substantial portions of the Software.
15 //
16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 // THE SOFTWARE.
23 
24 #include <DumbMaxQ.h>
25 
26 
28 
30 {
31  monitor = dynamic_cast<SmartMonitor*>(qMonPolicy);
32  if (monitor == NULL)
33  {
34  EV << "!!! DumbMaxQ has to be used in conjecture with SmartMonitor!" << endl;
35  }
36 }
37 
38 bool DumbMaxQ::run(RMTQueue* queue)
39 {
40  bool drop = false;
41  double dp;
42  switch (queue->getType()) {
43  case RMTQueue::INPUT: dp = monitor->getInDropProb(queue); break;
44  case RMTQueue::OUTPUT: dp = monitor->getOutDropProb(queue); break;
45  }
46 
47  if( dp <= 0 ) { drop = false; }
48  if( dp >= 1 ) { drop = true; }
49  else { drop = dp >= uniform(0,1); }
50 
51  std::string qos = ((PDU*)queue->getLastPDU())->getConnId().getQoSId();
52  if(drop) {
53  if(queue->getType() == RMTQueue::INPUT){
54  dropIn[qos]++;
55  dDropIn[qos] += queue->getLastPDU()->getBitLength();
56 
57  dropIn["*"]++;
58  dDropIn["*"] += queue->getLastPDU()->getBitLength();
59  } else {
60  dropOut[qos]++;
61  dDropOut[qos] += queue->getLastPDU()->getBitLength();
62 
63  dropOut["*"]++;
64  dDropOut["*"] += queue->getLastPDU()->getBitLength();
65  }
66  } else {
67  if(queue->getType() == RMTQueue::INPUT){
68  okIn[qos]++;
69  dOkIn[qos] += queue->getLastPDU()->getBitLength();
70 
71  okIn["*"]++;
72  dOkIn["*"] += queue->getLastPDU()->getBitLength();
73  } else {
74  okOut[qos]++;
75  dOkOut[qos] += queue->getLastPDU()->getBitLength();
76 
77  okOut["*"]++;
78  dOkOut["*"] += queue->getLastPDU()->getBitLength();
79  }
80  }
81 
82  return drop;
83 }
84 
85 
87  if(par("printAtEnd").boolValue()) {
88  EV << "--------"<< endl;
89  EV << "At " << getFullPath()<< endl;
90  std::map<std::string, unsigned int>::iterator it;
91 
92  EV << "On output:" <<endl;
93  for(it = okOut.begin(); it!= okOut.end(); it++){
94  EV << "QoS " << it->first << " - Processed " << okOut[it->first] <<"(" << dOkOut[it->first] << ")" << " - Dropped "<< dropOut[it->first] <<"(" << dDropOut[it->first] << ")" << endl;
95  }
96  EV << "--------"<< endl;
97  }
98 }
RMTQMonitorBase * qMonPolicy
Definition: RMTMaxQBase.h:80
queueType getType() const
Definition: RMTQueue.cc:241
virtual double getOutDropProb(RMTQueue *queue)=0
void onPolicyInit()
Definition: DumbMaxQ.cc:29
bool run(RMTQueue *queue)
Definition: DumbMaxQ.cc:38
std::map< std::string, unsigned int > okIn
Definition: DumbMaxQ.h:40
std::map< std::string, unsigned long > dOkIn
Definition: DumbMaxQ.h:41
void finish()
Definition: DumbMaxQ.cc:86
std::map< std::string, unsigned int > okOut
Definition: DumbMaxQ.h:40
Definition: PDU.h:42
const cPacket * getLastPDU() const
Definition: RMTQueue.cc:276
std::map< std::string, unsigned long > dDropIn
Definition: DumbMaxQ.h:41
std::map< std::string, unsigned long > dOkOut
Definition: DumbMaxQ.h:41
virtual double getInDropProb(RMTQueue *queue)=0
SmartMonitor * monitor
Definition: DumbMaxQ.h:38
std::map< std::string, unsigned long > dDropOut
Definition: DumbMaxQ.h:41
std::map< std::string, unsigned int > dropIn
Definition: DumbMaxQ.h:40
std::map< std::string, unsigned int > dropOut
Definition: DumbMaxQ.h:40
Define_Module(DumbMaxQ)