tcp: Update tcp-dctcp-test
This commit is contained in:
@@ -29,6 +29,7 @@
|
||||
#include "tcp-error-model.h"
|
||||
#include "ns3/tcp-l4-protocol.h"
|
||||
#include "ns3/tcp-dctcp.h"
|
||||
#include "ns3/tcp-linux-reno.h"
|
||||
#include "ns3/tcp-tx-buffer.h"
|
||||
#include "ns3/config.h"
|
||||
|
||||
@@ -508,9 +509,9 @@ TcpDctcpCodePointsTest::CreateReceiverSocket (Ptr<Node> node)
|
||||
* \ingroup internet-test
|
||||
* \ingroup tests
|
||||
*
|
||||
* \brief DCTCP should be same as NewReno during slow start
|
||||
* \brief DCTCP should be same as Linux during slow start
|
||||
*/
|
||||
class TcpDctcpToNewReno : public TestCase
|
||||
class TcpDctcpToLinuxReno : public TestCase
|
||||
{
|
||||
public:
|
||||
/**
|
||||
@@ -525,7 +526,7 @@ public:
|
||||
* \param rtt RTT
|
||||
* \param name Name of the test
|
||||
*/
|
||||
TcpDctcpToNewReno (uint32_t cWnd, uint32_t segmentSize, uint32_t ssThresh,
|
||||
TcpDctcpToLinuxReno (uint32_t cWnd, uint32_t segmentSize, uint32_t ssThresh,
|
||||
uint32_t segmentsAcked, SequenceNumber32 highTxMark,
|
||||
SequenceNumber32 lastAckedSeq, Time rtt, const std::string &name);
|
||||
|
||||
@@ -545,7 +546,7 @@ private:
|
||||
Ptr<TcpSocketState> m_state; //!< state
|
||||
};
|
||||
|
||||
TcpDctcpToNewReno::TcpDctcpToNewReno (uint32_t cWnd, uint32_t segmentSize, uint32_t ssThresh,
|
||||
TcpDctcpToLinuxReno::TcpDctcpToLinuxReno (uint32_t cWnd, uint32_t segmentSize, uint32_t ssThresh,
|
||||
uint32_t segmentsAcked, SequenceNumber32 highTxMark,
|
||||
SequenceNumber32 lastAckedSeq, Time rtt, const std::string &name)
|
||||
: TestCase (name),
|
||||
@@ -560,15 +561,15 @@ TcpDctcpToNewReno::TcpDctcpToNewReno (uint32_t cWnd, uint32_t segmentSize, uint3
|
||||
}
|
||||
|
||||
void
|
||||
TcpDctcpToNewReno::DoRun ()
|
||||
TcpDctcpToLinuxReno::DoRun ()
|
||||
{
|
||||
Simulator::Schedule (Seconds (0.0), &TcpDctcpToNewReno::ExecuteTest, this);
|
||||
Simulator::Schedule (Seconds (0.0), &TcpDctcpToLinuxReno::ExecuteTest, this);
|
||||
Simulator::Run ();
|
||||
Simulator::Destroy ();
|
||||
}
|
||||
|
||||
void
|
||||
TcpDctcpToNewReno::ExecuteTest ()
|
||||
TcpDctcpToLinuxReno::ExecuteTest ()
|
||||
{
|
||||
m_state = CreateObject <TcpSocketState> ();
|
||||
m_state->m_cWnd = m_cWnd;
|
||||
@@ -587,94 +588,12 @@ TcpDctcpToNewReno::ExecuteTest ()
|
||||
Ptr<TcpDctcp> cong = CreateObject <TcpDctcp> ();
|
||||
cong->IncreaseWindow (m_state, m_segmentsAcked);
|
||||
|
||||
Ptr<TcpNewReno> NewRenoCong = CreateObject <TcpNewReno> ();
|
||||
NewRenoCong->IncreaseWindow (state, m_segmentsAcked);
|
||||
Ptr<TcpLinuxReno> LinuxRenoCong = CreateObject <TcpLinuxReno> ();
|
||||
LinuxRenoCong->IncreaseWindow (state, m_segmentsAcked);
|
||||
|
||||
NS_TEST_ASSERT_MSG_EQ (m_state->m_cWnd.Get (), state->m_cWnd.Get (),
|
||||
"cWnd has not updated correctly");
|
||||
}
|
||||
/**
|
||||
* \ingroup internet-test
|
||||
* \ingroup tests
|
||||
*
|
||||
* \brief Test to validate cWnd decrement DCTCP
|
||||
*/
|
||||
class TcpDctcpDecrementTest : public TestCase
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* \brief Constructor
|
||||
*
|
||||
* \param cWnd congestion window
|
||||
* \param segmentSize segment size
|
||||
* \param segmentsAcked segments acked
|
||||
* \param highTxMark high tx mark
|
||||
* \param lastAckedSeq last acked seq
|
||||
* \param rtt RTT
|
||||
* \param name Name of the test
|
||||
*/
|
||||
TcpDctcpDecrementTest (uint32_t cWnd, uint32_t segmentSize, uint32_t segmentsAcked, SequenceNumber32 nextTxSequence,
|
||||
SequenceNumber32 lastAckedSeq, Time rtt, const std::string &name);
|
||||
|
||||
private:
|
||||
virtual void DoRun (void);
|
||||
/** \brief Execute the test
|
||||
*/
|
||||
void ExecuteTest (void);
|
||||
|
||||
uint32_t m_cWnd; //!< cWnd
|
||||
uint32_t m_segmentSize; //!< segment size
|
||||
uint32_t m_segmentsAcked; //!< segments acked
|
||||
Time m_rtt; //!< rtt
|
||||
SequenceNumber32 m_nextTxSequence; //!< next seq num to be sent
|
||||
SequenceNumber32 m_lastAckedSeq; //!< last acked seq
|
||||
Ptr<TcpSocketState> m_state; //!< state
|
||||
};
|
||||
|
||||
TcpDctcpDecrementTest::TcpDctcpDecrementTest (uint32_t cWnd, uint32_t segmentSize, uint32_t segmentsAcked, SequenceNumber32 nextTxSequence,
|
||||
SequenceNumber32 lastAckedSeq, Time rtt, const std::string &name)
|
||||
: TestCase (name),
|
||||
m_cWnd (cWnd),
|
||||
m_segmentSize (segmentSize),
|
||||
m_segmentsAcked (segmentsAcked),
|
||||
m_rtt (rtt),
|
||||
m_nextTxSequence (nextTxSequence),
|
||||
m_lastAckedSeq (lastAckedSeq)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
TcpDctcpDecrementTest::DoRun ()
|
||||
{
|
||||
Config::SetDefault ("ns3::TcpDctcp::DctcpAlphaOnInit", DoubleValue (0));
|
||||
Simulator::Schedule (Seconds (0.0), &TcpDctcpDecrementTest::ExecuteTest, this);
|
||||
Simulator::Run ();
|
||||
Simulator::Destroy ();
|
||||
}
|
||||
|
||||
void
|
||||
TcpDctcpDecrementTest::ExecuteTest (void)
|
||||
{
|
||||
m_state = CreateObject <TcpSocketState> ();
|
||||
m_state->m_cWnd = m_cWnd;
|
||||
m_state->m_segmentSize = m_segmentSize;
|
||||
m_state->m_nextTxSequence = m_nextTxSequence;
|
||||
m_state->m_lastAckedSeq = m_lastAckedSeq;
|
||||
|
||||
Ptr<TcpDctcp> cong = CreateObject <TcpDctcp> ();
|
||||
m_state->m_ecnState = TcpSocketState::ECN_IDLE;
|
||||
cong->PktsAcked (m_state, m_segmentsAcked, m_rtt);
|
||||
NS_TEST_ASSERT_MSG_EQ (m_state->m_cWnd.Get (), m_cWnd,
|
||||
"cWnd has updated correctly");
|
||||
|
||||
m_state->m_ecnState = TcpSocketState::ECN_ECE_RCVD;
|
||||
cong->PktsAcked (m_state, m_segmentsAcked, m_rtt);
|
||||
|
||||
uint32_t val = (uint32_t)(m_cWnd * (1 - 0.0625 / 2.0));
|
||||
NS_TEST_ASSERT_MSG_EQ (m_state->m_cWnd.Get (), val,
|
||||
"cWnd has updated correctly");
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* \ingroup internet-test
|
||||
@@ -687,12 +606,11 @@ class TcpDctcpTestSuite : public TestSuite
|
||||
public:
|
||||
TcpDctcpTestSuite () : TestSuite ("tcp-dctcp-test", UNIT)
|
||||
{
|
||||
AddTestCase (new TcpDctcpToNewReno (2 * 1446, 1446, 4 * 1446, 2, SequenceNumber32 (4753), SequenceNumber32 (3216), MilliSeconds (100), "DCTCP falls to New Reno for slowstart"), TestCase::QUICK);
|
||||
AddTestCase (new TcpDctcpDecrementTest (4 * 1446, 1446, 2, SequenceNumber32 (3216), SequenceNumber32 (4753), MilliSeconds (100), "DCTCP decrement test"), TestCase::QUICK);
|
||||
AddTestCase (new TcpDctcpToLinuxReno (2 * 1446, 1446, 4 * 1446, 2, SequenceNumber32 (4753), SequenceNumber32 (3216), MilliSeconds (100), "DCTCP falls to New Reno for slowstart"), TestCase::QUICK);
|
||||
AddTestCase (new TcpDctcpCodePointsTest (1, "ECT Test : Check if ECT is set on Syn, Syn+Ack, Ack and Data packets for DCTCP packets"),
|
||||
TestCase::QUICK);
|
||||
AddTestCase (new TcpDctcpCodePointsTest (2, "ECT Test : Check if ECT is not set on Syn, Syn+Ack and Ack but set on Data packets for non-DCTCP but ECN enabled traffic"),TestCase::QUICK);
|
||||
AddTestCase (new TcpDctcpCodePointsTest (3, "ECE Functionality Test: ECE should only be sent by reciever when it receives CE flags"),
|
||||
AddTestCase (new TcpDctcpCodePointsTest (3, "ECE Functionality Test: ECE should only be sent by receiver when it receives CE flags"),
|
||||
TestCase::QUICK);
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user