RINASim  October 2016
Documentation of framework for OMNeT++
DTCP.h
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  * DTCP.h
24  *
25  * Created on: Apr 17, 2014
26  * Author: Marcel Marek
27  */
28 
29 #ifndef DTCP_H_
30 #define DTCP_H_
31 
32 #include <omnetpp.h>
33 
34 //#include "RXControl.h"
35 #include "DTCPState.h"
36 #include "DTPState.h"
37 #include "DTP.h"
38 #include "EFCP_defs.h"
39 #include "ControlPDU_m.h"
40 #include "DTCPTimers_m.h"
41 
42 /* Policies */
43 #include "ECNPolicyBase.h"
44 #include "RcvrFCPolicyBase.h"
45 #include "RcvrAckPolicyBase.h"
46 #include "ReceivingFCPolicyBase.h"
47 #include "SendingAckPolicyBase.h"
50 #include "SenderAckPolicyBase.h"
51 #include "SndFCOverrunPolicyBase.h"
52 #include "RcvFCOverrunPolicyBase.h"
54 #include "TxControlPolicyBase.h"
56 #include "ReconcileFCPolicyBase.h"
58 #include "ECNSlowDownPolicyBase.h"
60 
61 class DTP;
62 
63 class DTCP: public cSimpleModule {
64  friend class DTP;
65  private:
66 
67  DTP* dtp;
69 // FlowControl* flowControl;
70 // RXControl* rxControl;
71 
89 
90 
91 
92  /*Timers*/
93 // WindowTimer* windowTimer;
95 
96  void schedule(DTCPTimers *timer, double time = 0.0);
97 // void resetWindowTimer();
98 
99  void sendAckPDU();
101 
103  void handleRendezvousTimer(DTCPRendezvousTimer* rendezTimer);
104  void startReliableCPDUTimer();
105  void stopReliableCPDUTimer();
106 
107 
108 public:
109  void deleteRxTimer(unsigned int seqNum);
110  DTCP();
111  virtual ~DTCP();
112 
113  void setDTP(DTP* dtp);
114 
115  DTCPState* getDTCPState() const;
116 
117 
118 // void handleWindowTimer(WindowTimer* timer);
120 
121 
122  void updateRcvRtWinEdge(DTPState* dtpState);
123 
124  unsigned int getNextSndCtrlSeqNum();
125  unsigned int getLastCtrlSeqNumRcv();
126  void setLastCtrlSeqnumRcvd(unsigned int ctrlSeqNum);
127 
128 
129  void setSndRtWinEdge(unsigned int sndRtWinEdge);
130  unsigned int getSndRtWinEdge();
131  void setRcvRtWinEdge(unsigned int rcvRtWinEdge);
132  unsigned int getRcvRightWinEdge();
133 
134  unsigned int getRcvCredit();
135 
136  unsigned long getSendingTimeUnit();
137 
138  bool isSendingRateFullfilled() const;
139  void setSendingRateFullfilled(bool rateFullfilled);
140 
141  void incRcvRtWinEdge();
142 
143  void nackPDU(unsigned int startSeqNum, unsigned int endSeqNum = 0);
144  void ackPDU(unsigned int startSeqNum, unsigned int endSeqNum = 0);
145 
146  void pushBackToRxQ(DataTransferPDU* pdu);
147  void clearRxQ();
148  unsigned int getDataReXmitMax() const;
149 
150  unsigned int getPdusSentInTimeUnit() const;
151  void setPdusSentInTimeUnit(unsigned int pdusSentInTimeUnit);
152  void incPdusSentInTimeUnit();
153 
154  unsigned int getPdusRcvdInTimeUnit() const;
155 
156 
157  unsigned int getSendingRate() const;
158  void setSendingRate(unsigned int sendingRate);
159 
160  unsigned int getRcvrRate() const;
161 
162  void incDupAcks();
163  unsigned int getDupAcks() const;
164 
165  void incDupFC();
166  unsigned int getDupFC() const;
167 
168  unsigned int getSndLeftWinEdge() const;
169  void setSenderLeftWinEdge(unsigned int senderLeftWinEdge);
170  void updateSenderLWE(unsigned int seqNum);
171 
172  /* Run Policies */
173  bool runECNPolicy(DTPState* dtpState);
174  bool runRcvrFCPolicy(DTPState* dtpState);
175  bool runRcvrAckPolicy(DTPState* dtpState);
176  bool runReceivingFCPolicy(DTPState* dtpState);
177  bool runSendingAckPolicy(DTPState* dtpState, ATimer* timer);
178  bool runLostControlPDUPolicy(DTPState* dtpState);
179  bool runRcvrControlAckPolicy(DTPState* dtpState);
180  bool runSenderAckPolicy(DTPState* dtpState);
181  bool runSndFCOverrunPolicy(DTPState* dtpState);
182  bool runRcvFCOverrunPolicy(DTPState* dtpState);
183  bool runNoOverridePeakPolicy(DTPState* dtpState);
184  bool runTxControlPolicy(DTPState* dtpState, PDUQ_t* pduQ);
185  bool runNoRateSlowDownPolicy(DTPState* dtpState);
186  bool runReconcileFCPolicy(DTPState* dtpState);
187  bool runRateReductionPolicy(DTPState* dtpState);
188  bool runECNSlowDownPolicy(DTPState* dtpState);
189 
191 
192 
193 
194 
195  void redrawGUI();
196  cModule* createPolicyModule(const char* prefix, const char* name);
197  bool isClosedWinQClosed();
198  void scheduleRxTimerExpiry();
199  void setSndFcOverrunPolicy(SndFCOverrunPolicyBase* sndFcOverrunPolicy);
200  void setLostControlPduPolicy(LostControlPDUPolicyBase* lostControlPduPolicy);
201  void setNoOverridePeakPolicy(NoOverridePeakPolicyBase* noOverridePeakPolicy);
202  void setNoRateSlowDownPolicy(NoRateSlowDownPolicyBase* noRateSlowDownPolicy);
203  void setRateReductionPolicy(RateReductionPolicyBase* rateReductionPolicy);
204  void setRcvrAckPolicy(RcvrAckPolicyBase* rcvrAckPolicy);
205  void setRcvrControlAckPolicy(RcvrControlAckPolicyBase* rcvrControlAckPolicy);
206  void setRcvrFcPolicy(RcvrFCPolicyBase* rcvrFcPolicy);
207  void setReceivingFcPolicy(ReceivingFCPolicyBase* receivingFcPolicy);
208  void setReconcileFcPolicy(ReconcileFCPolicyBase* reconcileFcPolicy);
209  void setRxTimerExpiryPolicy(RxTimerExpiryPolicyBase* rxTimerExpiryPolicy);
210  void setSenderAckPolicy(SenderAckPolicyBase* senderAckPolicy);
211  void setSendingAckPolicy(SendingAckPolicyBase* sendingAckPolicy);
212  void setTxControlPolicy(TxControlPolicyBase* txControlPolicy);
213  void setDtcpState(DTCPState* dtcpState);
214  void setRcvFcOverrunPolicy(RcvFCOverrunPolicyBase* rcvFcOverrunPolicy);
215  void setECNPolicy(ECNPolicyBase* ecnPolicy);
216  void setECNSlowDownPolicy(ECNSlowDownPolicyBase* ecnSlowDownPolicy);
217  void startRendezvousTimer();
218 
219  protected:
220  virtual void handleMessage(cMessage *msg);
221  virtual void initialize(int step);
222  int numInitStages() const
223  {
224  return 2;
225  }
227 
228 
229  //Signals
230  simsignal_t sigStatDTCPRxCount;
231 };
232 
233 #endif /* DTCP_H_ */
bool runSenderAckPolicy(DTPState *dtpState)
Definition: DTCP.cc:216
NoOverridePeakPolicyBase * noOverridePeakPolicy
Definition: DTCP.h:83
void setSndFcOverrunPolicy(SndFCOverrunPolicyBase *sndFcOverrunPolicy)
Definition: DTCP.cc:711
SendingAckPolicyBase * sendingAckPolicy
Definition: DTCP.h:77
RcvFCOverrunPolicyBase * rcvFcOverrunPolicy
Definition: DTCP.h:82
SndFCOverrunPolicyBase * sndFcOverrunPolicy
Definition: DTCP.h:81
void ackPDU(unsigned int startSeqNum, unsigned int endSeqNum=0)
Definition: DTCP.cc:341
void updateSenderLWE(unsigned int seqNum)
Definition: DTCP.cc:706
unsigned int getDupFC() const
Definition: DTCP.cc:696
void redrawGUI()
Definition: DTCP.cc:618
void setRcvrControlAckPolicy(RcvrControlAckPolicyBase *rcvrControlAckPolicy)
Definition: DTCP.cc:741
void setDTP(DTP *dtp)
Definition: DTCP.cc:146
void incRcvRtWinEdge()
Definition: DTCP.cc:162
void setSendingAckPolicy(SendingAckPolicyBase *sendingAckPolicy)
Definition: DTCP.cc:771
bool isClosedWinQClosed()
Definition: DTCP.cc:701
cModule * createPolicyModule(const char *prefix, const char *name)
Definition: DTCP.cc:74
void setRcvRtWinEdge(unsigned int rcvRtWinEdge)
Definition: DTCP.cc:566
RcvrControlAckPolicyBase * rcvrControlAckPolicy
Definition: DTCP.h:79
RateReductionPolicyBase * rateReductionPolicy
Definition: DTCP.h:87
DTCPState * dtcpState
Definition: DTCP.h:68
void startReliableCPDUTimer()
Definition: DTCP.cc:472
void handleRendezvousTimer(DTCPRendezvousTimer *rendezTimer)
Definition: DTCP.cc:461
unsigned int getSendingRate() const
Definition: DTCP.cc:59
DTCPSendingRateTimer sendingRateTimer
Definition: DTCP.h:94
unsigned int getPdusSentInTimeUnit() const
Definition: DTCP.cc:598
bool runRateReductionPolicy(DTPState *dtpState)
Definition: DTCP.cc:273
Definition: DTCP.h:63
bool runRcvrAckPolicy(DTPState *dtpState)
Definition: DTCP.cc:175
void setSendingRate(unsigned int sendingRate)
Definition: DTCP.cc:64
DTP * dtp
Definition: DTCP.h:67
bool runTxControlPolicy(DTPState *dtpState, PDUQ_t *pduQ)
Definition: DTCP.cc:249
bool runECNPolicy(DTPState *dtpState)
Definition: DTCP.cc:151
bool isSendingRateFullfilled() const
Definition: DTCP.cc:588
bool runRcvrControlAckPolicy(DTPState *dtpState)
Definition: DTCP.cc:208
void setSenderLeftWinEdge(unsigned int senderLeftWinEdge)
Definition: DTCP.cc:92
void updateRcvRtWinEdge(DTPState *dtpState)
Definition: DTCP.cc:456
void setNoOverridePeakPolicy(NoOverridePeakPolicyBase *noOverridePeakPolicy)
Definition: DTCP.cc:721
void sendAckPDU()
unsigned long getSendingTimeUnit()
Definition: DTCP.cc:583
void setRcvrAckPolicy(RcvrAckPolicyBase *rcvrAckPolicy)
Definition: DTCP.cc:736
void incDupAcks()
Definition: DTCP.cc:680
void setPdusSentInTimeUnit(unsigned int pdusSentInTimeUnit)
Definition: DTCP.cc:613
ECNSlowDownPolicyBase * ecnSlowDownPolicy
Definition: DTCP.h:73
unsigned int getRcvCredit()
Definition: DTCP.cc:578
unsigned int getSndRtWinEdge()
Definition: DTCP.cc:558
void setECNSlowDownPolicy(ECNSlowDownPolicyBase *ecnSlowDownPolicy)
Definition: DTCP.cc:786
void setRxTimerExpiryPolicy(RxTimerExpiryPolicyBase *rxTimerExpiryPolicy)
Definition: DTCP.cc:761
void setRateReductionPolicy(RateReductionPolicyBase *rateReductionPolicy)
Definition: DTCP.cc:731
bool runRcvrFCPolicy(DTPState *dtpState)
Definition: DTCP.cc:168
bool runReceivingFCPolicy(DTPState *dtpState)
Definition: DTCP.cc:182
RcvrAckPolicyBase * rcvrAckPolicy
Definition: DTCP.h:75
void setSendingRateFullfilled(bool rateFullfilled)
Definition: DTCP.cc:593
std::vector< DataTransferPDU * > PDUQ_t
void stopReliableCPDUTimer()
Definition: DTCP.cc:467
void setRcvrFcPolicy(RcvrFCPolicyBase *rcvrFcPolicy)
Definition: DTCP.cc:746
unsigned int getPdusRcvdInTimeUnit() const
Definition: DTCP.cc:603
virtual ~DTCP()
Definition: DTCP.cc:139
void setECNPolicy(ECNPolicyBase *ecnPolicy)
Definition: DTCP.cc:781
unsigned int getSndLeftWinEdge() const
Definition: DTCP.cc:87
bool runLostControlPDUPolicy(DTPState *dtpState)
Definition: DTCP.cc:200
bool runSendingAckPolicy(DTPState *dtpState, ATimer *timer)
Definition: DTCP.cc:192
unsigned int getRcvrRate() const
Definition: DTCP.cc:69
void incDupFC()
Definition: DTCP.cc:691
void setTxControlPolicy(TxControlPolicyBase *txControlPolicy)
Definition: DTCP.cc:776
unsigned int getRcvRightWinEdge()
Definition: DTCP.cc:573
void scheduleRxTimerExpiry()
Definition: DTCP.cc:436
void setReceivingFcPolicy(ReceivingFCPolicyBase *receivingFcPolicy)
Definition: DTCP.cc:751
bool runReconcileFCPolicy(DTPState *dtpState)
Definition: DTCP.cc:265
RcvrFCPolicyBase * rcvrFCPolicy
Definition: DTCP.h:74
unsigned int getDataReXmitMax() const
Definition: DTCP.cc:406
void incPdusSentInTimeUnit()
Definition: DTCP.cc:608
simsignal_t sigStatDTCPRxCount
Definition: DTCP.h:230
bool runNoRateSlowDownPolicy(DTPState *dtpState)
Definition: DTCP.cc:257
DTCPState * getDTCPState() const
Definition: DTCP.cc:54
void deleteRxTimer(unsigned int seqNum)
Definition: DTCP.cc:324
void setSndRtWinEdge(unsigned int sndRtWinEdge)
Definition: DTCP.cc:552
RxTimerExpiryPolicyBase * rxTimerExpiryPolicy
Definition: DTCP.h:88
void setReconcileFcPolicy(ReconcileFCPolicyBase *reconcileFcPolicy)
Definition: DTCP.cc:756
void nackPDU(unsigned int startSeqNum, unsigned int endSeqNum=0)
Definition: DTCP.cc:292
void startRendezvousTimer()
Definition: DTCP.cc:107
unsigned int getNextSndCtrlSeqNum()
Definition: DTCP.cc:537
void setSenderAckPolicy(SenderAckPolicyBase *senderAckPolicy)
Definition: DTCP.cc:766
unsigned int getDupAcks() const
Definition: DTCP.cc:685
void clearRxQ()
Definition: DTCP.cc:401
ReconcileFCPolicyBase * reconcileFCPolicy
Definition: DTCP.h:86
ReceivingFCPolicyBase * receivingFCPolicy
Definition: DTCP.h:76
void runRxTimerExpiryPolicy(DTCPRxExpiryTimer *timer)
Definition: DTCP.cc:381
SenderAckPolicyBase * senderAckPolicy
Definition: DTCP.h:80
bool runNoOverridePeakPolicy(DTPState *dtpState)
Definition: DTCP.cc:240
void setRcvFcOverrunPolicy(RcvFCOverrunPolicyBase *rcvFcOverrunPolicy)
Definition: DTCP.cc:97
void setLastCtrlSeqnumRcvd(unsigned int ctrlSeqNum)
Definition: DTCP.cc:547
void pushBackToRxQ(DataTransferPDU *pdu)
Definition: DTCP.cc:390
void setNoRateSlowDownPolicy(NoRateSlowDownPolicyBase *noRateSlowDownPolicy)
Definition: DTCP.cc:726
void flushAllQueuesAndPrepareToDie()
Definition: DTCP.cc:133
TxControlPolicyBase * txControlPolicy
Definition: DTCP.h:84
ECNPolicyBase * ecnPolicy
Definition: DTCP.h:72
unsigned int getLastCtrlSeqNumRcv()
Definition: DTCP.cc:542
void schedule(DTCPTimers *timer, double time=0.0)
Definition: DTCP.cc:410
void setDtcpState(DTCPState *dtcpState)
Definition: DTCP.cc:791
NoRateSlowDownPolicyBase * noRateSlowDownPolicy
Definition: DTCP.h:85
bool runSndFCOverrunPolicy(DTPState *dtpState)
Definition: DTCP.cc:225
LostControlPDUPolicyBase * lostControlPDUPolicy
Definition: DTCP.h:78
bool runRcvFCOverrunPolicy(DTPState *dtpState)
Definition: DTCP.cc:233
virtual void handleMessage(cMessage *msg)
Definition: DTCP.cc:482
void setLostControlPduPolicy(LostControlPDUPolicyBase *lostControlPduPolicy)
Definition: DTCP.cc:716
int numInitStages() const
Definition: DTCP.h:222
Definition: DTP.h:60
bool runECNSlowDownPolicy(DTPState *dtpState)
Definition: DTCP.cc:282
void handleSendingRateTimer(DTCPSendingRateTimer *timer)
Definition: DTCP.cc:529
void handleDTCPRxExpiryTimer(DTCPRxExpiryTimer *timer)
Definition: DTCP.cc:373
void initSignalsAndListeners()
Definition: DTCP.cc:102
DTCP()
Definition: DTCP.cc:28
virtual void initialize(int step)
Definition: DTCP.cc:117