24 void MM_DL_Out::initialize() {
25 defaultPriority = par(
"defPriority").longValue();
26 if(defaultPriority < 0) { error(
"Error at DL_Out. defPriority must be >=0!"); }
28 maxPriority = defaultPriority;
30 cXMLElement* Xml = NULL;
31 if (par(
"data").xmlValue() != NULL && par(
"data").xmlValue()->hasChildren()){
32 Xml = par(
"data").xmlValue();
36 cXMLElementList queues = Xml->getChildrenByTagName(
"queue");
37 for(
auto queue : queues){
38 if (!queue->getAttribute(
"id")) { error(
"Error parsing DL_Out Queue. Its ID is missing!"); }
39 std::string
id = queue->getAttribute(
"id");
40 if (
id==
"") { error(
"Error parsing DL_Out Queue. Queue ID cannot be empty!"); }
42 if (!queue->getAttribute(
"priority")) { error(
"Error parsing DL_Out Queue. Its Priority is missing!"); }
43 int priority = atoi(queue->getAttribute(
"priority"));
44 if (priority<0) { error(
"Error parsing DL_Out Queue. Queue Priority must be >=0!"); }
46 queueName2Priority[id] = priority;
48 if(maxPriority<priority) { maxPriority = priority ; }
52 MM_DL_Out::~MM_DL_Out(){}
54 void MM_DL_Out::finish() {}
57 portQueues[p][queuePriority[q]].push_back(q);
61 portQueues[p][queuePriority[q]].pop_back();
67 if(queueName2Priority.find(q->getName()) != queueName2Priority.end()) {
68 queuePriority[q] = maxPriority-queueName2Priority[q->getName()];
70 queuePriority[q] = maxPriority-defaultPriority;
75 for(
auto & pQ : portQueues[p]){
76 while(!pQ.second.empty()) {
78 pQ.second.pop_front();
85 simtime_t MM_DL_Out::getnextTime(
RMTPort * p) {