20#include "ns3/tcp-bic.h"
21#include "ns3/tcp-congestion-ops.h"
22#include "ns3/tcp-socket-base.h"
51 const std::string& name);
54 void DoRun()
override;
81 const std::string& name)
86 m_segmentsAcked(segmentsAcked),
87 m_lastMaxCwnd(lastMaxCwnd)
94 m_state = CreateObject<TcpSocketState>();
116 "Bic has not increment cWnd");
124 "Bic has modified cWnd");
131 uint32_t segCwnd = tcb->m_cWnd / tcb->m_segmentSize;
138 cong->GetAttribute(
"LowWnd", lowWindow);
139 cong->GetAttribute(
"BinarySearchCoefficient", bsCoeff);
140 cong->GetAttribute(
"MaxIncr", wMax);
141 cong->GetAttribute(
"SmoothPart", smoothPart);
147 if (segCwnd < lowWindow.
Get())
155 if (midPt > wMax.
Get())
158 ackCnt = segCwnd / wMax.
Get();
162 ackCnt = (segCwnd * smoothPart.
Get()) / bsCoeff.
Get();
167 ackCnt = segCwnd / midPt;
175 ackCnt = (segCwnd * smoothPart.
Get()) / bsCoeff.
Get();
185 ackCnt = segCwnd / wMax.
Get();
211 const std::string& name);
214 void DoRun()
override;
232 const std::string& name)
236 m_fastConvergence(fastConvergence),
237 m_lastMaxCwnd(lastMaxCwnd)
244 m_state = CreateObject<TcpSocketState>();
263 uint32_t retLastMaxCwnd = cong->m_lastMaxCwnd;
267 cong->GetAttribute(
"Beta", beta);
268 cong->GetAttribute(
"LowWnd", lowWindow);
275 lastMaxCwnd = beta.
Get() * segCwnd;
278 "Bic has not updated lastMaxCwnd during fast convergence");
282 lastMaxCwnd = segCwnd;
285 "Bic has not reset lastMaxCwnd to current cwnd (in segments)");
288 if (segCwnd < lowWindow.
Get())
293 "Bic has not updated ssThresh when cWnd less than lowWindow");
300 "Bic has not updated ssThresh when cWnd greater than lowWindow");
321 "Bic increment test: under lowCwnd & enough ACKs received"),
329 "Bic increment test: under lowCwnd but not enough ACKs received"),
337 "Bic increment test: linear increase when distance exceeds S_max"),
345 "Bic increment test: binary search increase with smooth part"),
352 "Bic increment test: binary search increase"),
359 "Bic increment test: slow start AMD linear increase"),
367 "Bic increment test: slow start but not enough ACKs received"),
375 "Bic increment test: linear incrase but not enough ACKs received"),
383 "Bic decrement test: fast convergence & cwnd less than lowWindow"),
390 "Bic decrement test: not in fast convergence & cwnd less than lowWindow"),
398 "Bic decrement test: not in fast convergence & cwnd greater than lowWindow"),
Testing the congestion avoidance decrement on TcpBic.
uint32_t m_cWnd
Congestion window.
uint32_t m_segmentSize
Segment size.
void ExecuteTest()
Execute the test.
uint32_t m_lastMaxCwnd
Last max Cwnd.
Ptr< TcpSocketState > m_state
TCP socket state.
BooleanValue m_fastConvergence
Fast convergence.
TcpBicDecrementTest(uint32_t cWnd, uint32_t segmentSize, BooleanValue fastConvergence, uint32_t lastMaxCwnd, const std::string &name)
Constructor.
void DoRun() override
Implementation to actually run this TestCase.
Testing the congestion avoidance increment on TcpBic.
uint32_t Update(Ptr< TcpSocketState > tcb)
Update the TCP socket state.
void DoRun() override
Implementation to actually run this TestCase.
uint32_t m_ssThresh
Slow Start Threshold.
void ExecuteTest()
Execute the test.
uint32_t m_lastMaxCwnd
Last max Cwnd.
uint32_t m_segmentsAcked
Number of segments acked.
uint32_t m_cWnd
Congestion window.
Ptr< TcpSocketState > m_state
TCP socket state.
uint32_t m_segmentSize
Segment size.
TcpBicIncrementTest(uint32_t cWnd, uint32_t segmentSize, uint32_t ssThresh, uint32_t segmentsAcked, uint32_t lastMaxCwnd, const std::string &name)
Constructor.
AttributeValue implementation for Boolean.
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Smart pointer class similar to boost::intrusive_ptr.
static EventId Schedule(const Time &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
static void Run()
Run the simulation.
uint32_t m_segmentSize
Segment size.
TracedValue< uint32_t > m_cWnd
Congestion window.
TracedValue< uint32_t > m_ssThresh
Slow start threshold.
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
@ UNIT
This test suite implements a Unit Test.
T Get() const
Get the underlying value.
Hold an unsigned integer type.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
Time Seconds(double value)
Construct a Time in the indicated unit.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
static TcpBicTestSuite g_tcpBicTest
Static variable for test initialization.