40 .AddConstructor<TcpVegas> ()
41 .SetGroupName (
"Internet")
42 .AddAttribute (
"Alpha",
"Lower bound of packets in network",
45 MakeUintegerChecker<uint32_t> ())
46 .AddAttribute (
"Beta",
"Upper bound of packets in network",
49 MakeUintegerChecker<uint32_t> ())
50 .AddAttribute (
"Gamma",
"Limit on increase",
53 MakeUintegerChecker<uint32_t> ())
66 m_doingVegasNow (true),
74 m_alpha (sock.m_alpha),
76 m_gamma (sock.m_gamma),
77 m_baseRtt (sock.m_baseRtt),
78 m_minRtt (sock.m_minRtt),
79 m_cntRtt (sock.m_cntRtt),
80 m_doingVegasNow (true),
94 return CopyObject<TcpVegas> (
this);
161 NS_LOG_LOGIC (
"Vegas is not turned on, we follow NewReno algorithm.");
169 NS_LOG_LOGIC (
"A Vegas cycle has finished, we adjust cwnd once per RTT.");
180 NS_LOG_LOGIC (
"We do not have enough RTT samples to do Vegas, so we behave like NewReno.");
185 NS_LOG_LOGIC (
"We have enough RTT samples to perform Vegas calculations");
205 targetCwnd =
static_cast<uint32_t
> (segCwnd * tmp);
206 NS_LOG_DEBUG (
"Calculated targetCwnd = " << targetCwnd);
213 diff = segCwnd - targetCwnd;
223 NS_LOG_LOGIC (
"We are going too fast. We need to slow down and " 224 "change to linear increase/decrease mode.");
225 segCwnd =
std::min (segCwnd, targetCwnd + 1);
233 NS_LOG_LOGIC (
"We are in slow start and diff < m_gamma, so we " 234 "follow NewReno slow start");
239 NS_LOG_LOGIC (
"We are in linear increase/decrease mode");
243 NS_LOG_LOGIC (
"We are going too fast, so we slow down by decrementing cwnd");
254 NS_LOG_LOGIC (
"We are going too slow, so we speed up by incrementing cwnd");
288 uint32_t bytesInFlight)
291 return std::max (
std::min (tcb->m_ssThresh.Get (), tcb->m_cWnd.Get () - tcb->m_segmentSize), 2 * tcb->m_segmentSize);
TcpVegas(void)
Create an unbound tcp socket.
Simulation virtual time values and global simulation resolution.
Smart pointer class similar to boost::intrusive_ptr.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
Normal state, no dubious events.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
SequenceNumber32 m_begSndNxt
Right edge during last RTT.
double GetSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
virtual uint32_t SlowStart(Ptr< TcpSocketState > tcb, uint32_t segmentsAcked)
Tcp NewReno slow start algorithm
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
uint32_t m_segmentSize
Segment size.
virtual void IncreaseWindow(Ptr< TcpSocketState > tcb, uint32_t segmentsAcked)
Try to increase the cWnd following the NewReno specification.
virtual Ptr< TcpCongestionOps > Fork()
Copy the congestion control algorithm across socket.
The NewReno implementation.
Time m_baseRtt
Minimum of all Vegas RTT measurements seen during connection.
static Time Max()
Maximum representable Time.
An implementation of TCP Vegas.
Hold an unsigned integer type.
int64x64_t Max(const int64x64_t &a, const int64x64_t &b)
Maximum.
SequenceNumber32 m_lastAckedSeq
Last sequence ACKed.
Time m_minRtt
Minimum of all RTT measurements within last RTT.
TracedValue< uint32_t > m_ssThresh
Slow start threshold.
TcpCongState_t
Definition of the Congestion state machine.
static TypeId GetTypeId(void)
Get the type ID.
virtual void IncreaseWindow(Ptr< TcpSocketState > tcb, uint32_t segmentsAcked)
Adjust cwnd following Vegas linear increase/decrease algorithm.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
virtual void CongestionStateSet(Ptr< TcpSocketState > tcb, const TcpSocketState::TcpCongState_t newState)
Enable/disable Vegas algorithm depending on the congestion state.
virtual void PktsAcked(Ptr< TcpSocketState > tcb, uint32_t segmentsAcked, const Time &rtt)
Compute RTTs needed to execute Vegas algorithm.
void DisableVegas()
Stop taking Vegas samples.
NS_LOG_LOGIC("Net device "<< nd<< " is not bridged")
TracedValue< uint32_t > m_cWnd
Congestion window.
uint32_t m_gamma
Gamma threshold, limit on increase.
virtual std::string GetName() const
Get the name of the congestion control algorithm.
uint32_t m_beta
Beta threshold, upper bound of packets in network.
virtual uint32_t GetSsThresh(Ptr< const TcpSocketState > tcb, uint32_t bytesInFlight)
Get slow start threshold following Vegas principle.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
uint32_t m_alpha
Alpha threshold, lower bound of packets in network.
bool m_doingVegasNow
If true, do Vegas for this RTT.
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
uint32_t m_cntRtt
Number of RTT measurements during last RTT.
void EnableVegas(Ptr< TcpSocketState > tcb)
Enable Vegas algorithm to start taking Vegas samples.
uint32_t GetCwndInSegments() const
Get cwnd in segments rather than bytes.
TracedValue< SequenceNumber32 > m_nextTxSequence
Next seqnum to be sent (SND.NXT), ReTx pushes it back.