32 #include "ns3/queue-disc.h" 33 #include "ns3/nstime.h" 34 #include "ns3/boolean.h" 35 #include "ns3/data-rate.h" 36 #include "ns3/simulator.h" 37 #include "ns3/string.h" 38 #include "ns3/traced-value.h" 39 #include "ns3/random-variable-stream.h" 40 #include "ns3/trace-source-accessor.h" 44 #define REC_INV_SQRT_CACHE (16) 45 #define DEFAULT_COBALT_LIMIT 1000 bool CoDelTimeAfter(int64_t a, int64_t b)
Check if CoDel time a is successive to b.
Simulation virtual time values and global simulation resolution.
double m_Pdrop
Drop Probability.
Smart pointer class similar to boost::intrusive_ptr.
CobaltQueueDisc()
CobaltQueueDisc Constructor.
virtual bool CheckConfig(void)
Check whether the current configuration is correct.
int64_t Time2CoDel(Time t)
Return the unsigned 32-bit integer representation of the input Time object.
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
static TypeId GetTypeId(void)
Get the type ID.
bool CoDelTimeAfterEq(int64_t a, int64_t b)
Check if CoDel time a is successive or equal to b.
QueueDisc is an abstract base class providing the interface and implementing the operations common to...
void CobaltQueueFull(int64_t now)
Called when the queue becomes full to alter the drop probabilities of Blue.
Time GetInterval(void)
Get the interval.
TracedValue< int64_t > m_dropNext
Time to drop next packet.
static constexpr const char * OVERLIMIT_DROP
Overlimit dropped packet.
void NewtonStep(void)
Calculate the reciprocal square root of m_count by using Newton's method http://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Iterative_methods_for_reciprocal_square_roots m_recInvSqrt (new) = (m_recInvSqrt (old) / 2) * (3 - m_count * m_recInvSqrt^2)
int64_t GetDropNext(void)
Get the time for next packet drop while in the dropping state.
virtual ~CobaltQueueDisc()
Destructor.
int64_t ControlLaw(int64_t t)
Determine the time for next drop CoDel control law is t + m_interval/sqrt(m_count).
void CobaltQueueEmpty(int64_t now)
Called when the queue becomes empty to alter the drop probabilities of Blue.
static constexpr const char * FORCED_MARK
forced marks by Codel on ECN-enabled
double m_increment
increment value for marking probability
Cobalt packet queue disc.
Stats m_stats
Cobalt statistics.
TracedValue< uint32_t > m_count
Number of packets dropped since entering drop state.
static constexpr const char * TARGET_EXCEEDED_DROP
Sojourn time above target.
bool m_useEcn
True if ECN is used (packets are marked instead of being dropped)
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Ptr< UniformRandomVariable > m_uv
Rng stream.
TracedValue< bool > m_dropping
True if in dropping state.
virtual void DoDispose(void)
Dispose of the object.
uint32_t m_recInvSqrtCache[REC_INV_SQRT_CACHE]
Cache to maintain some initial values of InvSqrt.
virtual Ptr< const QueueDiscItem > DoPeek(void)
Return a copy of the next packet the queue disc will extract.
virtual bool DoEnqueue(Ptr< QueueDiscItem > item)
This function actually enqueues a packet into the queue disc.
Time m_target
5 ms target queue delay
virtual void InitializeParams(void)
Initialize the queue parameters.
bool CobaltShouldDrop(Ptr< QueueDiscItem > item, int64_t now)
Called to decide whether the current packet should be dropped based on decisions taken by Blue and Co...
double m_decrement
decrement value for marking probability
double GetPdrop()
Get the drop probability of Blue.
uint32_t m_lastUpdateTimeBlue
Blue's last update time for drop probability.
virtual Ptr< QueueDiscItem > DoDequeue(void)
This function actually extracts a packet from the queue disc.
#define REC_INV_SQRT_CACHE
Time GetTarget(void)
Get the target queue delay.
uint32_t m_recInvSqrt
Reciprocal inverse square root.
a unique identifier for an interface.
void CacheInit(void)
There is a big difference in timing between the accurate values placed in the cache and the approxima...
Time m_interval
100 ms sliding minimum time window width