40 .AddConstructor<TcpVeno> ()
41 .SetGroupName (
"Internet")
42 .AddAttribute (
"Beta",
"Threshold for congestion detection",
45 MakeUintegerChecker<uint32_t> ())
55 m_doingVenoNow (true),
66 m_baseRtt (sock.m_baseRtt),
67 m_minRtt (sock.m_minRtt),
68 m_cntRtt (sock.m_cntRtt),
69 m_doingVenoNow (true),
72 m_ackCnt (sock.m_ackCnt),
86 return CopyObject<TcpVeno> (
this);
164 targetCwnd =
static_cast<uint32_t
> (segCwnd * tmp);
165 NS_LOG_DEBUG (
"Calculated targetCwnd = " << targetCwnd);
169 m_diff = segCwnd - targetCwnd;
175 NS_LOG_LOGIC (
"Veno is not turned on, we follow NewReno algorithm.");
183 NS_LOG_LOGIC (
"We do not have enough RTT samples to perform Veno " 184 "calculations, we behave like NewReno.");
189 NS_LOG_LOGIC (
"We have enough RTT samples to perform Veno calculations.");
193 NS_LOG_LOGIC (
"We are in slow start, behave like NewReno.");
198 NS_LOG_LOGIC (
"We are in congestion avoidance, execute Veno additive " 205 NS_LOG_LOGIC (
"Available bandwidth not fully utilized, increase " 206 "cwnd by 1 every RTT");
213 NS_LOG_LOGIC (
"Available bandwidth fully utilized, increase cwnd " 214 "by 1 every other RTT");
241 uint32_t bytesInFlight)
249 NS_LOG_LOGIC (
"Random loss is most likely to have occurred, " 250 "cwnd is reduced by 1/5");
251 static double tmp = 4.0/5.0;
252 return std::max (static_cast<uint32_t> (bytesInFlight * tmp),
253 2 * tcb->m_segmentSize);
259 NS_LOG_LOGIC (
"Congestive loss is most likely to have occurred, " virtual Ptr< TcpCongestionOps > Fork()
Copy the congestion control algorithm across 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.
virtual uint32_t GetSsThresh(Ptr< const TcpSocketState > tcb, uint32_t bytesInFlight)
Get slow start threshold during Veno multiplicative-decrease phase.
double GetSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
TcpVeno(void)
Create an unbound tcp socket.
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.
void DisableVeno()
Turn off Veno.
virtual void IncreaseWindow(Ptr< TcpSocketState > tcb, uint32_t segmentsAcked)
Try to increase the cWnd following the NewReno specification.
The NewReno implementation.
An implementation of TCP Veno.
bool m_inc
If true, cwnd needs to be incremented.
uint32_t m_beta
Threshold for congestion detection.
static Time Max()
Maximum representable Time.
bool m_doingVenoNow
If true, do Veno for this RTT.
Hold an unsigned integer type.
uint32_t m_diff
Difference between expected and actual throughput.
int64x64_t Max(const int64x64_t &a, const int64x64_t &b)
Maximum.
virtual uint32_t GetSsThresh(Ptr< const TcpSocketState > tcb, uint32_t bytesInFlight)
Get the slow start threshold after a loss event.
TracedValue< uint32_t > m_ssThresh
Slow start threshold.
TcpCongState_t
Definition of the Congestion state machine.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
virtual std::string GetName() const
Get the name of the congestion control algorithm.
NS_LOG_LOGIC("Net device "<< nd<< " is not bridged")
virtual void CongestionStateSet(Ptr< TcpSocketState > tcb, const TcpSocketState::TcpCongState_t newState)
Enable/disable Veno depending on the congestion state.
static TypeId GetTypeId(void)
Get the type ID.
TracedValue< uint32_t > m_cWnd
Congestion window.
virtual void PktsAcked(Ptr< TcpSocketState > tcb, uint32_t segmentsAcked, const Time &rtt)
Perform RTT sampling needed to execute Veno algorithm.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Time m_baseRtt
Minimum of all RTT measurements seen during connection.
uint32_t m_cntRtt
Number of RTT measurements during last RTT.
virtual void IncreaseWindow(Ptr< TcpSocketState > tcb, uint32_t segmentsAcked)
Adjust cwnd following Veno additive increase algorithm.
virtual void CongestionAvoidance(Ptr< TcpSocketState > tcb, uint32_t segmentsAcked)
NewReno congestion avoidance.
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.
Time m_minRtt
Minimum of RTTs measured within last RTT.
void EnableVeno()
Enable Veno algorithm to start Veno sampling.
uint32_t GetCwndInSegments() const
Get cwnd in segments rather than bytes.