RINASim  October 2016
Documentation of framework for OMNeT++
MM_psDQ_Out.h
Go to the documentation of this file.
1 //
2 // Copyright © 2014 - 2015 PRISTINE Consortium (http://ict-pristine.eu)
3 //
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU Lesser General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU Lesser General Public License for more details.
13 //
14 // You should have received a copy of the GNU Lesser General Public License
15 // along with this program. If not, see http://www.gnu.org/licenses/.
16 //
17 
18 #pragma once
19 
20 #include "Int_MM_Out_Module.h"
21 
22 #include <string>
23 #include <map>
24 #include <vector>
25 #include <list>
26 
27 namespace MM_psDQ_Out {
28 
29 using namespace std;
30 
31 struct UrgProb {
32  double prob;
33  int urg;
34 
35  UrgProb(double, int);
36 };
37 
38 struct DegradList {
39  int start;
40  vector<UrgProb> urgList;
41 
42  DegradList(double);
43 };
44 
45 struct QueueConfig {
46  string id;
48  double rate;
49  vector<DegradList> degradLists;
50 
51  QueueConfig();
52  QueueConfig(string, int);
53 };
54 
55 struct QueueData {
56  int count;
57  list<simtime_t> cOutTimes;
58  map<int, int> countUrg;
60 
61 
62  map<int, int> countUrgstats;
63 
64  QueueData();
65 };
66 
68 {
69  public:
70  ~MM_psDQ_Out();
71  void finish();
72 
73  void pduInsertered(RMTQueue *, RMTPort *);
74  void pduDropped(RMTQueue *, const cPacket *, RMTPort *);
75  void pduReleased(RMTQueue *, RMTPort *);
76  void queueCreated(RMTQueue *, RMTPort *);
77 
78  RMTQueue * getnextQueue(RMTPort *);
79  simtime_t getnextTime(RMTPort *);
80 
81  protected:
82  map<string, QueueConfig> queuesConf;
83  map<RMTQueue *, QueueConfig *> queueConf;
84  map<RMTQueue *, QueueData> queueData;
85 
86  // map<string , int> queueName2Priority;
89  // map<RMTQueue * , int> queuePriority;
90  // map<int, double> prioritySkip;
91 
92  map<RMTPort* , set<RMTQueue*> > portQueues;
93  map<RMTPort* , int > portCount;
94 
95  void initialize();
96 };
97 
98 }
map< string, QueueConfig > queuesConf
Definition: MM_psDQ_Out.h:82
vector< DegradList > degradLists
Definition: MM_psDQ_Out.h:49
map< RMTPort *, set< RMTQueue * > > portQueues
Definition: MM_psDQ_Out.h:92
map< RMTPort *, int > portCount
Definition: MM_psDQ_Out.h:93
map< int, int > countUrg
Definition: MM_psDQ_Out.h:58
map< RMTQueue *, QueueConfig * > queueConf
Definition: MM_psDQ_Out.h:83
list< simtime_t > cOutTimes
Definition: MM_psDQ_Out.h:57
map< int, int > countUrgstats
Definition: MM_psDQ_Out.h:62
vector< UrgProb > urgList
Definition: MM_psDQ_Out.h:40
map< RMTQueue *, QueueData > queueData
Definition: MM_psDQ_Out.h:84