22 #include "ns3/tcp-congestion-ops.h"
23 #include "ns3/tcp-socket-base.h"
24 #include "ns3/tcp-bic.h"
51 uint32_t segmentsAcked,
53 const std::string &name);
56 virtual void DoRun (
void);
68 void ExecuteTest (
void);
81 uint32_t segmentsAcked,
83 const std::string &name)
87 m_ssThresh (ssThresh),
88 m_segmentsAcked (segmentsAcked),
89 m_lastMaxCwnd (lastMaxCwnd)
96 m_state = CreateObject<TcpSocketState> ();
104 Simulator::Destroy ();
117 "Bic has not increment cWnd");
124 "Bic has modified cWnd");
136 cong->GetAttribute (
"LowWnd", lowWindow);
137 cong->GetAttribute (
"BinarySearchCoefficient", bsCoeff);
138 cong->GetAttribute (
"MaxIncr", wMax);
139 cong->GetAttribute (
"SmoothPart", smoothPart);
145 if (segCwnd < lowWindow.
Get ())
153 if (midPt > wMax.
Get ())
156 ackCnt = segCwnd / wMax.
Get ();
160 ackCnt = (segCwnd * smoothPart.
Get ()) / bsCoeff.
Get ();
165 ackCnt = segCwnd / midPt;
173 ackCnt = (segCwnd * smoothPart.
Get ()) / bsCoeff.
Get ();
183 ackCnt = segCwnd / wMax.
Get ();
211 uint32_t lastMaxCwnd,
212 const std::string &name);
215 virtual void DoRun (
void);
232 uint32_t lastMaxCwnd,
233 const std::string &name)
237 m_fastConvergence (fastConvergence),
238 m_lastMaxCwnd (lastMaxCwnd)
245 m_state = CreateObject<TcpSocketState> ();
252 Simulator::Destroy ();
264 uint32_t retLastMaxCwnd = cong->m_lastMaxCwnd;
268 cong->GetAttribute (
"Beta", beta);
269 cong->GetAttribute (
"LowWnd", lowWindow);
271 uint32_t lastMaxCwnd, ssThresh;
275 lastMaxCwnd = beta.
Get () * segCwnd;
277 "Bic has not updated lastMaxCwnd during fast convergence");
281 lastMaxCwnd = segCwnd;
283 "Bic has not reset lastMaxCwnd to current cwnd (in segments)");
287 if (segCwnd < lowWindow.
Get ())
291 "Bic has not updated ssThresh when cWnd less than lowWindow");
297 "Bic has not updated ssThresh when cWnd greater than lowWindow");
314 "Bic increment test: under lowCwnd & enough ACKs received"),
317 "Bic increment test: under lowCwnd but not enough ACKs received"),
320 "Bic increment test: linear increase when distance exceeds S_max"),
323 "Bic increment test: binary search increase with smooth part"),
326 "Bic increment test: binary search increase"),
329 "Bic increment test: slow start AMD linear increase"),
332 "Bic increment test: slow start but not enough ACKs received"),
335 "Bic increment test: linear incrase but not enough ACKs received"),
339 "Bic decrement test: fast convergence & cwnd less than lowWindow"),
342 "Bic decrement test: not in fast convergence & cwnd less than lowWindow"),
345 "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.
uint32_t m_lastMaxCwnd
Last max Cwnd.
Ptr< TcpSocketState > m_state
TCP socket state.
BooleanValue m_fastConvergence
Fast convergence.
virtual void DoRun(void)
Implementation to actually run this TestCase.
void ExecuteTest(void)
Execute the test.
TcpBicDecrementTest(uint32_t cWnd, uint32_t segmentSize, BooleanValue fastConvergence, uint32_t lastMaxCwnd, const std::string &name)
Constructor.
Testing the congestion avoidance increment on TcpBic.
uint32_t Update(Ptr< TcpSocketState > tcb)
Update the TCP socket state.
void ExecuteTest(void)
Execute the test.
uint32_t m_ssThresh
Slow Start Threshold.
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.
virtual void DoRun(void)
Implementation to actually run this TestCase.
AttributeValue implementation for Boolean.
This class can be used to hold variables of floating point type such as 'double' or 'float'.
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(void) 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.