|
INET Framework for OMNeT++/OMNEST
|
Implements TCP NewReno.
More...
#include <TcpNewReno.h>
|
| | TcpNewReno () |
| | Ctor. More...
|
| |
| virtual void | receivedDataAck (uint32_t firstSeqAcked) override |
| | Redefine what should happen when data got acked, to add congestion window management. More...
|
| |
| virtual void | receivedDuplicateAck () override |
| | Redefine what should happen when dupAck was received, to add congestion window management. More...
|
| |
| | TcpTahoeRenoFamily () |
| | Ctor. More...
|
| |
| void | initialize () override |
| | Create timers, etc. More...
|
| |
| | TcpBaseAlg () |
| | Ctor. More...
|
| |
| virtual | ~TcpBaseAlg () |
| | Virtual dtor. More...
|
| |
| virtual void | established (bool active) override |
| | Called when the connection is going to ESTABLISHED from SYN_SENT or SYN_RCVD. More...
|
| |
| virtual void | connectionClosed () override |
| | Called when the connection closes, it should cancel all running timers. More...
|
| |
| virtual void | processTimer (cMessage *timer, TcpEventCode &event) override |
| | Process REXMIT, PERSIST, DELAYED-ACK and KEEP-ALIVE timers. More...
|
| |
| virtual void | sendCommandInvoked () override |
| | Called after user sent TCP_C_SEND command to us. More...
|
| |
| virtual void | receivedOutOfOrderSegment () override |
| | Called after receiving data which are in the window, but not at its left edge (seq != rcv_nxt). More...
|
| |
| virtual void | receiveSeqChanged () override |
| | Called after rcv_nxt got advanced, either because we received in-sequence data ("text" in RFC 793 lingo) or a FIN. More...
|
| |
| virtual void | receivedAckForDataNotYetSent (uint32_t seq) override |
| | Called after we received an ACK for data not yet sent. More...
|
| |
| virtual void | ackSent () override |
| | Called after we sent an ACK. More...
|
| |
| virtual void | dataSent (uint32_t fromseq) override |
| | Called after we sent data. More...
|
| |
| virtual void | segmentRetransmitted (uint32_t fromseq, uint32_t toseq) override |
| | Called after we retransmitted segment. More...
|
| |
| virtual void | restartRexmitTimer () override |
| | Restart REXMIT timer. More...
|
| |
| virtual bool | shouldMarkAck () override |
| | Called before sending ACK. More...
|
| |
| virtual void | processEcnInEstablished () override |
| | Called before processing segment in established state. More...
|
| |
| | TcpAlgorithm () |
| | Ctor. More...
|
| |
| virtual | ~TcpAlgorithm () |
| | Virtual dtor. More...
|
| |
| void | setConnection (TcpConnection *_conn) |
| | Assign this object to a TcpConnection. More...
|
| |
| TcpStateVariables * | getStateVariables () |
| | Creates and returns the TCP state variables. More...
|
| |
|
| static simsignal_t | cwndSignal = cComponent::registerSignal("cwnd") |
| |
| static simsignal_t | ssthreshSignal = cComponent::registerSignal("ssthresh") |
| |
| static simsignal_t | rttSignal = cComponent::registerSignal("rtt") |
| |
| static simsignal_t | srttSignal = cComponent::registerSignal("srtt") |
| |
| static simsignal_t | rttvarSignal = cComponent::registerSignal("rttvar") |
| |
| static simsignal_t | rtoSignal = cComponent::registerSignal("rto") |
| |
| static simsignal_t | numRtosSignal = cComponent::registerSignal("numRtos") |
| |
◆ TcpNewReno()
| inet::tcp::TcpNewReno::TcpNewReno |
( |
| ) |
|
◆ createStateVariables()
|
|
inlineoverrideprotectedvirtual |
◆ processRexmitTimer()
| void inet::tcp::TcpNewReno::processRexmitTimer |
( |
TcpEventCode & |
event | ) |
|
|
overrideprotectedvirtual |
Redefine what should happen on retransmission.
Reimplemented from inet::tcp::TcpBaseAlg.
60 EV_INFO <<
"Loss Recovery terminated.\n";
81 EV_INFO <<
"Begin Slow Start: resetting cwnd to " <<
state->
snd_cwnd
◆ recalculateSlowStartThreshold()
| void inet::tcp::TcpNewReno::recalculateSlowStartThreshold |
( |
| ) |
|
|
protectedvirtual |
◆ receivedDataAck()
| void inet::tcp::TcpNewReno::receivedDataAck |
( |
uint32_t |
firstSeqAcked | ) |
|
|
overridevirtual |
Redefine what should happen when data got acked, to add congestion window management.
Reimplemented from inet::tcp::TcpBaseAlg.
121 EV_INFO <<
"Fast Recovery - Full ACK received: Exit Fast Recovery, setting cwnd to " <<
state->
snd_cwnd <<
"\n";
130 EV_INFO <<
"Loss Recovery terminated.\n";
155 EV_INFO <<
"Fast Recovery - Partial ACK received: retransmitting the first unacknowledged segment\n";
164 EV_INFO <<
"Fast Recovery: deflating cwnd by amount of new data acknowledged, new cwnd=" <<
state->
snd_cwnd <<
"\n";
172 EV_DETAIL <<
"Fast Recovery: inflating cwnd by SMSS, new cwnd=" <<
state->
snd_cwnd <<
"\n";
182 EV_DETAIL <<
"First partial ACK arrived during recovery, restarting REXMIT timer.\n";
193 EV_DETAIL <<
"cwnd <= ssthresh: Slow Start: increasing cwnd by SMSS bytes to ";
233 EV_DETAIL <<
"cwnd > ssthresh: Congestion Avoidance: increasing cwnd linearly, to " <<
state->
snd_cwnd <<
"\n";
◆ receivedDuplicateAck()
| void inet::tcp::TcpNewReno::receivedDuplicateAck |
( |
| ) |
|
|
overridevirtual |
Redefine what should happen when dupAck was received, to add congestion window management.
Reimplemented from inet::tcp::TcpBaseAlg.
269 EV_INFO <<
"NewReno on dupAcks == DUPTHRESH(=" <<
state->
dupthresh <<
": perform Fast Retransmit, and enter Fast Recovery:";
304 EV_INFO <<
"NewReno on dupAcks == DUPTHRESH(=" <<
state->
dupthresh <<
": not invoking Fast Retransmit and Fast Recovery\n";
314 EV_INFO <<
"NewReno on dupAcks == DUPTHRESH(=" <<
state->
dupthresh <<
": TCP is already in Fast Recovery procedure\n";
328 EV_DETAIL <<
"NewReno on dupAcks > DUPTHRESH(=" <<
state->
dupthresh <<
": Fast Recovery: inflating cwnd by SMSS, new cwnd=" <<
state->
snd_cwnd <<
"\n";
◆ state
The documentation for this class was generated from the following files:
static simsignal_t cwndSignal
Definition: TcpBaseAlg.h:101
virtual void processRexmitTimer(TcpEventCode &event)
Definition: TcpBaseAlg.cc:208
uint32_t ssthresh
slow start threshold
Definition: TcpTahoeRenoFamily.h:27
uint32_t snd_cwnd
congestion window
Definition: TcpBaseAlg.h:40
bool firstPartialACK
first partial acknowledgement (RFC 3782)
Definition: TcpBaseAlg.h:63
double min(const double a, const double b)
Returns the minimum of a and b.
Definition: SctpAssociation.h:261
uint32_t dupacks
Definition: TcpConnection.h:236
uint32_t dupthresh
Definition: TcpConnection.h:261
uint32_t snd_wnd
Definition: TcpConnection.h:150
virtual void receivedDuplicateAck() override
Called after we received a duplicate ACK (that is: ackNo == snd_una, no data in segment,...
Definition: TcpBaseAlg.cc:565
bool lossRecovery
Definition: TcpConnection.h:229
TcpConnection * conn
Definition: TcpAlgorithm.h:26
virtual void receivedDataAck(uint32_t firstSeqAcked) override
Called after we received an ACK which acked some data (that is, we could advance snd_una).
Definition: TcpBaseAlg.cc:483
bool afterRto
Definition: TcpConnection.h:194
bool seqGE(uint32_t a, uint32_t b)
Definition: TcpHeader.h:24
double max(const double a, const double b)
Returns the maximum of a and b.
Definition: SctpAssociation.h:266
TcpTahoeRenoFamilyStateVariables TcpNewRenoStateVariables
State variables for TcpNewReno.
Definition: TcpNewReno.h:18
uint32_t snd_mss
Definition: TcpConnection.h:142
uint32_t recover
RFC 3782 variables.
Definition: TcpBaseAlg.h:62
@ TCP_E_ABORT
Definition: TcpConnection.h:75
virtual void restartRexmitTimer() override
Restart REXMIT timer.
Definition: TcpBaseAlg.cc:628
virtual bool sendData(bool sendCommandInvoked)
Send data, observing Nagle's algorithm and congestion window.
Definition: TcpBaseAlg.cc:398
virtual void retransmitOneSegment(bool called_at_rto)
Utility: retransmit one segment from snd_una.
Definition: TcpConnectionUtil.cc:960
TcpNewRenoStateVariables *& state
Definition: TcpNewReno.h:26
virtual void recalculateSlowStartThreshold()
Utility function to recalculate ssthresh.
Definition: TcpNewReno.cc:23
uint32_t snd_una
Definition: TcpConnection.h:147
TcpStateVariables * state
Definition: TcpAlgorithm.h:27
static simsignal_t ssthreshSignal
Definition: TcpBaseAlg.h:102
TcpTahoeRenoFamily()
Ctor.
Definition: TcpTahoeRenoFamily.cc:45
uint32_t snd_max
Definition: TcpConnection.h:149