RINASim  October 2016
Documentation of framework for OMNeT++
EFCP.cc
Go to the documentation of this file.
1 // The MIT License (MIT)
2 //
3 // Copyright (c) 2014-2016 Brno University of Technology, PRISTINE project
4 //
5 // Permission is hereby granted, free of charge, to any person obtaining a copy
6 // of this software and associated documentation files (the "Software"), to deal
7 // in the Software without restriction, including without limitation the rights
8 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 // copies of the Software, and to permit persons to whom the Software is
10 // furnished to do so, subject to the following conditions:
11 //
12 // The above copyright notice and this permission notice shall be included in
13 // all copies or substantial portions of the Software.
14 //
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 // THE SOFTWARE.
22 
23 /*
24  * @file EFCP.cc
25  * @author Marcel Marek
26  * @date Apr 28, 2014
27  * @brief
28  * @detail
29  */
30 #include "EFCP.h"
32 
33 #define ECN_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.ECN."
34 #define ECN_POLICY_NAME "ecnPolicy"
35 
36 #define RCVR_FC_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.RcvrFC."
37 #define RCVR_FC_POLICY_NAME "rcvrFCPolicy"
38 
39 #define RCVR_ACK_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.RcvrAck."
40 #define RCVR_ACK_POLICY_NAME "rcvrAckPolicy"
41 
42 #define RECEIVING_FC_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.ReceivingFC."
43 #define RECEIVING_FC_POLICY_NAME "receivingFCPolicy"
44 
45 #define SENDING_ACK_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.SendingAck."
46 #define SENDING_ACK_POLICY_NAME "sendingAckPolicy"
47 
48 #define LOST_CONTROL_PDU_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.LostControlPDU."
49 #define LOST_CONTROL_PDU_POLICY_NAME "lostControlPDUPolicy"
50 
51 #define RCVR_CONTROL_ACK_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.RcvrControlAck."
52 #define RCVR_CONTROL_ACK_POLICY_NAME "rcvrControlAckPolicy"
53 
54 #define SENDER_ACK_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.SenderAck."
55 #define SENDER_ACK_POLICY_NAME "senderAckPolicy"
56 
57 #define SND_FC_OVERRUN_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.SndFCOverrun."
58 #define SND_FC_OVERRUN_POLICY_NAME "sndFcOverrunPolicy"
59 
60 #define RCV_FC_OVERRUN_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.RcvFCOverrun."
61 #define RCV_FC_OVERRUN_POLICY_NAME "rcvFcOverrunPolicy"
62 
63 #define NO_OVERRIDE_PEAK_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.NoOverridePeak."
64 #define NO_OVERRIDE_PEAK_POLICY_NAME "noOverridePeakPolicy"
65 
66 #define TX_CONTROL_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.TxControl."
67 #define TX_CONTROL_POLICY_NAME "txControlPolicy"
68 
69 #define NO_RATE_SLOW_DOWN_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.NoRateSlowDown."
70 #define NO_RATE_SLOW_DOWN_POLICY_NAME "noRateSlowDownPolicy"
71 
72 #define RECONCILE_FC_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.ReconcileFC."
73 #define RECONCILE_FC_POLICY_NAME "reconcileFCPolicy"
74 
75 #define RATE_REDUCTION_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.RateReduction."
76 #define RATE_REDUCTION_POLICY_NAME "rateReductionPolicy"
77 
78 
79 #define RCVR_INACTIVITY_POLICY_PREFIX "rina.policies.DIF.EFCP.DTP.RcvrInactivity."
80 #define RCVR_INACTIVITY_POLICY_NAME "rcvrInactivityPolicy"
81 
82 #define SENDER_INACTIVITY_POLICY_PREFIX "rina.policies.DIF.EFCP.DTP.SenderInactivity."
83 #define SENDER_INACTIVITY_POLICY_NAME "senderInactivityPolicy"
84 
85 #define INITIAL_SEQ_NUM_POLICY_PREFIX "rina.policies.DIF.EFCP.DTP.InitialSeqNum."
86 #define INITIAL_SEQ_NUM_POLICY_NAME "initialSeqNumPolicy"
87 
88 #define RTT_ESTIMATOR_POLICY_PREFIX "rina.policies.DIF.EFCP.DTP.RTTEstimator."
89 #define RTT_ESTIMATOR_POLICY_NAME "rttEstimatorPolicy"
90 
91 #define ECN_SLOW_DOWN_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.ECNSlowDown."
92 #define ECN_SLOW_DOWN_POLICY_NAME "ecnSlowDownPolicy"
93 
94 #define RX_TIMER_EXPIRY_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.RxTimerExpiry."
95 #define RX_TIMER_EXPIRY_POLICY_NAME "rxTimerExpiryPolicy"
96 
97 #define ECN_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.ECN."
98 #define ECN_POLICY_NAME "ecnPolicy"
99 
100 #define ECN_SLOW_DOWN_POLICY_PREFIX "rina.policies.DIF.EFCP.DTCP.ECNSlowDown."
101 #define ECN_SLOW_DOWN_POLICY_NAME "ecnSlowDownPolicy"
102 
104 
105 }
106 
108 
109 }
110 
111 void EFCP::initialize(int step){
112 
113  efcpTable = (EFCPTable*) getParentModule()->getSubmodule(MOD_EFCPTABLE);
114  resourceAllocator = check_and_cast<RA*>(getModuleByPath("^.^")->getSubmodule(MOD_RESALLOC)->getSubmodule(MOD_RA));
115 
117  getParentModule()->getParentModule()->subscribe(SIG_RA_ExecuteSlowdown, lisEFCPCongestFromRA);
118 
120  getParentModule()->getParentModule()->getParentModule()->subscribe(SIG_Socket_QueueInfo, lisEFCPQueueInfoFromAE);
121 
122 
123 
124 }
125 
126 
127 
128 EFCPInstance* EFCP::createEFCPI(const Flow* flow, int cepId, int portId){
129  Enter_Method("createEFCPI()");
130 
131 // this->efcpTable = (EFCPTable*)this->getSubmodule("efcpTable");
132  const QoSCube* qosCube = resourceAllocator->getQoSCubeById(flow->getConId().getQoSId());
133  const EFCPPolicySet* efcpPolicySet = qosCube->getEfcpPolicies();
134 
135  cModule* efcpModule = this->getParentModule();
136 
137  std::ostringstream name;
138  name << MOD_EFCPI << cepId;
139  cModuleType* moduleType = cModuleType::get(MOD_EFCPI_PATH);
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());
145 
146  efcpiModule->finalizeParameters();
147  efcpiModule->buildInside();
148 
149  efcpiModule->scheduleStart(simTime());
150 
151 
152 
153  //-1. Check for existing Delimiting module for this Flow
154  EFCPTableEntry* tmpEfcpEntry;
155  if((tmpEfcpEntry = efcpTable->getEntryByFlow(flow)) ==NULL){
156  tmpEfcpEntry = new EFCPTableEntry();
157 
158  //TODO A! If it works, delete Delimiting
159  //Flow is not in EFCPTable -> create delimiting
160  tmpEfcpEntry->setDelimit(this->createDelimiting(efcpiModule, portId));
161 
162  //Add tmpEFCPEntry to efcpTable
163  efcpTable->insertEntry(tmpEfcpEntry);
164  tmpEfcpEntry->setFlow(flow);
165  }
166 
167 
168  DTP* dtpModule = getRINAModule<DTP*>(efcpiModule, 0, {MOD_DTP});
169  DTPState* dtpState = getRINAModule<DTPState*>(efcpiModule, 0, {MOD_DTP_STATE});
170 
171  dtpState->setQoSCube(qosCube);
172  dtpModule->setState(dtpState);
173 
174 // dtpModule->par("rcvrInactivityPolicy").setStringValue(par("rcvrInactivityPolicy").stringValue());
175 // dtpModule->par("senderInactivityPolicy").setStringValue(par("senderInactivityPolicy").stringValue());
176 // dtpModule->par("initialSeqNumPolicy").setStringValue(par("initialSeqNumPolicy").stringValue());
177 // dtpModule->par("rttEstimatorPolicy").setStringValue(par("rttEstimatorPolicy").stringValue());
178 // dtpModule->callInitialize(0);
179  dtpModule->setFlow(flow);
180 
181 // dtpModule->setPduDroppingEnabled(par("pduDroppingEnabled"));
182 
183  EFCPInstance* efcpi = new EFCPInstance();
184  efcpi->setDtp(dtpModule);
185 
186 
187  //2. If necessary create DTCP module
188  if(qosCube->isDTCPNeeded()){
189  efcpi->setDtcp(this->createDTCP(efcpiModule, efcpPolicySet, qosCube));
190  }else{
191  efcpi->setDtcp(NULL);
192  }
193  //Put created EFCP instance to EFCP Table Entry
194  tmpEfcpEntry->addEFCPI(efcpi);
195 
196 
197  /* Connect EFCPi module with delimiting */
198  int size = tmpEfcpEntry->getDelimit()->gateSize(GATE_DELIMIT_SOUTHIO);
199  tmpEfcpEntry->getDelimit()->setGateSize(GATE_DELIMIT_SOUTHIO, size + 1);
200 
201  tmpEfcpEntry->getDelimit()->initGates();
202 
203 
204 
205  cGate* delToEfcpiI = (cGate*) tmpEfcpEntry->getDelimit()->gateHalf(GATE_DELIMIT_SOUTHIO, cGate::INPUT, size);
206  cGate* delToEfcpiO = (cGate*) tmpEfcpEntry->getDelimit()->gateHalf(GATE_DELIMIT_SOUTHIO, cGate::OUTPUT, size);
207 
208  cGate* delToFaI = (cGate*) tmpEfcpEntry->getDelimit()->gateHalf(GATE_DELIMIT_NORTHIO, cGate::INPUT);
209  cGate* delToFaO = (cGate*) tmpEfcpEntry->getDelimit()->gateHalf(GATE_DELIMIT_NORTHIO, cGate::OUTPUT);
210 
211 
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);
214 
215  delToEfcpiO->connectTo(efcpiToDelI);
216  efcpiToDelO->connectTo(delToEfcpiI);
217 
218 
219  /* Create gate in EFCPModule for Delimiting <--> FAI */
220  std::ostringstream gateName_str;
221  gateName_str << GATE_APPIO_ << portId;
222 
223 
224 
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);
228 
229  /* Connect Delimiting with compound module's gates */
230  delToFaO->connectTo(efcpToFaO);
231  efcpToFaI->connectTo(delToFaI);
232 
233  /* Create gate in EFCPModule for EFCPi <--> RMT */
234  gateName_str.str(std::string());
235  gateName_str << GATE_RMT_ << cepId;
236  efcpModule->addGate(gateName_str.str().c_str(), cGate::INOUT);
237 
238  cGate* efcpToEfcpiI = efcpModule->gateHalf(gateName_str.str().c_str(), cGate::INPUT);
239  cGate* efcpToEfcpiO = efcpModule->gateHalf(gateName_str.str().c_str(), cGate::OUTPUT);
240 
241  cGate* efcpiToRmtI = efcpiModule->gateHalf(GATE_EFCPI_SOUTHIO, cGate::INPUT);
242  cGate* efcpiToRmtO = efcpiModule->gateHalf(GATE_EFCPI_SOUTHIO, cGate::OUTPUT);
243 
244  efcpiToRmtO->connectTo(efcpToEfcpiO);
245  efcpToEfcpiI->connectTo(efcpiToRmtI);
246 
247  efcpiModule->callInitialize();
248 
249  DTCP* dtcp = efcpi->getDtcp();
250  if(dtcp != NULL){
251  cDisplayString& disp = dtcp->getDisplayString();
252 
253  disp.setTagArg("p", 0, 70);
254  disp.setTagArg("p", 1, 210);
255 
256  }
257 
258  return efcpi;
259 }
260 
261 DTCP* EFCP::createDTCP(cModule* efcpiModule, const EFCPPolicySet* efcpPolicySet, const QoSCube* qosCube)
262 {
263  cModuleType* dtcpType = cModuleType::get(MOD_DTCP_PATH);
264  DTCP* dtcpModule = (DTCP*) dtcpType->create(MOD_DTCP, efcpiModule);
265 
266  int verticalIndex = 4;
267  dtcpModule->setRcvrFcPolicy((RcvrFCPolicyBase*) createPolicyModule(RCVR_FC_POLICY_PREFIX, efcpPolicySet->getRcvrFc(), RCVR_FC_POLICY_NAME, efcpiModule, verticalIndex++));
268  dtcpModule->setRcvrAckPolicy((RcvrAckPolicyBase*) createPolicyModule(RCVR_ACK_POLICY_PREFIX, efcpPolicySet->getRcvrAck(), RCVR_ACK_POLICY_NAME, efcpiModule, verticalIndex++));
270  dtcpModule->setSendingAckPolicy((SendingAckPolicyBase*) createPolicyModule(SENDING_ACK_POLICY_PREFIX, efcpPolicySet->getSendingAck(), SENDING_ACK_POLICY_NAME, efcpiModule, verticalIndex++));
273  dtcpModule->setSenderAckPolicy((SenderAckPolicyBase*) createPolicyModule(SENDER_ACK_POLICY_PREFIX, efcpPolicySet->getSenderAck(), SENDER_ACK_POLICY_NAME, efcpiModule, verticalIndex++));
277  dtcpModule->setTxControlPolicy((TxControlPolicyBase*) createPolicyModule(TX_CONTROL_POLICY_PREFIX, efcpPolicySet->getTxControl(), TX_CONTROL_POLICY_NAME, efcpiModule, verticalIndex++));
282  dtcpModule->setECNPolicy( (ECNPolicyBase*) createPolicyModule(ECN_POLICY_PREFIX, efcpPolicySet->getEcn(), ECN_POLICY_NAME, efcpiModule, verticalIndex++));
284 // dtcpModule->setEcnSlowDownPolicy( (DTCPECNSlowDownPolicyBase*) createPolicyModule(ECN_SLOW_DOWN_POLICY_PREFIX, ECN_SLOW_DOWN_POLICY_NAME);
285 
286 
287  // efcpiModule->par("rttEstimatorPolicyName").setStringValue(efcpPolicySet->getRttEstimat());
288 
289 
290  dtcpModule->finalizeParameters();
291  dtcpModule->buildInside();
292  dtcpModule->scheduleStart(simTime());
293 
294  cModuleType* dtcpStateType = cModuleType::get(MOD_DTCP_STATE_PATH);
295 
296  DTCPState* dtcpState = (DTCPState*)dtcpStateType->create(MOD_DTCP_STATE, efcpiModule);
297  dtcpState->setQoSCube(qosCube);
298  dtcpState->finalizeParameters();
299  dtcpState->buildInside();
300  dtcpState->scheduleStart(simTime());
301 
302  dtcpModule->setDtcpState(dtcpState);
303 
304 
305 // dtcpModule->callInitialize();
306 
307  return dtcpModule;
308 }
309 
318 cModule* EFCP::createPolicyModule(const char* prefix, const char* name, const char* policy, cModule* parent, int verticalIndex)
319 {
320 
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());
328 
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);
333 
334 // return policyType->createScheduleInit(policy, parent);
335  return module;
336 
337 }
338 
339 
340 Delimiting* EFCP::createDelimiting(cModule* efcpiModule, int portId){
341 
342  std::ostringstream name;
343  name << DELIMITING_MODULE_NAME << "_" << portId;
344  //0. Create Delimiting module within EFCPModule
345  cModuleType* delimitType = cModuleType::get(MOD_DELIMITING_PATH);
346 
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();
352 
353  return delimit;
354 }
361 {
362  EFCPTableEntry* entry;
363  if((entry = efcpTable->getEntryByFlow(flow)) == NULL){
364 
365  EV << getFullPath() << ": failed to found EFCPTableEntry by Flow to deallocate EFCPI" << endl;
366  return false;
367  }
368 
369 // entry->flushDTPs();
370  entry->getDelimit()->callFinish();
371  entry->getDelimit()->deleteModule();
372  for(;!entry->getEfcpiTab()->empty();){
373  entry->getEfcpiTab()->front()->getDtp()->getParentModule()->callFinish();
374  entry->getEfcpiTab()->front()->getDtp()->getParentModule()->deleteModule();
375 // delete entry->getEfcpiTab()->front()->getDtcp()->deleteModule();
376  entry->getEfcpiTab()->erase(entry->getEfcpiTab()->begin());
377 
378  }
379 
380 
381  return true;
382 
383 
384 }
385 
#define NO_RATE_SLOW_DOWN_POLICY_PREFIX
Definition: EFCP.cc:69
Class representing flow object with attributes from specs.
Definition: Flow.h:45
bool isDTCPNeeded() const
Returns true if DTCP module is needed in order to support this QoScube.
Definition: QoSCube.cc:396
EFCPTableEntry * getEntryByFlow(const Flow *flow)
Definition: EFCPTable.cc:74
#define SENDING_ACK_POLICY_NAME
Definition: EFCP.cc:46
Delimiting * createDelimiting(cModule *efcpi, int portId)
Definition: EFCP.cc:340
const char * MOD_RESALLOC
Definition: ExternConsts.cc:58
#define LOST_CONTROL_PDU_POLICY_NAME
Definition: EFCP.cc:49
void setSndFcOverrunPolicy(SndFCOverrunPolicyBase *sndFcOverrunPolicy)
Definition: DTCP.cc:711
#define RCVR_CONTROL_ACK_POLICY_NAME
Definition: EFCP.cc:52
virtual void initialize(int step)
Definition: EFCP.cc:111
const char * getRttEstimat() const
EFCP()
Definition: EFCP.cc:103
const char * getRxTimerExpiry() const
DTCP * createDTCP(cModule *efcpi, const EFCPPolicySet *efcpPolicySet, const QoSCube *qosCube)
Definition: EFCP.cc:261
const char * getLostControlPdu() const
#define ECN_POLICY_NAME
Definition: EFCP.cc:98
#define ECN_SLOW_DOWN_POLICY_NAME
Definition: EFCP.cc:101
const char * MOD_DTCP_STATE
Definition: ExternConsts.cc:37
const EFCPPolicySet * getEfcpPolicies() const
Definition: QoSCube.cc:473
const char * getInitialSeqNum() const
#define NO_RATE_SLOW_DOWN_POLICY_NAME
Definition: EFCP.cc:70
const char * MOD_DTCP_STATE_PATH
Definition: ExternConsts.cc:85
const char * GATE_RMT_
void setRcvrControlAckPolicy(RcvrControlAckPolicyBase *rcvrControlAckPolicy)
Definition: DTCP.cc:741
TEFCPITab * getEfcpiTab()
const char * MOD_DTP_STATE
Definition: ExternConsts.cc:39
#define RECEIVING_FC_POLICY_PREFIX
Definition: EFCP.cc:42
const char * MOD_EFCPTABLE
Definition: ExternConsts.cc:42
std::string getQoSId() const
Getter of selected QoS-cube identifier.
Definition: ConnectionId.cc:44
Delimiting * getDelimit() const
#define RATE_REDUCTION_POLICY_PREFIX
Definition: EFCP.cc:75
const char * MOD_DELIMITING_PATH
Definition: ExternConsts.cc:86
#define RCVR_FC_POLICY_NAME
Definition: EFCP.cc:37
void insertEntry(EFCPTableEntry *entry)
Definition: EFCPTable.cc:129
void setSendingAckPolicy(SendingAckPolicyBase *sendingAckPolicy)
Definition: DTCP.cc:771
#define SND_FC_OVERRUN_POLICY_PREFIX
Definition: EFCP.cc:57
#define RCVR_ACK_POLICY_NAME
Definition: EFCP.cc:40
void setDelimit(Delimiting *delimit)
#define ECN_POLICY_PREFIX
Definition: EFCP.cc:97
cModule * createPolicyModule(const char *prefix, const char *name, const char *policy, cModule *parent, int verticalIndex=1)
Definition: EFCP.cc:318
#define RATE_REDUCTION_POLICY_NAME
Definition: EFCP.cc:76
EFCPInstance * createEFCPI(const Flow *flow, int cepId, int portId)
Definition: EFCP.cc:128
#define TX_CONTROL_POLICY_NAME
Definition: EFCP.cc:67
#define GATE_DELIMIT_SOUTHIO
Definition: Delimiting.h:43
#define RECONCILE_FC_POLICY_NAME
Definition: EFCP.cc:73
#define GATE_DELIMIT_NORTHIO
Definition: Delimiting.h:42
Definition: DTCP.h:63
const char * GATE_EFCPI_NORTHIO
#define RX_TIMER_EXPIRY_POLICY_PREFIX
Definition: EFCP.cc:94
const char * GATE_APPIO_
const char * getReconcileFc() const
#define TX_CONTROL_POLICY_PREFIX
Definition: EFCP.cc:66
#define RCVR_CONTROL_ACK_POLICY_PREFIX
Definition: EFCP.cc:51
const char * getEcn() const
const char * getReceivingFc() const
#define NO_OVERRIDE_PEAK_POLICY_NAME
Definition: EFCP.cc:64
LisEFCPCongestFromRA * lisEFCPCongestFromRA
Definition: EFCP.h:91
const char * getSenderAck() const
const char * getSndFcOverrun() const
#define RECEIVING_FC_POLICY_NAME
Definition: EFCP.cc:43
void setNoOverridePeakPolicy(NoOverridePeakPolicyBase *noOverridePeakPolicy)
Definition: DTCP.cc:721
void setQoSCube(const QoSCube *&qoSCube)
Definition: DTPState.cc:448
Definition: EFCP.h:54
const char * getTxControl() const
const char * SIG_RA_ExecuteSlowdown
Definition: RINASignals.cc:119
#define RCVR_FC_POLICY_PREFIX
Definition: EFCP.cc:36
EFCPTable * efcpTable
Definition: EFCP.h:86
const char * getRcvrAck() const
void setRcvrAckPolicy(RcvrAckPolicyBase *rcvrAckPolicy)
Definition: DTCP.cc:736
const char * getRcvrFc() const
#define SENDER_ACK_POLICY_PREFIX
Definition: EFCP.cc:54
void setECNSlowDownPolicy(ECNSlowDownPolicyBase *ecnSlowDownPolicy)
Definition: DTCP.cc:786
void setRxTimerExpiryPolicy(RxTimerExpiryPolicyBase *rxTimerExpiryPolicy)
Definition: DTCP.cc:761
void setRateReductionPolicy(RateReductionPolicyBase *rateReductionPolicy)
Definition: DTCP.cc:731
const char * MOD_DTCP_PATH
Definition: ExternConsts.cc:84
void initGates()
Definition: Delimiting.cc:52
void setDtp(DTP *dtp)
Definition: EFCPInstance.cc:58
RA * resourceAllocator
Definition: EFCP.h:87
void setQoSCube(const QoSCube *&qoSCube)
Definition: DTCPState.cc:493
const char * getSenderInactiv() const
#define DELIMITING_MODULE_NAME
Definition: Delimiting.h:40
#define NO_OVERRIDE_PEAK_POLICY_PREFIX
Definition: EFCP.cc:63
const char * MOD_EFCPI
Definition: ExternConsts.cc:41
void setRcvrFcPolicy(RcvrFCPolicyBase *rcvrFcPolicy)
Definition: DTCP.cc:746
#define SENDER_ACK_POLICY_NAME
Definition: EFCP.cc:55
const char * getNoRateSlowDown() const
Definition: RA.h:61
#define RCVR_ACK_POLICY_PREFIX
Definition: EFCP.cc:39
#define RECONCILE_FC_POLICY_PREFIX
Definition: EFCP.cc:72
#define LOST_CONTROL_PDU_POLICY_PREFIX
Definition: EFCP.cc:48
void setECNPolicy(ECNPolicyBase *ecnPolicy)
Definition: DTCP.cc:781
void addEFCPI(EFCPInstance *efcpi)
#define ECN_SLOW_DOWN_POLICY_PREFIX
Definition: EFCP.cc:100
void setTxControlPolicy(TxControlPolicyBase *txControlPolicy)
Definition: DTCP.cc:776
void setReceivingFcPolicy(ReceivingFCPolicyBase *receivingFcPolicy)
Definition: DTCP.cc:751
Class representing QoSCube with all its properties that is primarily used by FA, RMT and RA Specifica...
Definition: QoSCube.h:57
const ConnectionId & getConId() const
Gets read-only Flow's ConnectionId.
Definition: Flow.cc:86
const char * MOD_RA
Definition: ExternConsts.cc:55
const char * MOD_DTCP
Definition: ExternConsts.cc:36
const char * getSendingAck() const
bool deleteEFCPI(Flow *flow)
Definition: EFCP.cc:360
DTCP * getDtcp()
Definition: EFCPInstance.cc:40
#define RCV_FC_OVERRUN_POLICY_NAME
Definition: EFCP.cc:61
virtual ~EFCP()
Definition: EFCP.cc:107
void setReconcileFcPolicy(ReconcileFCPolicyBase *reconcileFcPolicy)
Definition: DTCP.cc:756
void setDtcp(DTCP *dtcp)
Definition: EFCPInstance.cc:45
LisEFCPQueueInfoFromAE * lisEFCPQueueInfoFromAE
Definition: EFCP.h:92
void setSenderAckPolicy(SenderAckPolicyBase *senderAckPolicy)
Definition: DTCP.cc:766
#define RCV_FC_OVERRUN_POLICY_PREFIX
Definition: EFCP.cc:60
const char * MOD_DTP
Definition: ExternConsts.cc:38
Define_Module(EFCP)
void setFlow(const Flow *flow)
Definition: DTP.cc:1769
const char * getRcvrControlAck() const
#define SND_FC_OVERRUN_POLICY_NAME
Definition: EFCP.cc:58
void setRcvFcOverrunPolicy(RcvFCOverrunPolicyBase *rcvFcOverrunPolicy)
Definition: DTCP.cc:97
#define RX_TIMER_EXPIRY_POLICY_NAME
Definition: EFCP.cc:95
#define SENDING_ACK_POLICY_PREFIX
Definition: EFCP.cc:45
void setNoRateSlowDownPolicy(NoRateSlowDownPolicyBase *noRateSlowDownPolicy)
Definition: DTCP.cc:726
const char * getRateReduction() const
const char * getEcnSlowDown() const
const char * getNoOverridePeak() const
void setDtcpState(DTCPState *dtcpState)
Definition: DTCP.cc:791
const char * MOD_EFCPI_PATH
Definition: ExternConsts.cc:81
const char * getRcvrInactiv() const
void setState(DTPState *state)
Definition: DTP.cc:1783
void setLostControlPduPolicy(LostControlPDUPolicyBase *lostControlPduPolicy)
Definition: DTCP.cc:716
Definition: DTP.h:60
const char * SIG_Socket_QueueInfo
Definition: RINASignals.cc:43
const char * getRcvFcOverrun() const
void setFlow(const Flow *flow)
const QoSCube * getQoSCubeById(std::string qosId) const
Definition: RABase.cc:47
const char * GATE_EFCPI_SOUTHIO