14#include "ns3/simulator.h"
27 .SetGroupName(
"Internet")
58 NS_LOG_INFO(
"In SlowStart, updated to cwnd " <<
tcb->m_cWnd <<
" ssthresh "
74 <<
" is not limiting the flow");
91 tcb->m_cWnd +=
tcb->m_segmentSize;
102 tcb->m_cWnd += delta *
tcb->m_segmentSize;
103 NS_LOG_DEBUG(
"Subtracting delta * w from m_cWndCnt " << delta * w);
105 NS_LOG_DEBUG(
"At end of CongestionAvoidance(), m_cWnd: " <<
tcb->m_cWnd
115 if (
tcb->m_cWnd <
tcb->m_ssThresh)
117 NS_LOG_DEBUG(
"In slow start, m_cWnd " <<
tcb->m_cWnd <<
" m_ssThresh " <<
tcb->m_ssThresh);
122 NS_LOG_DEBUG(
"In cong. avoidance, m_cWnd " <<
tcb->m_cWnd <<
" m_ssThresh "
131 return "TcpLinuxReno";
140 return std::max<uint32_t>(2 * state->m_segmentSize, state->m_cWnd / 2);
Smart pointer class similar to boost::intrusive_ptr.
Congestion control abstract class.
Reno congestion control algorithm.
uint32_t GetSsThresh(Ptr< const TcpSocketState > tcb, uint32_t bytesInFlight) override
Get the slow start threshold after a loss event.
bool m_suppressIncreaseIfCwndLimited
Suppress window increase if TCP is not cwnd limited.
std::string GetName() const override
Get the name of the congestion control algorithm.
static TypeId GetTypeId()
Get the type ID.
virtual uint32_t SlowStart(Ptr< TcpSocketState > tcb, uint32_t segmentsAcked)
Slow start phase handler.
void IncreaseWindow(Ptr< TcpSocketState > tcb, uint32_t segmentsAcked) override
Congestion avoidance algorithm implementation.
virtual void CongestionAvoidance(Ptr< TcpSocketState > tcb, uint32_t segmentsAcked)
Congestion avoidance phase handler.
uint32_t m_cWndCnt
Linear increase counter.
Ptr< TcpCongestionOps > Fork() override
Copy the congestion control algorithm across sockets.
void SetSuppressIncreaseIfCwndLimited(bool value)
TcpSocketBase follows the Linux way of setting a flag 'isCwndLimited' when BytesInFlight() >= cwnd.
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
static unsigned int value(char c)