Test the behavior of RFC congestion avoidance. More...
Public Member Functions | |
TcpNewRenoCongAvoidNormalTest (uint32_t segmentSize, uint32_t packetSize, uint32_t packets, const TypeId &congControl, const std::string &desc) | |
Constructor. | |
Public Member Functions inherited from ns3::TcpGeneralTest | |
TcpGeneralTest (const std::string &desc) | |
TcpGeneralTest constructor. | |
~TcpGeneralTest () override | |
Public Member Functions inherited from ns3::TestCase | |
TestCase (const TestCase &)=delete | |
virtual | ~TestCase () |
Destructor. | |
std::string | GetName () const |
TestCase & | operator= (const TestCase &)=delete |
Protected Member Functions | |
void | Check () |
Called each RTT (1.0 sec in the testing environment) and check that the overall increment in this RTT is less or equal than 1 MSS. | |
void | ConfigureEnvironment () override |
Change the configuration of the environment. | |
void | ConfigureProperties () override |
Change the configuration of the socket properties. | |
void | CWndTrace (uint32_t oldValue, uint32_t newValue) override |
Tracks the congestion window changes. | |
void | NormalClose (SocketWho who) override |
Socket closed normally. | |
void | PhyDrop (SocketWho who) override |
Link drop. | |
void | QueueDrop (SocketWho who) override |
Drop on the queue. | |
Protected Member Functions inherited from ns3::TcpGeneralTest | |
virtual void | AfterRTOExpired (const Ptr< const TcpSocketState > tcb, SocketWho who) |
Rto has expired. | |
virtual void | BeforeRTOExpired (const Ptr< const TcpSocketState > tcb, SocketWho who) |
Rto has expired. | |
virtual void | BytesInFlightTrace (uint32_t oldValue, uint32_t newValue) |
Bytes in flight changes. | |
virtual void | CongStateTrace (const TcpSocketState::TcpCongState_t oldValue, const TcpSocketState::TcpCongState_t newValue) |
State on Ack state machine changes. | |
virtual Ptr< SimpleChannel > | CreateChannel () |
Create and return the channel installed between the two socket. | |
virtual Ptr< ErrorModel > | CreateReceiverErrorModel () |
Create and return the error model to install in the receiver node. | |
virtual Ptr< TcpSocketMsgBase > | CreateReceiverSocket (Ptr< Node > node) |
Create and install the socket to install on the receiver. | |
virtual Ptr< ErrorModel > | CreateSenderErrorModel () |
Create and return the error model to install in the sender node. | |
virtual Ptr< TcpSocketMsgBase > | CreateSenderSocket (Ptr< Node > node) |
Create and install the socket to install on the sender. | |
virtual Ptr< TcpSocketMsgBase > | CreateSocket (Ptr< Node > node, TypeId socketType, TypeId congControl) |
Create a socket. | |
virtual Ptr< TcpSocketMsgBase > | CreateSocket (Ptr< Node > node, TypeId socketType, TypeId congControl, TypeId recoveryAlgorithm) |
Create a socket. | |
virtual void | CWndInflTrace (uint32_t oldValue, uint32_t newValue) |
Tracks the inflated congestion window changes. | |
virtual void | DataSent (uint32_t size, SocketWho who) |
Notifying application for sent data. | |
void | DoConnect () |
Scheduled at 0.0, SENDER starts the connection to RECEIVER. | |
void | DoRun () override |
Execute the tcp test. | |
void | DoTeardown () override |
Teardown the TCP test. | |
virtual void | ErrorClose (SocketWho who) |
Socket closed with an error. | |
virtual void | FinalChecks () |
Performs the (eventual) final checks through test asserts. | |
Time | GetClockGranularity (SocketWho who) |
Get the clock granularity attribute. | |
Time | GetConnTimeout (SocketWho who) |
Get the retransmission time for the SYN segments. | |
uint32_t | GetDelAckCount (SocketWho who) |
Get the number of delayed ack (if present) | |
Time | GetDelAckTimeout (SocketWho who) |
Get the timeout of delayed ack (if present) | |
uint32_t | GetDupAckCount (SocketWho who) |
Get the number of dupack received. | |
SequenceNumber32 | GetHighestTxMark (SocketWho who) |
Get the highest tx mark of the node specified. | |
uint32_t | GetInitialCwnd (SocketWho who) |
Get the initial congestion window. | |
uint32_t | GetInitialSsThresh (SocketWho who) |
Get the initial slow start threshold. | |
Time | GetMinRto (SocketWho who) |
Get the minimum RTO attribute. | |
uint32_t | GetMtu () const |
Get the MTU of the environment. | |
EventId | GetPersistentEvent (SocketWho who) |
Get the persistent event of the selected socket. | |
Time | GetPersistentTimeout (SocketWho who) |
Get the persistent timeout of the selected socket. | |
uint32_t | GetPktCount () const |
Get the number of application packets. | |
Time | GetPktInterval () const |
Get the interval to wait for each packet sent down from application to TCP. | |
uint32_t | GetPktSize () const |
Get the application packet size. | |
Time | GetPropagationDelay () const |
Get the channel Propagation Delay. | |
Ptr< TcpSocketMsgBase > | GetReceiverSocket () |
Get the pointer to a previously created receiver socket. | |
uint32_t | GetReTxThreshold (SocketWho who) |
Get the retransmission threshold. | |
Time | GetRto (SocketWho who) |
Get the retransmission time. | |
Ptr< RttEstimator > | GetRttEstimator (SocketWho who) |
Get the Rtt estimator of the socket. | |
uint32_t | GetRWnd (SocketWho who) |
Get the rWnd of the selected socket. | |
Ptr< TcpRxBuffer > | GetRxBuffer (SocketWho who) |
Get the Rx buffer from selected socket. | |
uint32_t | GetSegSize (SocketWho who) |
Get the segment size of the node specified. | |
Ptr< TcpSocketMsgBase > | GetSenderSocket () |
Get the pointer to a previously created sender socket. | |
Time | GetStartTime () const |
Get the data start time. | |
Ptr< TcpSocketState > | GetTcb (SocketWho who) |
Get the TCB from selected socket. | |
TcpSocket::TcpStates_t | GetTcpState (SocketWho who) |
Get the state of the TCP state machine. | |
Ptr< TcpTxBuffer > | GetTxBuffer (SocketWho who) |
Get the Tx buffer from selected socket. | |
virtual void | HighestTxSeqTrace (SequenceNumber32 oldValue, SequenceNumber32 newValue) |
Highest tx seq changes. | |
virtual void | NextTxSeqTrace (SequenceNumber32 oldValue, SequenceNumber32 newValue) |
Next tx seq changes. | |
virtual void | ProcessedAck (const Ptr< const TcpSocketState > tcb, const TcpHeader &h, SocketWho who) |
Processed ack. | |
virtual void | RateSampleUpdatedTrace (const TcpRateLinux::TcpRateSample &sample) |
Track the rate sample value of TcpRateLinux. | |
virtual void | RateUpdatedTrace (const TcpRateLinux::TcpRateConnection &rate) |
Track the rate value of TcpRateLinux. | |
virtual void | RcvAck (const Ptr< const TcpSocketState > tcb, const TcpHeader &h, SocketWho who) |
Received ack. | |
virtual void | ReceivePacket (Ptr< Socket > socket) |
Packet received. | |
virtual void | RtoTrace (Time oldValue, Time newValue) |
RTO changes. | |
virtual void | RttTrace (Time oldTime, Time newTime) |
Rtt changes. | |
virtual void | Rx (const Ptr< const Packet > p, const TcpHeader &h, SocketWho who) |
Packet received from IP layer. | |
void | SendPacket (Ptr< Socket > socket, uint32_t pktSize, uint32_t pktCount, Time pktInterval) |
Send packets to other endpoint. | |
void | SetAppPktCount (uint32_t pktCount) |
Set app packet count. | |
void | SetAppPktInterval (Time pktInterval) |
Interval between app-generated packet. | |
void | SetAppPktSize (uint32_t pktSize) |
Set app packet size. | |
void | SetCongestionControl (TypeId congControl) |
Congestion control of the sender socket. | |
void | SetDelAckMaxCount (SocketWho who, uint32_t count) |
Forcefully set the delayed acknowledgement count. | |
void | SetInitialCwnd (SocketWho who, uint32_t initialCwnd) |
Forcefully set the initial cwnd. | |
void | SetInitialSsThresh (SocketWho who, uint32_t initialSsThresh) |
Forcefully set the initial ssthresh. | |
void | SetMTU (uint32_t mtu) |
MTU of the bottleneck link. | |
void | SetPaceInitialWindow (SocketWho who, bool paceWindow) |
Enable or disable pacing of the initial window. | |
void | SetPacingStatus (SocketWho who, bool pacing) |
Enable or disable pacing in the TCP socket. | |
void | SetPropagationDelay (Time propDelay) |
Propagation delay of the bottleneck link. | |
void | SetRcvBufSize (SocketWho who, uint32_t size) |
Forcefully set a defined size for rx buffer. | |
void | SetRecoveryAlgorithm (TypeId recovery) |
recovery algorithm of the sender socket | |
void | SetSegmentSize (SocketWho who, uint32_t segmentSize) |
Forcefully set the segment size. | |
void | SetTransmitStart (Time startTime) |
Set the initial time at which the application sends the first data packet. | |
void | SetUseEcn (SocketWho who, TcpSocketState::UseEcn_t useEcn) |
Forcefully set the ECN mode of use. | |
virtual void | SsThreshTrace (uint32_t oldValue, uint32_t newValue) |
Slow start threshold changes. | |
virtual void | Tx (const Ptr< const Packet > p, const TcpHeader &h, SocketWho who) |
Packet transmitted down to IP layer. | |
virtual void | UpdatedRttHistory (const SequenceNumber32 &seq, uint32_t sz, bool isRetransmission, SocketWho who) |
Updated the Rtt history. | |
Protected Member Functions inherited from ns3::TestCase | |
TestCase (std::string name) | |
Constructor. | |
void | AddTestCase (TestCase *testCase, Duration duration=Duration::QUICK) |
Add an individual child TestCase to this test suite. | |
TestCase * | GetParent () const |
Get the parent of this TestCase. | |
bool | IsStatusFailure () const |
Check if any tests failed. | |
bool | IsStatusSuccess () const |
Check if all tests passed. | |
void | SetDataDir (std::string directory) |
Set the data directory where reference trace files can be found. | |
void | ReportTestFailure (std::string cond, std::string actual, std::string limit, std::string message, std::string file, int32_t line) |
Log the failure of this TestCase. | |
bool | MustAssertOnFailure () const |
Check if this run should assert on failure. | |
bool | MustContinueOnFailure () const |
Check if this run should continue on failure. | |
std::string | CreateDataDirFilename (std::string filename) |
Construct the full path to a file in the data directory. | |
std::string | CreateTempDirFilename (std::string filename) |
Construct the full path to a file in a temporary directory. | |
Private Attributes | |
EventId | m_event |
Check event. | |
uint32_t | m_increment |
Congestion window increment. | |
bool | m_initial |
True on first run. | |
uint32_t | m_packets |
Number of packets. | |
uint32_t | m_packetSize |
Size of the packets. | |
uint32_t | m_segmentSize |
Segment size. | |
Additional Inherited Members | |
Public Types inherited from ns3::TcpGeneralTest | |
enum | SocketWho { SENDER , RECEIVER } |
Used as parameter of methods, specifies on what node the caller is interested (e.g. More... | |
Public Types inherited from ns3::TestCase | |
enum class | Duration { QUICK = 1 , EXTENSIVE = 2 , TAKES_FOREVER = 3 } |
How long the test takes to execute. More... | |
Static Public Attributes inherited from ns3::TestCase | |
static constexpr auto | QUICK = Duration::QUICK |
Deprecated test duration simple enums. | |
static constexpr auto | EXTENSIVE = Duration::EXTENSIVE |
static constexpr auto | TAKES_FOREVER = Duration::TAKES_FOREVER |
Protected Attributes inherited from ns3::TcpGeneralTest | |
TypeId | m_congControlTypeId |
Congestion control. | |
TypeId | m_recoveryTypeId |
Recovery. | |
Test the behavior of RFC congestion avoidance.
From RFC 5681:
cwnd += min (N, SMSS) (2)
During congestion avoidance, cwnd is incremented by roughly 1 full- sized segment per round-trip time (RTT). Congestion avoidance continues until congestion is detected. The basic guidelines for incrementing cwnd during congestion avoidance are:
To test this behavior and these points, a tracing callback is attached to the cWnd. Each time it increases, the increment is saved. Meanwhile, a timer checks if an amount of time equals to the RTT has passed, and if yes, it checks that the increment has not passed the 1 MSS limit.
Definition at line 43 of file tcp-cong-avoid-test.cc.
TcpNewRenoCongAvoidNormalTest::TcpNewRenoCongAvoidNormalTest | ( | uint32_t | segmentSize, |
uint32_t | packetSize, | ||
uint32_t | packets, | ||
const TypeId & | congControl, | ||
const std::string & | desc ) |
Constructor.
segmentSize | Segment size. |
packetSize | Size of the packets. |
packets | Number of packets. |
congControl | Type of congestion control. |
desc | The test description. |
Definition at line 83 of file tcp-cong-avoid-test.cc.
References ns3::TcpGeneralTest::m_congControlTypeId.
|
protected |
Called each RTT (1.0 sec in the testing environment) and check that the overall increment in this RTT is less or equal than 1 MSS.
Definition at line 145 of file tcp-cong-avoid-test.cc.
References Check(), ns3::TcpGeneralTest::GetSegSize(), m_event, m_increment, NS_TEST_ASSERT_MSG_LT_OR_EQ, ns3::Simulator::Schedule(), ns3::Seconds(), and ns3::TcpGeneralTest::SENDER.
Referenced by Check(), and CWndTrace().
|
overrideprotectedvirtual |
Change the configuration of the environment.
Reimplemented from ns3::TcpGeneralTest.
Definition at line 99 of file tcp-cong-avoid-test.cc.
References ns3::TcpGeneralTest::ConfigureEnvironment(), m_packets, m_packetSize, ns3::TcpGeneralTest::SetAppPktCount(), ns3::TcpGeneralTest::SetAppPktSize(), and ns3::TcpGeneralTest::SetMTU().
|
overrideprotectedvirtual |
Change the configuration of the socket properties.
Reimplemented from ns3::TcpGeneralTest.
Definition at line 108 of file tcp-cong-avoid-test.cc.
References ns3::TcpGeneralTest::ConfigureProperties(), m_segmentSize, ns3::TcpGeneralTest::SENDER, ns3::TcpGeneralTest::SetInitialSsThresh(), and ns3::TcpGeneralTest::SetSegmentSize().
|
overrideprotectedvirtual |
Tracks the congestion window changes.
oldValue | old value |
newValue | new value |
Reimplemented from ns3::TcpGeneralTest.
Definition at line 116 of file tcp-cong-avoid-test.cc.
References Check(), ns3::EventId::IsPending(), m_event, m_increment, m_initial, ns3::Simulator::Schedule(), and ns3::Seconds().
|
overrideprotectedvirtual |
Socket closed normally.
who | the socket closed (SENDER or RECEIVER) |
Reimplemented from ns3::TcpGeneralTest.
Definition at line 162 of file tcp-cong-avoid-test.cc.
References ns3::EventId::Cancel(), m_event, and ns3::TcpGeneralTest::SENDER.
|
overrideprotectedvirtual |
Link drop.
who | where the drop occurred (SENDER or RECEIVER) |
Reimplemented from ns3::TcpGeneralTest.
Definition at line 139 of file tcp-cong-avoid-test.cc.
References NS_FATAL_ERROR.
|
overrideprotectedvirtual |
Drop on the queue.
who | where the drop occurred (SENDER or RECEIVER) |
Reimplemented from ns3::TcpGeneralTest.
Definition at line 133 of file tcp-cong-avoid-test.cc.
References NS_FATAL_ERROR.
|
private |
Check event.
Definition at line 79 of file tcp-cong-avoid-test.cc.
Referenced by Check(), CWndTrace(), and NormalClose().
|
private |
Congestion window increment.
Definition at line 78 of file tcp-cong-avoid-test.cc.
Referenced by Check(), and CWndTrace().
|
private |
|
private |
Number of packets.
Definition at line 77 of file tcp-cong-avoid-test.cc.
Referenced by ConfigureEnvironment().
|
private |
Size of the packets.
Definition at line 76 of file tcp-cong-avoid-test.cc.
Referenced by ConfigureEnvironment().
|
private |
Segment size.
Definition at line 75 of file tcp-cong-avoid-test.cc.
Referenced by ConfigureProperties().