24 void MM_P_Out::initialize() {
25 defaultPriority = par(
"defPriority").longValue();
26 if(defaultPriority < 0) { error(
"Error at P_Out. defPriority must be >=0!"); }
29 cXMLElement* Xml = NULL;
30 if (par(
"data").xmlValue() != NULL && par(
"data").xmlValue()->hasChildren()){
31 Xml = par(
"data").xmlValue();
35 cXMLElementList queues = Xml->getChildrenByTagName(
"queue");
36 for(
auto queue : queues){
37 if (!queue->getAttribute(
"id")) { error(
"Error parsing P_Out Queue. Its ID is missing!"); }
38 std::string
id = queue->getAttribute(
"id");
39 if (
id==
"") { error(
"Error parsing P_Out Queue. Queue ID cannot be empty!"); }
41 if (!queue->getAttribute(
"priority")) { error(
"Error parsing P_Out Queue. Its Priority is missing!"); }
42 int priority = atoi(queue->getAttribute(
"priority"));
43 if (priority<=0) { error(
"Error parsing P_Out Queue. Queue Priority must be >0!"); }
45 queueName2Priority[id] = priority;
49 MM_P_Out::~MM_P_Out(){}
51 void MM_P_Out::finish() {}
60 if(queueName2Priority.find(q->getName()) != queueName2Priority.end()) {
61 queuePriority[q] = queueName2Priority[q->getName()];
63 queuePriority[q] = defaultPriority;
65 portQueues[p].insert(q);
70 for(
auto pQ : portQueues[p]){
71 if(pQ->getLength() > 0) {
72 sumPrior += queuePriority[pQ];
76 if(sumPrior<=0) {
return NULL; }
78 int until = intuniform(0, sumPrior);
81 for(
auto pQ : portQueues[p]){
82 if(pQ->getLength() > 0) {
84 sumPrior += queuePriority[pQ];
85 if(sumPrior > until) {
break; }
92 simtime_t MM_P_Out::getnextTime(
RMTPort * p) {