33 #define ECN_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.ECN."
34 #define ECN_POLICY_NAME "ecnPolicy"
36 #define RCVR_FC_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.RcvrFC."
37 #define RCVR_FC_POLICY_NAME "rcvrFCPolicy"
39 #define RCVR_ACK_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.RcvrAck."
40 #define RCVR_ACK_POLICY_NAME "rcvrAckPolicy"
42 #define RECEIVING_FC_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.ReceivingFC."
43 #define RECEIVING_FC_POLICY_NAME "receivingFCPolicy"
45 #define SENDING_ACK_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.SendingAck."
46 #define SENDING_ACK_POLICY_NAME "sendingAckPolicy"
48 #define LOST_CONTROL_PDU_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.LostControlPDU."
49 #define LOST_CONTROL_PDU_POLICY_NAME "lostControlPDUPolicy"
51 #define RCVR_CONTROL_ACK_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.RcvrControlAck."
52 #define RCVR_CONTROL_ACK_POLICY_NAME "rcvrControlAckPolicy"
54 #define SENDER_ACK_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.SenderAck."
55 #define SENDER_ACK_POLICY_NAME "senderAckPolicy"
57 #define SND_FC_OVERRUN_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.SndFCOverrun."
58 #define SND_FC_OVERRUN_POLICY_NAME "sndFcOverrunPolicy"
60 #define RCV_FC_OVERRUN_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.RcvFCOverrun."
61 #define RCV_FC_OVERRUN_POLICY_NAME "rcvFcOverrunPolicy"
63 #define NO_OVERRIDE_PEAK_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.NoOverridePeak."
64 #define NO_OVERRIDE_PEAK_POLICY_NAME "noOverridePeakPolicy"
66 #define TX_CONTROL_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.TxControl."
67 #define TX_CONTROL_POLICY_NAME "txControlPolicy"
69 #define NO_RATE_SLOW_DOWN_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.NoRateSlowDown."
70 #define NO_RATE_SLOW_DOWN_POLICY_NAME "noRateSlowDownPolicy"
72 #define RECONCILE_FC_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.ReconcileFC."
73 #define RECONCILE_FC_POLICY_NAME "reconcileFCPolicy"
75 #define RATE_REDUCTION_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.RateReduction."
76 #define RATE_REDUCTION_POLICY_NAME "rateReductionPolicy"
79 #define RCVR_INACTIVITY_POLICY_PREFIX "rina.policies.DIF.EFCP.DTP.RcvrInactivity."
80 #define RCVR_INACTIVITY_POLICY_NAME "rcvrInactivityPolicy"
82 #define SENDER_INACTIVITY_POLICY_PREFIX "rina.policies.DIF.EFCP.DTP.SenderInactivity."
83 #define SENDER_INACTIVITY_POLICY_NAME "senderInactivityPolicy"
85 #define INITIAL_SEQ_NUM_POLICY_PREFIX "rina.policies.DIF.EFCP.DTP.InitialSeqNum."
86 #define INITIAL_SEQ_NUM_POLICY_NAME "initialSeqNumPolicy"
88 #define RTT_ESTIMATOR_POLICY_PREFIX "rina.policies.DIF.EFCP.DTP.RTTEstimator."
89 #define RTT_ESTIMATOR_POLICY_NAME "rttEstimatorPolicy"
91 #define ECN_SLOW_DOWN_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.ECNSlowDown."
92 #define ECN_SLOW_DOWN_POLICY_NAME "ecnSlowDownPolicy"
94 #define RX_TIMER_EXPIRY_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.RxTimerExpiry."
95 #define RX_TIMER_EXPIRY_POLICY_NAME "rxTimerExpiryPolicy"
97 #define ECN_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.ECN."
98 #define ECN_POLICY_NAME "ecnPolicy"
100 #define ECN_SLOW_DOWN_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.ECNSlowDown."
101 #define ECN_SLOW_DOWN_POLICY_NAME "ecnSlowDownPolicy"
129 Enter_Method(
"createEFCPI()");
135 cModule* efcpModule = this->getParentModule();
137 std::ostringstream name;
140 cModule* efcpiModule = moduleType->create(name.str().c_str(), efcpModule);
141 efcpiModule->par(
"initialSeqNumPolicyName").setStringValue(efcpPolicySet->
getInitialSeqNum());
142 efcpiModule->par(
"rcvrInactivityPolicyName").setStringValue(efcpPolicySet->
getRcvrInactiv());
143 efcpiModule->par(
"senderInactivityPolicyName").setStringValue(efcpPolicySet->
getSenderInactiv());
144 efcpiModule->par(
"rttEstimatorPolicyName").setStringValue(efcpPolicySet->
getRttEstimat());
146 efcpiModule->finalizeParameters();
147 efcpiModule->buildInside();
149 efcpiModule->scheduleStart(simTime());
168 DTP* dtpModule = getRINAModule<DTP*>(efcpiModule, 0, {
MOD_DTP});
212 cGate* efcpiToDelI = efcpiModule->gateHalf(std::string(
GATE_EFCPI_NORTHIO).c_str(), cGate::INPUT);
213 cGate* efcpiToDelO = efcpiModule->gateHalf(std::string(
GATE_EFCPI_NORTHIO).c_str(), cGate::OUTPUT);
215 delToEfcpiO->connectTo(efcpiToDelI);
216 efcpiToDelO->connectTo(delToEfcpiI);
220 std::ostringstream gateName_str;
225 efcpModule->addGate(gateName_str.str().c_str(), cGate::INOUT);
226 cGate* efcpToFaI = efcpModule->gateHalf(gateName_str.str().c_str(), cGate::INPUT);
227 cGate* efcpToFaO = efcpModule->gateHalf(gateName_str.str().c_str(), cGate::OUTPUT);
230 delToFaO->connectTo(efcpToFaO);
231 efcpToFaI->connectTo(delToFaI);
234 gateName_str.str(std::string());
236 efcpModule->addGate(gateName_str.str().c_str(), cGate::INOUT);
238 cGate* efcpToEfcpiI = efcpModule->gateHalf(gateName_str.str().c_str(), cGate::INPUT);
239 cGate* efcpToEfcpiO = efcpModule->gateHalf(gateName_str.str().c_str(), cGate::OUTPUT);
244 efcpiToRmtO->connectTo(efcpToEfcpiO);
245 efcpToEfcpiI->connectTo(efcpiToRmtI);
247 efcpiModule->callInitialize();
251 cDisplayString& disp = dtcp->getDisplayString();
253 disp.setTagArg(
"p", 0, 70);
254 disp.setTagArg(
"p", 1, 210);
266 int verticalIndex = 4;
290 dtcpModule->finalizeParameters();
291 dtcpModule->buildInside();
292 dtcpModule->scheduleStart(simTime());
298 dtcpState->finalizeParameters();
299 dtcpState->buildInside();
300 dtcpState->scheduleStart(simTime());
321 std::stringstream modulePath;
322 modulePath << prefix << name <<
"." << name;
323 cModuleType* policyType = cModuleType::get(modulePath.str().c_str());
324 cModule* module = policyType->create(policy, parent);
325 module->finalizeParameters();
326 module->buildInside();
327 module->scheduleStart(simTime());
329 cDisplayString& disp = module->getDisplayString();
330 disp.setTagArg(
"is", 0,
"vs");
331 disp.setTagArg(
"p", 0, (verticalIndex / 7) * 250 + 387);
332 disp.setTagArg(
"p", 1, 40 * (verticalIndex % 7) + 25);
342 std::ostringstream name;
347 Delimiting* delimit = (
Delimiting*) delimitType->create(name.str().c_str(), this->getParentModule());
348 delimit->finalizeParameters();
349 delimit->buildInside();
350 delimit->scheduleStart(simTime());
351 delimit->callInitialize();
365 EV << getFullPath() <<
": failed to found EFCPTableEntry by Flow to deallocate EFCPI" << endl;
373 entry->
getEfcpiTab()->front()->getDtp()->getParentModule()->callFinish();
374 entry->
getEfcpiTab()->front()->getDtp()->getParentModule()->deleteModule();
#define NO_RATE_SLOW_DOWN_POLICY_PREFIX
Class representing flow object with attributes from specs.
bool isDTCPNeeded() const
Returns true if DTCP module is needed in order to support this QoScube.
EFCPTableEntry * getEntryByFlow(const Flow *flow)
#define SENDING_ACK_POLICY_NAME
Delimiting * createDelimiting(cModule *efcpi, int portId)
const char * MOD_RESALLOC
#define LOST_CONTROL_PDU_POLICY_NAME
void setSndFcOverrunPolicy(SndFCOverrunPolicyBase *sndFcOverrunPolicy)
#define RCVR_CONTROL_ACK_POLICY_NAME
virtual void initialize(int step)
const char * getRttEstimat() const
const char * getRxTimerExpiry() const
DTCP * createDTCP(cModule *efcpi, const EFCPPolicySet *efcpPolicySet, const QoSCube *qosCube)
const char * getLostControlPdu() const
#define ECN_SLOW_DOWN_POLICY_NAME
const char * MOD_DTCP_STATE
const EFCPPolicySet * getEfcpPolicies() const
const char * getInitialSeqNum() const
#define NO_RATE_SLOW_DOWN_POLICY_NAME
const char * MOD_DTCP_STATE_PATH
void setRcvrControlAckPolicy(RcvrControlAckPolicyBase *rcvrControlAckPolicy)
TEFCPITab * getEfcpiTab()
const char * MOD_DTP_STATE
#define RECEIVING_FC_POLICY_PREFIX
const char * MOD_EFCPTABLE
std::string getQoSId() const
Getter of selected QoS-cube identifier.
Delimiting * getDelimit() const
#define RATE_REDUCTION_POLICY_PREFIX
const char * MOD_DELIMITING_PATH
#define RCVR_FC_POLICY_NAME
void insertEntry(EFCPTableEntry *entry)
void setSendingAckPolicy(SendingAckPolicyBase *sendingAckPolicy)
#define SND_FC_OVERRUN_POLICY_PREFIX
#define RCVR_ACK_POLICY_NAME
void setDelimit(Delimiting *delimit)
#define ECN_POLICY_PREFIX
cModule * createPolicyModule(const char *prefix, const char *name, const char *policy, cModule *parent, int verticalIndex=1)
#define RATE_REDUCTION_POLICY_NAME
EFCPInstance * createEFCPI(const Flow *flow, int cepId, int portId)
#define TX_CONTROL_POLICY_NAME
#define GATE_DELIMIT_SOUTHIO
#define RECONCILE_FC_POLICY_NAME
#define GATE_DELIMIT_NORTHIO
const char * GATE_EFCPI_NORTHIO
#define RX_TIMER_EXPIRY_POLICY_PREFIX
const char * getReconcileFc() const
#define TX_CONTROL_POLICY_PREFIX
#define RCVR_CONTROL_ACK_POLICY_PREFIX
const char * getEcn() const
const char * getReceivingFc() const
#define NO_OVERRIDE_PEAK_POLICY_NAME
LisEFCPCongestFromRA * lisEFCPCongestFromRA
const char * getSenderAck() const
const char * getSndFcOverrun() const
#define RECEIVING_FC_POLICY_NAME
void setNoOverridePeakPolicy(NoOverridePeakPolicyBase *noOverridePeakPolicy)
void setQoSCube(const QoSCube *&qoSCube)
const char * getTxControl() const
const char * SIG_RA_ExecuteSlowdown
#define RCVR_FC_POLICY_PREFIX
const char * getRcvrAck() const
void setRcvrAckPolicy(RcvrAckPolicyBase *rcvrAckPolicy)
const char * getRcvrFc() const
#define SENDER_ACK_POLICY_PREFIX
void setECNSlowDownPolicy(ECNSlowDownPolicyBase *ecnSlowDownPolicy)
void setRxTimerExpiryPolicy(RxTimerExpiryPolicyBase *rxTimerExpiryPolicy)
void setRateReductionPolicy(RateReductionPolicyBase *rateReductionPolicy)
const char * MOD_DTCP_PATH
void setQoSCube(const QoSCube *&qoSCube)
const char * getSenderInactiv() const
#define DELIMITING_MODULE_NAME
#define NO_OVERRIDE_PEAK_POLICY_PREFIX
void setRcvrFcPolicy(RcvrFCPolicyBase *rcvrFcPolicy)
#define SENDER_ACK_POLICY_NAME
const char * getNoRateSlowDown() const
#define RCVR_ACK_POLICY_PREFIX
#define RECONCILE_FC_POLICY_PREFIX
#define LOST_CONTROL_PDU_POLICY_PREFIX
void setECNPolicy(ECNPolicyBase *ecnPolicy)
void addEFCPI(EFCPInstance *efcpi)
#define ECN_SLOW_DOWN_POLICY_PREFIX
void setTxControlPolicy(TxControlPolicyBase *txControlPolicy)
void setReceivingFcPolicy(ReceivingFCPolicyBase *receivingFcPolicy)
Class representing QoSCube with all its properties that is primarily used by FA, RMT and RA Specifica...
const ConnectionId & getConId() const
Gets read-only Flow's ConnectionId.
const char * getSendingAck() const
bool deleteEFCPI(Flow *flow)
#define RCV_FC_OVERRUN_POLICY_NAME
void setReconcileFcPolicy(ReconcileFCPolicyBase *reconcileFcPolicy)
LisEFCPQueueInfoFromAE * lisEFCPQueueInfoFromAE
void setSenderAckPolicy(SenderAckPolicyBase *senderAckPolicy)
#define RCV_FC_OVERRUN_POLICY_PREFIX
void setFlow(const Flow *flow)
const char * getRcvrControlAck() const
#define SND_FC_OVERRUN_POLICY_NAME
void setRcvFcOverrunPolicy(RcvFCOverrunPolicyBase *rcvFcOverrunPolicy)
#define RX_TIMER_EXPIRY_POLICY_NAME
#define SENDING_ACK_POLICY_PREFIX
void setNoRateSlowDownPolicy(NoRateSlowDownPolicyBase *noRateSlowDownPolicy)
const char * getRateReduction() const
const char * getEcnSlowDown() const
const char * getNoOverridePeak() const
void setDtcpState(DTCPState *dtcpState)
const char * MOD_EFCPI_PATH
const char * getRcvrInactiv() const
void setState(DTPState *state)
void setLostControlPduPolicy(LostControlPDUPolicyBase *lostControlPduPolicy)
const char * SIG_Socket_QueueInfo
const char * getRcvFcOverrun() const
void setFlow(const Flow *flow)
const QoSCube * getQoSCubeById(std::string qosId) const
const char * GATE_EFCPI_SOUTHIO