From af06552ee28d93ee4c323f4627046ad203a4c803 Mon Sep 17 00:00:00 2001 From: Tom Henderson Date: Sun, 13 Dec 2020 20:52:19 -0800 Subject: [PATCH] tcp: Update tcp-dctcp-test --- src/internet/test/tcp-dctcp-test.cc | 106 ++++------------------------ 1 file changed, 12 insertions(+), 94 deletions(-) diff --git a/src/internet/test/tcp-dctcp-test.cc b/src/internet/test/tcp-dctcp-test.cc index d579f7445..73de63981 100644 --- a/src/internet/test/tcp-dctcp-test.cc +++ b/src/internet/test/tcp-dctcp-test.cc @@ -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) * \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 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 (); m_state->m_cWnd = m_cWnd; @@ -587,94 +588,12 @@ TcpDctcpToNewReno::ExecuteTest () Ptr cong = CreateObject (); cong->IncreaseWindow (m_state, m_segmentsAcked); - Ptr NewRenoCong = CreateObject (); - NewRenoCong->IncreaseWindow (state, m_segmentsAcked); + Ptr LinuxRenoCong = CreateObject (); + 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 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 (); - 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 cong = CreateObject (); - 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); } };