45 cModule* portWrapper = port->getParentModule();
48 std::ostringstream queueName;
50 queueName << strType << queueId;
55 EV <<
"addQueue(): Queue with this ID already exists!";
61 cModule *newModule = moduleType->createScheduleInit(queueName.str().c_str(), portWrapper);
62 queue =
dynamic_cast<RMTQueue*
>(newModule);
65 cModule* rmt = getRINAModule<cModule*>(
this, 1, {
MOD_RMT});
66 std::ostringstream combinedQueueName;
67 combinedQueueName << portWrapper->getFullName() << queueName.str();
71 cGate* rmtOut = rmt->addGate(combinedQueueName.str().c_str(), cGate::OUTPUT,
false);
72 cGate* portBorder = portWrapper->addGate(queueName.str().c_str(), cGate::INPUT,
false);
73 rmtOut->connectTo(portBorder);
79 cGate* fromOutputQueue = port->addGate(queue->getFullName(), cGate::INPUT,
false);
87 cGate* rmtIn = rmt->addGate(combinedQueueName.str().c_str(), cGate::INPUT,
false);
88 cGate* portBorder = portWrapper->addGate(queueName.str().c_str(), cGate::OUTPUT,
false);
91 portBorder->connectTo(rmtIn);
96 cGate* toInputQueue = port->addGate(queue->getFullName(), cGate::OUTPUT,
false);
111 std::ostringstream portName;
117 cModule* portWrapper = moduleType->createScheduleInit(portName.str().c_str(), getParentModule());
123 cDisplayString& portDisp = portWrapper->getDisplayString();
134 portDisp.setTagArg(
"i2", 0,
"status/execute");
138 std::ostringstream sdupInstanceName, sdupPolicyType;
139 const char* sdupParam = getParentModule()->par(
"sdupPolicyName");
140 sdupPolicyType <<
"rina.policies.DIF.SDUProtection." << sdupParam <<
"." << sdupParam;
142 moduleType = cModuleType::get(sdupPolicyType.str().c_str());
144 moduleType->createScheduleInit(sdupInstanceName.str().c_str(), portWrapper));
147 cDisplayString& sdupDisp = sdup->getDisplayString();
148 sdupDisp.setTagArg(
"p", 0, 150);
149 sdupDisp.setTagArg(
"p", 1, 228);
150 sdupDisp.setTagArg(
"i", 0,
"block/encrypt");
151 sdupDisp.setTagArg(
"is", 0,
"s");
161 cModule* rmt = getRINAModule<cModule*>(
this, 1, {
MOD_RMT});
169 rmtGate->getNextGate()->disconnect();
170 rmtGate->disconnect();
171 qOutputGate->disconnect();
172 port->unregisterOutputQueue(queue);
176 qOutputGate->getNextGate()->disconnect();
177 qOutputGate->disconnect();
178 qInputGate->getPreviousGate()->disconnect();
179 port->unregisterInputQueue(queue);
182 rmt->deleteGate(rmtGate->getFullName());
183 port->deleteGate(queue->getFullName());
184 port->getParentModule()->deleteGate(queue->getFullName());
188 queue->deleteModule();
193 while (!queues.empty())
204 for(
auto const q : queues)
206 if (!opp_strcmp(q->getName(), queueName))
220 port->getParentModule()->deleteModule();
235 cModule* portWrapper = getParentModule()->getSubmodule(name);
void removeQueues(RMTQueues &queues)
Class representing flow object with attributes from specs.
virtual void initialize()
queueType getType() const
cGate * getOutputGate() const
const char * MOD_RMT_PORTWRAPPER
virtual void postQueueCreation(RMTQueue *queue)
RMTQueue * lookup(RMTPort *port, RMTQueueType type, const char *queueName)
RMTQueues & getInputQueues()
RMTPort * getInterfacePort()
void setRMTAccessGate(cGate *gate)
RMTPort * getQueueToPortMapping(RMTQueue *queue)
const char * MOD_POL_RMT_QMONITOR
RMTPort * addPort(Flow *flow)
RMTPort * getPort(const char *name)
void interconnectModules(cModule *m1, cModule *m2, std::string n1, std::string n2)
virtual void preQueueRemoval(RMTQueue *queue)
RMTQueue * addQueue(RMTQueueType type, RMTPort *port, const char *queueId="0")
bool isManagementFlow() const
void removePort(RMTPort *port)
RMTQueues & getOutputQueues()
void removeQueue(RMTQueue *queue)
void setType(queueType type)
void registerInputQueue(RMTQueue *queue)
cGate * getInputGate() const
std::map< RMTQueue *, RMTPort * > queueToPort
Define_Module(RMTModuleAllocator)
void registerOutputQueue(RMTQueue *queue)
RMTQMonitorBase * qMonPolicy
std::vector< RMTQueue * > RMTQueues
cGate * getRMTAccessGate() const
const char * MOD_RMT_QUEUE