A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
ns3::QueueDisc Class Referenceabstract

QueueDisc is an abstract base class providing the interface and implementing the operations common to all the queueing disciplines. More...

#include "queue-disc.h"

+ Inheritance diagram for ns3::QueueDisc:
+ Collaboration diagram for ns3::QueueDisc:

Classes

struct  Stats
 Structure that keeps the queue disc statistics. More...
 

Public Types

typedef Queue< QueueDiscItemInternalQueue
 Internal queues store QueueDiscItem objects.
 
typedef std::function< void(Ptr< QueueDiscItem >)> SendCallback
 Callback invoked to send a packet to the receiving object when Run is called.
 
enum  WakeMode { WAKE_ROOT = 0x00 , WAKE_CHILD = 0x01 }
 Used to determine whether the queue disc itself or its children must be activated when a netdevice wakes a transmission queue. More...
 

Public Member Functions

 QueueDisc (const QueueDisc &)=delete
 
 QueueDisc (QueueDiscSizePolicy policy, QueueSizeUnit unit)
 Constructor.
 
 QueueDisc (QueueDiscSizePolicy policy=QueueDiscSizePolicy::SINGLE_INTERNAL_QUEUE)
 Constructor.
 
 ~QueueDisc () override
 
void AddInternalQueue (Ptr< InternalQueue > queue)
 Add an internal queue to the tail of the list of queues.
 
void AddPacketFilter (Ptr< PacketFilter > filter)
 Add a packet filter to the tail of the list of filters used to classify packets.
 
void AddQueueDiscClass (Ptr< QueueDiscClass > qdClass)
 Add a queue disc class to the tail of the list of classes.
 
int32_t Classify (Ptr< QueueDiscItem > item)
 Classify a packet by calling the packet filters, one at a time, until either a filter able to classify the packet is found or all the filters have been processed.
 
Ptr< QueueDiscItemDequeue ()
 Extract from the queue disc the packet that has been dequeued by calling Peek, if any, or call the private DoDequeue method (which must be implemented by derived classes) to dequeue a packet, otherwise.
 
bool Enqueue (Ptr< QueueDiscItem > item)
 Pass a packet to store to the queue discipline.
 
QueueSize GetCurrentSize () const
 Get the current size of the queue disc in bytes, if operating in bytes mode, or packets, otherwise.
 
Ptr< InternalQueueGetInternalQueue (std::size_t i) const
 Get the i-th internal queue.
 
QueueSize GetMaxSize () const
 Get the maximum size of the queue disc.
 
uint32_t GetNBytes () const
 Get the amount of bytes stored by the queue disc.
 
Ptr< NetDeviceQueueInterfaceGetNetDeviceQueueInterface () const
 
std::size_t GetNInternalQueues () const
 Get the number of internal queues.
 
std::size_t GetNPacketFilters () const
 Get the number of packet filters.
 
uint32_t GetNPackets () const
 Get the number of packets stored by the queue disc.
 
std::size_t GetNQueueDiscClasses () const
 Get the number of queue disc classes.
 
Ptr< PacketFilterGetPacketFilter (std::size_t i) const
 Get the i-th packet filter.
 
Ptr< QueueDiscClassGetQueueDiscClass (std::size_t i) const
 Get the i-th queue disc class.
 
virtual uint32_t GetQuota () const
 Get the maximum number of dequeue operations following a packet enqueue.
 
SendCallback GetSendCallback () const
 
const StatsGetStats ()
 Retrieve all the collected statistics.
 
virtual WakeMode GetWakeMode () const
 When setting up the wake callbacks on the netdevice queues, it is necessary to determine which queue disc (the root queue disc or one of its children) should be activated when the netdevice wakes one of its transmission queues.
 
QueueDiscoperator= (const QueueDisc &)=delete
 
Ptr< const QueueDiscItemPeek ()
 Get a copy of the next packet the queue discipline will extract.
 
void Run ()
 Modelled after the Linux function __qdisc_run (net/sched/sch_generic.c) Dequeues multiple packets, until a quota is exceeded or sending a packet to the device failed.
 
bool SetMaxSize (QueueSize size)
 Set the maximum size of the queue disc.
 
void SetNetDeviceQueueInterface (Ptr< NetDeviceQueueInterface > ndqi)
 
virtual void SetQuota (const uint32_t quota)
 Set the maximum number of dequeue operations following a packet enqueue.
 
void SetSendCallback (SendCallback func)
 
- Public Member Functions inherited from ns3::Object
 Object ()
 Constructor.
 
 ~Object () override
 Destructor.
 
void AggregateObject (Ptr< Object > other)
 Aggregate two Objects together.
 
void Dispose ()
 Dispose of this Object.
 
AggregateIterator GetAggregateIterator () const
 Get an iterator to the Objects aggregated to this one.
 
TypeId GetInstanceTypeId () const override
 Get the most derived TypeId for this Object.
 
template<typename T >
Ptr< T > GetObject () const
 Get a pointer to the requested aggregated Object.
 
template<>
Ptr< ObjectGetObject () const
 Specialization of () for objects of type ns3::Object.
 
template<typename T >
Ptr< T > GetObject (TypeId tid) const
 Get a pointer to the requested aggregated Object by TypeId.
 
template<>
Ptr< ObjectGetObject (TypeId tid) const
 Specialization of (TypeId tid) for objects of type ns3::Object.
 
void Initialize ()
 Invoke DoInitialize on all Objects aggregated to this one.
 
bool IsInitialized () const
 Check if the object has been initialized.
 
void UnidirectionalAggregateObject (Ptr< Object > other)
 Aggregate an Object to another Object.
 
- Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter >
 SimpleRefCount ()
 Default constructor.
 
 SimpleRefCount (const SimpleRefCount &o)
 Copy constructor.
 
uint32_t GetReferenceCount () const
 Get the reference count of the object.
 
SimpleRefCountoperator= (const SimpleRefCount &o)
 Assignment operator.
 
void Ref () const
 Increment the reference count.
 
void Unref () const
 Decrement the reference count.
 
- Public Member Functions inherited from ns3::ObjectBase
virtual ~ObjectBase ()
 Virtual destructor.
 
void GetAttribute (std::string name, AttributeValue &value, bool permissive=false) const
 Get the value of an attribute, raising fatal errors if unsuccessful.
 
bool GetAttributeFailSafe (std::string name, AttributeValue &value) const
 Get the value of an attribute without raising errors.
 
void SetAttribute (std::string name, const AttributeValue &value)
 Set a single attribute, raising fatal errors if unsuccessful.
 
bool SetAttributeFailSafe (std::string name, const AttributeValue &value)
 Set a single attribute without raising errors.
 
bool TraceConnect (std::string name, std::string context, const CallbackBase &cb)
 Connect a TraceSource to a Callback with a context.
 
bool TraceConnectWithoutContext (std::string name, const CallbackBase &cb)
 Connect a TraceSource to a Callback without a context.
 
bool TraceDisconnect (std::string name, std::string context, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected with a context.
 
bool TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected without a context.
 

Static Public Member Functions

static TypeId GetTypeId ()
 Get the type ID.
 
- Static Public Member Functions inherited from ns3::Object
static TypeId GetTypeId ()
 Register this type.
 
- Static Public Member Functions inherited from ns3::ObjectBase
static TypeId GetTypeId ()
 Get the type ID.
 

Static Public Attributes

static constexpr const char * CHILD_QUEUE_DISC_DROP
 Packet dropped by a child queue disc.
 
static constexpr const char * CHILD_QUEUE_DISC_MARK
 Packet marked by a child queue disc.
 
static constexpr const char * INTERNAL_QUEUE_DROP
 Packet dropped by an internal queue.
 

Protected Member Functions

void DoDispose () override
 Dispose of the object.
 
void DoInitialize () override
 Check whether the configuration is correct and initialize parameters.
 
void DropAfterDequeue (Ptr< const QueueDiscItem > item, const char *reason)
 Perform the actions required when the queue disc is notified of a packet dropped after dequeue.
 
void DropBeforeEnqueue (Ptr< const QueueDiscItem > item, const char *reason)
 Perform the actions required when the queue disc is notified of a packet dropped before enqueue.
 
bool Mark (Ptr< QueueDiscItem > item, const char *reason)
 Marks the given packet and, if successful, updates the counters associated with the given reason.
 
- Protected Member Functions inherited from ns3::Object
 Object (const Object &o)
 Copy an Object.
 
virtual void NotifyNewAggregate ()
 Notify all Objects aggregated to this one of a new Object being aggregated.
 
- Protected Member Functions inherited from ns3::ObjectBase
void ConstructSelf (const AttributeConstructionList &attributes)
 Complete construction of ObjectBase; invoked by derived classes.
 
virtual void NotifyConstructionCompleted ()
 Notifier called once the ObjectBase is fully constructed.
 

Private Types

typedef std::function< void(Ptr< const QueueDiscItem >, const char *)> ChildQueueDiscDropFunctor
 Type for the function objects notifying that a packet has been dropped by a child queue disc.
 
typedef std::function< void(Ptr< const QueueDiscItem >, const char *)> ChildQueueDiscMarkFunctor
 Type for the function objects notifying that a packet has been marked by a child queue disc.
 
typedef std::function< void(Ptr< const QueueDiscItem >)> InternalQueueDropFunctor
 Type for the function objects notifying that a packet has been dropped by an internal queue.
 

Private Member Functions

virtual bool CheckConfig ()=0
 Check whether the current configuration is correct.
 
Ptr< QueueDiscItemDequeuePacket ()
 Modelled after the Linux function dequeue_skb (net/sched/sch_generic.c)
 
virtual Ptr< QueueDiscItemDoDequeue ()=0
 This function actually extracts a packet from the queue disc.
 
virtual bool DoEnqueue (Ptr< QueueDiscItem > item)=0
 This function actually enqueues a packet into the queue disc.
 
virtual Ptr< const QueueDiscItemDoPeek ()
 Return a copy of the next packet the queue disc will extract.
 
virtual void InitializeParams ()=0
 Initialize parameters (if any) before the first packet is enqueued.
 
void PacketDequeued (Ptr< const QueueDiscItem > item)
 Perform the actions required when the queue disc is notified of a packet dequeue.
 
void PacketEnqueued (Ptr< const QueueDiscItem > item)
 Perform the actions required when the queue disc is notified of a packet enqueue.
 
void Requeue (Ptr< QueueDiscItem > item)
 Modelled after the Linux function dev_requeue_skb (net/sched/sch_generic.c) Requeues a packet whose transmission failed.
 
bool Restart ()
 Modelled after the Linux function qdisc_restart (net/sched/sch_generic.c) Dequeue a packet (by calling DequeuePacket) and send it to the device (by calling Transmit).
 
bool RunBegin ()
 Modelled after the Linux function qdisc_run_begin (include/net/sch_generic.h).
 
void RunEnd ()
 Modelled after the Linux function qdisc_run_end (include/net/sch_generic.h).
 
bool Transmit (Ptr< QueueDiscItem > item)
 Modelled after the Linux function sch_direct_xmit (net/sched/sch_generic.c) Sends a packet to the device if the device queue is not stopped, and requeues it otherwise.
 

Private Attributes

ChildQueueDiscDropFunctor m_childQueueDiscDadFunctor
 Function object called when a child queue disc dropped a packet after dequeue.
 
ChildQueueDiscDropFunctor m_childQueueDiscDbeFunctor
 Function object called when a child queue disc dropped a packet before enqueue.
 
std::string m_childQueueDiscDropMsg
 Reason why a packet was dropped by a child queue disc.
 
ChildQueueDiscMarkFunctor m_childQueueDiscMarkFunctor
 Function object called when a child queue disc marked a packet.
 
std::string m_childQueueDiscMarkMsg
 Reason why a packet was marked by a child queue disc.
 
std::vector< Ptr< QueueDiscClass > > m_classes
 Classes.
 
Ptr< NetDeviceQueueInterfacem_devQueueIface
 NetDevice queue interface.
 
std::vector< Ptr< PacketFilter > > m_filters
 Packet filters.
 
InternalQueueDropFunctor m_internalQueueDadFunctor
 Function object called when an internal queue dropped a packet after dequeue.
 
InternalQueueDropFunctor m_internalQueueDbeFunctor
 Function object called when an internal queue dropped a packet before enqueue.
 
QueueSize m_maxSize
 max queue size
 
TracedValue< uint32_tm_nBytes
 Number of bytes in the queue.
 
TracedValue< uint32_tm_nPackets
 Number of packets in the queue.
 
bool m_peeked
 A packet was dequeued because Peek was called.
 
bool m_prohibitChangeMode
 True if changing mode is prohibited.
 
std::vector< Ptr< InternalQueue > > m_queues
 Internal queues.
 
uint32_t m_quota
 Maximum number of packets dequeued in a qdisc run.
 
Ptr< QueueDiscItemm_requeued
 The last packet that failed to be transmitted.
 
bool m_running
 The queue disc is performing multiple dequeue operations.
 
SendCallback m_send
 Callback used to send a packet to the receiving object.
 
QueueDiscSizePolicy m_sizePolicy
 The queue disc size policy.
 
TracedCallback< Timem_sojourn
 Sojourn time of the latest dequeued packet.
 
Stats m_stats
 The collected statistics.
 
TracedCallback< Ptr< const QueueDiscItem > > m_traceDequeue
 Traced callback: fired when a packet is dequeued.
 
TracedCallback< Ptr< const QueueDiscItem > > m_traceDrop
 Traced callback: fired when a packet is dropped.
 
TracedCallback< Ptr< const QueueDiscItem >, const char * > m_traceDropAfterDequeue
 Traced callback: fired when a packet is dropped after dequeue.
 
TracedCallback< Ptr< const QueueDiscItem >, const char * > m_traceDropBeforeEnqueue
 Traced callback: fired when a packet is dropped before enqueue.
 
TracedCallback< Ptr< const QueueDiscItem > > m_traceEnqueue
 Traced callback: fired when a packet is enqueued.
 
TracedCallback< Ptr< const QueueDiscItem >, const char * > m_traceMark
 Traced callback: fired when a packet is marked.
 
TracedCallback< Ptr< const QueueDiscItem > > m_traceRequeue
 Traced callback: fired when a packet is requeued.
 

Static Private Attributes

static const uint32_t DEFAULT_QUOTA = 64
 Default quota (as in /proc/sys/net/core/dev_weight)
 

Additional Inherited Members

Detailed Description

QueueDisc is an abstract base class providing the interface and implementing the operations common to all the queueing disciplines.

Child classes need to implement the methods used to enqueue a packet (DoEnqueue), dequeue a single packet (DoDequeue), get a copy of the next packet to extract (DoPeek), check whether the current configuration is correct (CheckConfig).

As in Linux, a queue disc may contain distinct elements:

  • queues, which actually store the packets waiting for transmission
  • classes, which allow to reserve a different treatment to different packets
  • filters, which determine the queue or class which a packet is destined to

Notice that a child queue disc must be attached to every class and a packet filter is only able to classify packets of a single protocol. Also, while in Linux some queue discs (e.g., fq-codel) use an internal classifier and do not make use of packet filters, in ns-3 every queue disc including multiple queues or multiple classes needs an external filter to classify packets (this is to avoid having the traffic-control module depend on other modules such as internet).

Queue disc configuration vary from queue disc to queue disc. A typical taxonomy divides queue discs in classful (i.e., support classes) and classless (i.e., do not support classes). More recently, after the appearance of multi-queue devices (such as Wifi), some multi-queue aware queue discs have been introduced. Multi-queue aware queue discs handle as many queues (or queue discs – without using classes) as the number of transmission queues used by the device on which the queue disc is installed. An attempt is made, also, to enqueue each packet in the "same" queue both within the queue disc and within the device.

The traffic control layer interacts with a queue disc in a simple manner: after requesting to enqueue a packet, the traffic control layer requests the qdisc to "run", i.e., to dequeue a set of packets, until a predefined number ("quota") of packets is dequeued or the netdevice stops the queue disc. A netdevice shall stop the queue disc when its transmission queue does not have room for another packet. Also, a netdevice shall wake the queue disc when it detects that there is room for another packet in its transmission queue, but the transmission queue is stopped. Waking a queue disc is equivalent to make it run.

Every queue disc collects statistics about the total number of packets/bytes received from the upper layers (in case of root queue disc) or from the parent queue disc (in case of child queue disc), enqueued, dequeued, requeued, dropped, dropped before enqueue, dropped after dequeue, queued in the queue disc and sent to the netdevice or to the parent queue disc. Note that packets that are dequeued may be requeued, i.e., retained by the traffic control infrastructure, if the netdevice is not ready to receive them. Requeued packets are not part of the queue disc. The following identities hold:

  • dropped = dropped before enqueue + dropped after dequeue
  • received = dropped before enqueue + enqueued
  • queued = enqueued - dequeued
  • sent = dequeued - dropped after dequeue (- 1 if there is a requeued packet)

Separate counters are also kept for each possible reason to drop a packet. When a packet is dropped by an internal queue, e.g., because the queue is full, the reason is "Dropped by internal queue". When a packet is dropped by a child queue disc, the reason is "(Dropped by child queue disc) " followed by the reason why the child queue disc dropped the packet.

The QueueDisc base class provides the SojournTime trace source, which provides the sojourn time of every packet dequeued from a queue disc, including packets that are dropped or requeued after being dequeued. The sojourn time is taken when the packet is dequeued from the queue disc, hence it does not account for the additional time the packet is retained within the traffic control infrastructure in case it is requeued.

The design and implementation of this class is heavily inspired by Linux. For more details, see the traffic-control model page.

Definition at line 172 of file queue-disc.h.

Member Typedef Documentation

◆ ChildQueueDiscDropFunctor

typedef std::function<void(Ptr<const QueueDiscItem>, const char*)> ns3::QueueDisc::ChildQueueDiscDropFunctor
private

Type for the function objects notifying that a packet has been dropped by a child queue disc.

Definition at line 718 of file queue-disc.h.

◆ ChildQueueDiscMarkFunctor

typedef std::function<void(Ptr<const QueueDiscItem>, const char*)> ns3::QueueDisc::ChildQueueDiscMarkFunctor
private

Type for the function objects notifying that a packet has been marked by a child queue disc.

Definition at line 720 of file queue-disc.h.

◆ InternalQueue

Internal queues store QueueDiscItem objects.

Definition at line 417 of file queue-disc.h.

◆ InternalQueueDropFunctor

typedef std::function<void(Ptr<const QueueDiscItem>)> ns3::QueueDisc::InternalQueueDropFunctor
private

Type for the function objects notifying that a packet has been dropped by an internal queue.

Definition at line 716 of file queue-disc.h.

◆ SendCallback

typedef std::function<void(Ptr<QueueDiscItem>)> ns3::QueueDisc::SendCallback

Callback invoked to send a packet to the receiving object when Run is called.

Definition at line 352 of file queue-disc.h.

Member Enumeration Documentation

◆ WakeMode

Used to determine whether the queue disc itself or its children must be activated when a netdevice wakes a transmission queue.

Enumerator
WAKE_ROOT 
WAKE_CHILD 

Definition at line 491 of file queue-disc.h.

Constructor & Destructor Documentation

◆ QueueDisc() [1/3]

ns3::QueueDisc::QueueDisc ( QueueDiscSizePolicy policy = QueueDiscSizePolicy::SINGLE_INTERNAL_QUEUE)

Constructor.

Parameters
policythe policy to handle the queue disc size

Definition at line 307 of file queue-disc.cc.

References CHILD_QUEUE_DISC_DROP, CHILD_QUEUE_DISC_MARK, DropAfterDequeue(), DropBeforeEnqueue(), INTERNAL_QUEUE_DROP, m_childQueueDiscDadFunctor, m_childQueueDiscDbeFunctor, m_childQueueDiscDropMsg, m_childQueueDiscMarkFunctor, m_childQueueDiscMarkMsg, m_internalQueueDadFunctor, m_internalQueueDbeFunctor, Mark(), NS_LOG_FUNCTION, and ns3::PeekPointer().

+ Here is the call graph for this function:

◆ QueueDisc() [2/3]

ns3::QueueDisc::QueueDisc ( QueueDiscSizePolicy policy,
QueueSizeUnit unit )

Constructor.

Parameters
policythe policy to handle the queue disc size
unitThe fixed operating mode of this queue disc

Definition at line 352 of file queue-disc.cc.

References m_maxSize, and m_prohibitChangeMode.

◆ ~QueueDisc()

ns3::QueueDisc::~QueueDisc ( )
override

Definition at line 359 of file queue-disc.cc.

References NS_LOG_FUNCTION.

◆ QueueDisc() [3/3]

ns3::QueueDisc::QueueDisc ( const QueueDisc & )
delete

Member Function Documentation

◆ AddInternalQueue()

void ns3::QueueDisc::AddInternalQueue ( Ptr< InternalQueue > queue)

Add an internal queue to the tail of the list of queues.

Parameters
queuethe queue to be added

Definition at line 562 of file queue-disc.cc.

References m_internalQueueDadFunctor, m_internalQueueDbeFunctor, m_queues, ns3::MakeCallback(), NS_LOG_FUNCTION, PacketDequeued(), and PacketEnqueued().

Referenced by ns3::CobaltQueueDisc::CheckConfig(), ns3::CoDelQueueDisc::CheckConfig(), ns3::FifoQueueDisc::CheckConfig(), ns3::PfifoFastQueueDisc::CheckConfig(), ns3::PieQueueDisc::CheckConfig(), ns3::RedQueueDisc::CheckConfig(), and TestChildQueueDisc::CheckConfig().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ AddPacketFilter()

void ns3::QueueDisc::AddPacketFilter ( Ptr< PacketFilter > filter)

Add a packet filter to the tail of the list of filters used to classify packets.

Parameters
filterthe packet filter to be added

Definition at line 593 of file queue-disc.cc.

References m_filters, and NS_LOG_FUNCTION.

◆ AddQueueDiscClass()

void ns3::QueueDisc::AddQueueDiscClass ( Ptr< QueueDiscClass > qdClass)

Add a queue disc class to the tail of the list of classes.

Parameters
qdClassthe queue disc class to be added

Definition at line 613 of file queue-disc.cc.

References m_childQueueDiscDadFunctor, m_childQueueDiscDbeFunctor, m_childQueueDiscMarkFunctor, m_classes, ns3::MakeCallback(), NS_ABORT_MSG_IF, NS_LOG_FUNCTION, PacketDequeued(), PacketEnqueued(), and WAKE_CHILD.

Referenced by ns3::PrioQueueDisc::CheckConfig(), ns3::TbfQueueDisc::CheckConfig(), TestParentQueueDisc::CheckConfig(), ns3::FqCobaltQueueDisc::DoEnqueue(), ns3::FqCoDelQueueDisc::DoEnqueue(), and ns3::FqPieQueueDisc::DoEnqueue().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CheckConfig()

virtual bool ns3::QueueDisc::CheckConfig ( )
privatepure virtual

Check whether the current configuration is correct.

Default objects (such as internal queues) might be created by this method to ensure the configuration is correct. This method is automatically called at simulation initialization time, and it is called before the InitializeParams () method. It is appropriate to promote parameter initialization to this method if it aids in checking for correct configuration.

See also
QueueDisc::InitializeParams
Returns
true if the configuration is correct, false otherwise

Implemented in ns3::CobaltQueueDisc, ns3::CoDelQueueDisc, ns3::FifoQueueDisc, ns3::FqCobaltQueueDisc, ns3::FqCoDelQueueDisc, ns3::FqPieQueueDisc, ns3::MqQueueDisc, ns3::PfifoFastQueueDisc, ns3::PieQueueDisc, ns3::PrioQueueDisc, ns3::RedQueueDisc, ns3::TbfQueueDisc, TestChildQueueDisc, and TestParentQueueDisc.

Referenced by DoInitialize().

+ Here is the caller graph for this function:

◆ Classify()

int32_t ns3::QueueDisc::Classify ( Ptr< QueueDiscItem > item)

Classify a packet by calling the packet filters, one at a time, until either a filter able to classify the packet is found or all the filters have been processed.

Parameters
itemitem to classify
Returns
-1 if no filter able to classify the packet has been found, the value returned by first filter found to be able to classify the packet otherwise.

Definition at line 656 of file queue-disc.cc.

References m_filters, NS_LOG_FUNCTION, and ns3::PacketFilter::PF_NO_MATCH.

Referenced by ns3::FqCobaltQueueDisc::DoEnqueue(), ns3::FqCoDelQueueDisc::DoEnqueue(), ns3::FqPieQueueDisc::DoEnqueue(), and ns3::PrioQueueDisc::DoEnqueue().

+ Here is the caller graph for this function:

◆ Dequeue()

Ptr< QueueDiscItem > ns3::QueueDisc::Dequeue ( )

Extract from the queue disc the packet that has been dequeued by calling Peek, if any, or call the private DoDequeue method (which must be implemented by derived classes) to dequeue a packet, otherwise.

Returns
0 if the operation was not successful; the item otherwise.

Definition at line 875 of file queue-disc.cc.

References DoDequeue(), m_nBytes, m_nPackets, m_peeked, m_requeued, m_stats, NS_ASSERT, NS_LOG_FUNCTION, ns3::QueueDisc::Stats::nTotalDequeuedBytes, ns3::QueueDisc::Stats::nTotalDequeuedPackets, ns3::QueueDisc::Stats::nTotalEnqueuedBytes, ns3::QueueDisc::Stats::nTotalEnqueuedPackets, and PacketDequeued().

Referenced by DequeuePacket(), ns3::PfifoFastQueueDisc::DoDequeue(), ns3::PrioQueueDisc::DoDequeue(), and DoPeek().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ DequeuePacket()

Ptr< QueueDiscItem > ns3::QueueDisc::DequeuePacket ( )
private

Modelled after the Linux function dequeue_skb (net/sched/sch_generic.c)

Returns
the requeued packet, if any, or the packet dequeued by the queue disc, otherwise.

Definition at line 989 of file queue-disc.cc.

References Dequeue(), m_devQueueIface, m_peeked, m_requeued, NS_LOG_FUNCTION, and PacketDequeued().

Referenced by Restart().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ DoDequeue()

virtual Ptr< QueueDiscItem > ns3::QueueDisc::DoDequeue ( )
privatepure virtual

This function actually extracts a packet from the queue disc.

Returns
0 if the operation was not successful; the item otherwise.

Implemented in ns3::CobaltQueueDisc, ns3::CoDelQueueDisc, ns3::FifoQueueDisc, ns3::FqCobaltQueueDisc, ns3::FqCoDelQueueDisc, ns3::FqPieQueueDisc, ns3::MqQueueDisc, ns3::PfifoFastQueueDisc, ns3::PieQueueDisc, ns3::PrioQueueDisc, ns3::RedQueueDisc, ns3::TbfQueueDisc, TestChildQueueDisc, and TestParentQueueDisc.

Referenced by Dequeue().

+ Here is the caller graph for this function:

◆ DoDispose()

void ns3::QueueDisc::DoDispose ( )
overrideprotectedvirtual

Dispose of the object.

Reimplemented from ns3::Object.

Reimplemented in ns3::RedQueueDisc, and ns3::TbfQueueDisc.

Definition at line 365 of file queue-disc.cc.

References ns3::Object::DoDispose(), m_childQueueDiscDadFunctor, m_childQueueDiscDbeFunctor, m_classes, m_devQueueIface, m_filters, m_internalQueueDadFunctor, m_internalQueueDbeFunctor, m_queues, m_requeued, m_send, and NS_LOG_FUNCTION.

Referenced by ns3::CobaltQueueDisc::DoDispose(), ns3::PieQueueDisc::DoDispose(), ns3::RedQueueDisc::DoDispose(), and ns3::TbfQueueDisc::DoDispose().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ DoEnqueue()

virtual bool ns3::QueueDisc::DoEnqueue ( Ptr< QueueDiscItem > item)
privatepure virtual

This function actually enqueues a packet into the queue disc.

Parameters
itemitem to enqueue
Returns
True if the operation was successful; false otherwise

Implemented in ns3::CobaltQueueDisc, ns3::CoDelQueueDisc, ns3::FifoQueueDisc, ns3::FqCobaltQueueDisc, ns3::FqCoDelQueueDisc, ns3::FqPieQueueDisc, ns3::MqQueueDisc, ns3::PfifoFastQueueDisc, ns3::PieQueueDisc, ns3::PrioQueueDisc, ns3::RedQueueDisc, ns3::TbfQueueDisc, TestChildQueueDisc, and TestParentQueueDisc.

Referenced by Enqueue().

+ Here is the caller graph for this function:

◆ DoInitialize()

void ns3::QueueDisc::DoInitialize ( )
overrideprotectedvirtual

Check whether the configuration is correct and initialize parameters.

This method is not virtual to prevent subclasses from redefining it. Subclasses must instead provide the implementation of the CheckConfig and InitializeParams methods (which are called by this method).

See also
QueueDisc::InitializeParams
QueueDisc::CheckConfig

Reimplemented from ns3::Object.

Definition at line 382 of file queue-disc.cc.

References CheckConfig(), ns3::Object::DoInitialize(), InitializeParams(), m_classes, NS_ASSERT_MSG, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ DoPeek()

Ptr< const QueueDiscItem > ns3::QueueDisc::DoPeek ( )
privatevirtual

Return a copy of the next packet the queue disc will extract.

The implementation of this method is based on the qdisc_peek_dequeued function of the Linux kernel, which dequeues a packet and retains it in the queue disc as a requeued packet. The packet is not traced as requeued, nor is the total count of requeued packets increased. The packet is still considered to be part of the queue disc and the dequeue trace is fired when Dequeue is called and the packet is actually extracted from the queue disc.

This approach is especially recommended for queue discs for which it is not obvious what is the next packet that will be dequeued (e.g., queue discs having multiple internal queues or child queue discs or queue discs that drop packets after dequeue). Subclasses can however provide their own implementation of this method that overrides the default one.

Returns
0 if the operation was not successful; the packet otherwise.

Reimplemented in ns3::CobaltQueueDisc, ns3::FifoQueueDisc, ns3::MqQueueDisc, ns3::PfifoFastQueueDisc, ns3::PrioQueueDisc, and ns3::RedQueueDisc.

Definition at line 916 of file queue-disc.cc.

References Dequeue(), m_peeked, m_requeued, and NS_LOG_FUNCTION.

Referenced by Peek().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ DropAfterDequeue()

void ns3::QueueDisc::DropAfterDequeue ( Ptr< const QueueDiscItem > item,
const char * reason )
protected

Perform the actions required when the queue disc is notified of a packet dropped after dequeue.

Parameters
itemitem that was dropped
reasonthe reason why the item was dropped This method must be called by subclasses to record that a packet was dropped after dequeue for the specified reason

Definition at line 748 of file queue-disc.cc.

References m_peeked, m_stats, m_traceDrop, m_traceDropAfterDequeue, ns3::QueueDisc::Stats::nDroppedBytesAfterDequeue, ns3::QueueDisc::Stats::nDroppedPacketsAfterDequeue, NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::QueueDisc::Stats::nTotalDroppedBytes, ns3::QueueDisc::Stats::nTotalDroppedBytesAfterDequeue, ns3::QueueDisc::Stats::nTotalDroppedPackets, ns3::QueueDisc::Stats::nTotalDroppedPacketsAfterDequeue, and PacketDequeued().

Referenced by QueueDisc(), ns3::CobaltQueueDisc::DoDequeue(), ns3::CoDelQueueDisc::DoDequeue(), TestChildQueueDisc::DoDequeue(), ns3::FqCobaltQueueDisc::FqCobaltDrop(), ns3::FqCoDelQueueDisc::FqCoDelDrop(), and ns3::FqPieQueueDisc::FqPieDrop().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ DropBeforeEnqueue()

void ns3::QueueDisc::DropBeforeEnqueue ( Ptr< const QueueDiscItem > item,
const char * reason )
protected

Perform the actions required when the queue disc is notified of a packet dropped before enqueue.

Parameters
itemitem that was dropped
reasonthe reason why the item was dropped This method must be called by subclasses to record that a packet was dropped before enqueue for the specified reason

Definition at line 709 of file queue-disc.cc.

References m_stats, m_traceDrop, m_traceDropBeforeEnqueue, ns3::QueueDisc::Stats::nDroppedBytesBeforeEnqueue, ns3::QueueDisc::Stats::nDroppedPacketsBeforeEnqueue, NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::QueueDisc::Stats::nTotalDroppedBytes, ns3::QueueDisc::Stats::nTotalDroppedBytesBeforeEnqueue, ns3::QueueDisc::Stats::nTotalDroppedPackets, and ns3::QueueDisc::Stats::nTotalDroppedPacketsBeforeEnqueue.

Referenced by QueueDisc(), ns3::CobaltQueueDisc::DoEnqueue(), ns3::CoDelQueueDisc::DoEnqueue(), ns3::FifoQueueDisc::DoEnqueue(), ns3::FqCobaltQueueDisc::DoEnqueue(), ns3::FqCoDelQueueDisc::DoEnqueue(), ns3::FqPieQueueDisc::DoEnqueue(), ns3::PfifoFastQueueDisc::DoEnqueue(), ns3::PieQueueDisc::DoEnqueue(), ns3::RedQueueDisc::DoEnqueue(), and TestChildQueueDisc::DoEnqueue().

+ Here is the caller graph for this function:

◆ Enqueue()

bool ns3::QueueDisc::Enqueue ( Ptr< QueueDiscItem > item)

Pass a packet to store to the queue discipline.

This function only updates the statistics and calls the (private) DoEnqueue function, which must be implemented by derived classes.

Parameters
itemitem to enqueue
Returns
True if the operation was successful; false otherwise

Definition at line 840 of file queue-disc.cc.

References DoEnqueue(), m_stats, ns3::Simulator::Now(), NS_ASSERT, NS_LOG_FUNCTION, ns3::QueueDisc::Stats::nTotalDroppedBytesBeforeEnqueue, ns3::QueueDisc::Stats::nTotalDroppedPacketsBeforeEnqueue, ns3::QueueDisc::Stats::nTotalEnqueuedBytes, ns3::QueueDisc::Stats::nTotalEnqueuedPackets, ns3::QueueDisc::Stats::nTotalReceivedBytes, and ns3::QueueDisc::Stats::nTotalReceivedPackets.

+ Here is the call graph for this function:

◆ GetCurrentSize()

QueueSize ns3::QueueDisc::GetCurrentSize ( ) const

Get the current size of the queue disc in bytes, if operating in bytes mode, or packets, otherwise.

Do not call this method if the queue disc size is not limited.

Returns
The queue disc size in bytes or packets.

Definition at line 504 of file queue-disc.cc.

References ns3::BYTES, GetMaxSize(), m_nBytes, m_nPackets, NS_ABORT_MSG, NS_LOG_FUNCTION, and ns3::PACKETS.

Referenced by ns3::CobaltQueueDisc::DoEnqueue(), ns3::CoDelQueueDisc::DoEnqueue(), ns3::FifoQueueDisc::DoEnqueue(), ns3::FqCobaltQueueDisc::DoEnqueue(), ns3::FqCoDelQueueDisc::DoEnqueue(), ns3::FqPieQueueDisc::DoEnqueue(), ns3::PfifoFastQueueDisc::DoEnqueue(), and ns3::PieQueueDisc::DoEnqueue().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GetInternalQueue()

◆ GetMaxSize()

QueueSize ns3::QueueDisc::GetMaxSize ( ) const

Get the maximum size of the queue disc.

Returns
the maximum size of the queue disc.

Definition at line 435 of file queue-disc.cc.

References GetInternalQueue(), GetNInternalQueues(), GetNQueueDiscClasses(), GetQueueDiscClass(), m_maxSize, m_sizePolicy, ns3::MULTIPLE_QUEUES, ns3::NO_LIMITS, NS_FATAL_ERROR, NS_LOG_FUNCTION, ns3::SINGLE_CHILD_QUEUE_DISC, and ns3::SINGLE_INTERNAL_QUEUE.

Referenced by ns3::CobaltQueueDisc::CheckConfig(), ns3::CoDelQueueDisc::CheckConfig(), ns3::FifoQueueDisc::CheckConfig(), ns3::PfifoFastQueueDisc::CheckConfig(), ns3::PieQueueDisc::CheckConfig(), ns3::RedQueueDisc::CheckConfig(), ns3::TbfQueueDisc::CheckConfig(), ns3::CobaltQueueDisc::DoEnqueue(), ns3::CoDelQueueDisc::DoEnqueue(), ns3::FifoQueueDisc::DoEnqueue(), ns3::FqCobaltQueueDisc::DoEnqueue(), ns3::FqCoDelQueueDisc::DoEnqueue(), ns3::FqPieQueueDisc::DoEnqueue(), ns3::PfifoFastQueueDisc::DoEnqueue(), ns3::PieQueueDisc::DoEnqueue(), ns3::PieQueueDisc::DropEarly(), GetCurrentSize(), ns3::CobaltQueueDisc::GetTypeId(), ns3::CoDelQueueDisc::GetTypeId(), ns3::FifoQueueDisc::GetTypeId(), ns3::FqCobaltQueueDisc::GetTypeId(), ns3::FqCoDelQueueDisc::GetTypeId(), ns3::FqPieQueueDisc::GetTypeId(), ns3::PfifoFastQueueDisc::GetTypeId(), ns3::PieQueueDisc::GetTypeId(), ns3::RedQueueDisc::GetTypeId(), ns3::TbfQueueDisc::GetTypeId(), ns3::FqCobaltQueueDisc::InitializeParams(), ns3::FqCoDelQueueDisc::InitializeParams(), ns3::FqPieQueueDisc::InitializeParams(), ns3::RedQueueDisc::InitializeParams(), and ns3::RedQueueDisc::ModifyP().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GetNBytes()

uint32_t ns3::QueueDisc::GetNBytes ( ) const

Get the amount of bytes stored by the queue disc.

Returns
the amount of bytes stored by the queue disc.

The requeued packet, if any, is counted.

Definition at line 428 of file queue-disc.cc.

References m_nBytes, and NS_LOG_FUNCTION.

Referenced by ns3::PieQueueDisc::CalculateP(), ns3::CobaltQueueDisc::DoDequeue(), ns3::CoDelQueueDisc::DoDequeue(), ns3::PieQueueDisc::DoDequeue(), ns3::RedQueueDisc::DoDequeue(), ns3::TbfQueueDisc::DoDequeue(), ns3::CobaltQueueDisc::DoEnqueue(), ns3::CoDelQueueDisc::DoEnqueue(), ns3::FifoQueueDisc::DoEnqueue(), ns3::PieQueueDisc::DoEnqueue(), ns3::RedQueueDisc::DoEnqueue(), ns3::TbfQueueDisc::DoEnqueue(), ns3::CobaltQueueDisc::DoPeek(), ns3::RedQueueDisc::DoPeek(), and ns3::CoDelQueueDisc::OkToDrop().

+ Here is the caller graph for this function:

◆ GetNetDeviceQueueInterface()

Ptr< NetDeviceQueueInterface > ns3::QueueDisc::GetNetDeviceQueueInterface ( ) const
Returns
the NetDeviceQueueInterface aggregated to the receiving object.

Get the pointer to the NetDeviceQueueInterface object aggregated to the object receiving the packets dequeued from this queue disc.

Definition at line 527 of file queue-disc.cc.

References m_devQueueIface, and NS_LOG_FUNCTION.

Referenced by ns3::FqCobaltQueueDisc::CheckConfig(), ns3::FqCoDelQueueDisc::CheckConfig(), ns3::FqPieQueueDisc::CheckConfig(), and ns3::TbfQueueDisc::CheckConfig().

+ Here is the caller graph for this function:

◆ GetNInternalQueues()

std::size_t ns3::QueueDisc::GetNInternalQueues ( ) const

◆ GetNPacketFilters()

std::size_t ns3::QueueDisc::GetNPacketFilters ( ) const

Get the number of packet filters.

Returns
the number of packet filters.

Definition at line 607 of file queue-disc.cc.

References m_filters.

Referenced by ns3::CobaltQueueDisc::CheckConfig(), ns3::CoDelQueueDisc::CheckConfig(), ns3::FifoQueueDisc::CheckConfig(), ns3::MqQueueDisc::CheckConfig(), ns3::PfifoFastQueueDisc::CheckConfig(), ns3::PieQueueDisc::CheckConfig(), ns3::RedQueueDisc::CheckConfig(), ns3::TbfQueueDisc::CheckConfig(), ns3::FqCobaltQueueDisc::DoEnqueue(), ns3::FqCoDelQueueDisc::DoEnqueue(), and ns3::FqPieQueueDisc::DoEnqueue().

+ Here is the caller graph for this function:

◆ GetNPackets()

◆ GetNQueueDiscClasses()

◆ GetPacketFilter()

Ptr< PacketFilter > ns3::QueueDisc::GetPacketFilter ( std::size_t i) const

Get the i-th packet filter.

Parameters
ithe index of the packet filter
Returns
the i-th packet filter.

Definition at line 600 of file queue-disc.cc.

References m_filters, and NS_ASSERT.

◆ GetQueueDiscClass()

Ptr< QueueDiscClass > ns3::QueueDisc::GetQueueDiscClass ( std::size_t i) const

◆ GetQuota()

uint32_t ns3::QueueDisc::GetQuota ( ) const
virtual

Get the maximum number of dequeue operations following a packet enqueue.

Returns
the maximum number of dequeue operations following a packet enqueue.

Definition at line 555 of file queue-disc.cc.

References m_quota, and NS_LOG_FUNCTION.

Referenced by GetTypeId().

+ Here is the caller graph for this function:

◆ GetSendCallback()

QueueDisc::SendCallback ns3::QueueDisc::GetSendCallback ( ) const
Returns
the callback to send a packet to the receiving object.

Get the callback used by the Transmit method (called eventually by the Run method) to send a packet to the receiving object.

Definition at line 541 of file queue-disc.cc.

References m_send, and NS_LOG_FUNCTION.

◆ GetStats()

◆ GetTypeId()

TypeId ns3::QueueDisc::GetTypeId ( )
static

Get the type ID.

Returns
the object TypeId

Definition at line 238 of file queue-disc.cc.

References DEFAULT_QUOTA, GetQuota(), m_classes, m_filters, m_nBytes, m_nPackets, m_queues, m_sojourn, m_traceDequeue, m_traceDrop, m_traceDropAfterDequeue, m_traceDropBeforeEnqueue, m_traceEnqueue, m_traceMark, m_traceRequeue, ns3::MakeObjectVectorAccessor(), ns3::MakeObjectVectorChecker(), ns3::MakeTraceSourceAccessor(), ns3::MakeUintegerAccessor(), ns3::MakeUintegerChecker(), ns3::TypeId::SetParent(), and SetQuota().

+ Here is the call graph for this function:

◆ GetWakeMode()

QueueDisc::WakeMode ns3::QueueDisc::GetWakeMode ( ) const
virtual

When setting up the wake callbacks on the netdevice queues, it is necessary to determine which queue disc (the root queue disc or one of its children) should be activated when the netdevice wakes one of its transmission queues.

The implementation of this method for the base class returns WAKE_ROOT, i.e., the root queue disc is activated. Subclasses implementing queue discs adopting a different strategy (e.g., multi-queue aware queue discs such as mq) have to redefine this method.

Returns
the wake mode adopted by this queue disc.

Reimplemented in ns3::MqQueueDisc.

Definition at line 669 of file queue-disc.cc.

References WAKE_ROOT.

◆ InitializeParams()

virtual void ns3::QueueDisc::InitializeParams ( )
privatepure virtual

Initialize parameters (if any) before the first packet is enqueued.

This method is automatically called at simulation initialization time, after the CheckConfig() method has been called.

See also
QueueDisc::CheckConfig

Implemented in ns3::CobaltQueueDisc, ns3::CoDelQueueDisc, ns3::FifoQueueDisc, ns3::FqCobaltQueueDisc, ns3::FqCoDelQueueDisc, ns3::FqPieQueueDisc, ns3::MqQueueDisc, ns3::PfifoFastQueueDisc, ns3::PieQueueDisc, ns3::PrioQueueDisc, ns3::RedQueueDisc, ns3::TbfQueueDisc, TestChildQueueDisc, and TestParentQueueDisc.

Referenced by DoInitialize().

+ Here is the caller graph for this function:

◆ Mark()

bool ns3::QueueDisc::Mark ( Ptr< QueueDiscItem > item,
const char * reason )
protected

Marks the given packet and, if successful, updates the counters associated with the given reason.

Parameters
itemitem that has to be marked
reasonthe reason why the item has to be marked
Returns
true if the item was successfully marked, false otherwise

Definition at line 798 of file queue-disc.cc.

References m_stats, m_traceMark, ns3::QueueDisc::Stats::nMarkedBytes, ns3::QueueDisc::Stats::nMarkedPackets, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::QueueDisc::Stats::nTotalMarkedBytes, and ns3::QueueDisc::Stats::nTotalMarkedPackets.

Referenced by QueueDisc(), ns3::CobaltQueueDisc::CobaltShouldDrop(), ns3::CoDelQueueDisc::DoDequeue(), ns3::PieQueueDisc::DoDequeue(), ns3::PieQueueDisc::DoEnqueue(), and ns3::RedQueueDisc::DoEnqueue().

+ Here is the caller graph for this function:

◆ operator=()

QueueDisc & ns3::QueueDisc::operator= ( const QueueDisc & )
delete

◆ PacketDequeued()

void ns3::QueueDisc::PacketDequeued ( Ptr< const QueueDiscItem > item)
private

Perform the actions required when the queue disc is notified of a packet dequeue.

Parameters
itemitem that was dequeued

Definition at line 687 of file queue-disc.cc.

References m_nBytes, m_nPackets, m_peeked, m_sojourn, m_stats, m_traceDequeue, ns3::Simulator::Now(), NS_LOG_LOGIC, ns3::QueueDisc::Stats::nTotalDequeuedBytes, and ns3::QueueDisc::Stats::nTotalDequeuedPackets.

Referenced by AddInternalQueue(), AddQueueDiscClass(), Dequeue(), DequeuePacket(), and DropAfterDequeue().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ PacketEnqueued()

void ns3::QueueDisc::PacketEnqueued ( Ptr< const QueueDiscItem > item)
private

Perform the actions required when the queue disc is notified of a packet enqueue.

Parameters
itemitem that was enqueued

Definition at line 675 of file queue-disc.cc.

References m_nBytes, m_nPackets, m_stats, m_traceEnqueue, NS_LOG_LOGIC, ns3::QueueDisc::Stats::nTotalEnqueuedBytes, and ns3::QueueDisc::Stats::nTotalEnqueuedPackets.

Referenced by AddInternalQueue(), and AddQueueDiscClass().

+ Here is the caller graph for this function:

◆ Peek()

Ptr< const QueueDiscItem > ns3::QueueDisc::Peek ( )

Get a copy of the next packet the queue discipline will extract.

This function only calls the (private) DoPeek function. This base class provides a default implementation of DoPeek, which dequeues the next packet but retains it into the queue disc.

Returns
0 if the operation was not successful; the item otherwise.

Definition at line 909 of file queue-disc.cc.

References DoPeek(), and NS_LOG_FUNCTION.

Referenced by ns3::PfifoFastQueueDisc::DoPeek(), and ns3::PrioQueueDisc::DoPeek().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Requeue()

void ns3::QueueDisc::Requeue ( Ptr< QueueDiscItem > item)
private

Modelled after the Linux function dev_requeue_skb (net/sched/sch_generic.c) Requeues a packet whose transmission failed.

Parameters
itemthe packet to requeue
Todo
netif_schedule (q);

Definition at line 1039 of file queue-disc.cc.

References m_requeued, m_stats, m_traceRequeue, NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::QueueDisc::Stats::nTotalRequeuedBytes, and ns3::QueueDisc::Stats::nTotalRequeuedPackets.

Referenced by Transmit().

+ Here is the caller graph for this function:

◆ Restart()

bool ns3::QueueDisc::Restart ( )
private

Modelled after the Linux function qdisc_restart (net/sched/sch_generic.c) Dequeue a packet (by calling DequeuePacket) and send it to the device (by calling Transmit).

Returns
true if a packet is successfully sent to the device.

Definition at line 975 of file queue-disc.cc.

References DequeuePacket(), NS_LOG_FUNCTION, NS_LOG_LOGIC, and Transmit().

Referenced by Run().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Run()

void ns3::QueueDisc::Run ( )

Modelled after the Linux function __qdisc_run (net/sched/sch_generic.c) Dequeues multiple packets, until a quota is exceeded or sending a packet to the device failed.

Todo
netif_schedule (q);

Definition at line 934 of file queue-disc.cc.

References m_quota, NS_LOG_FUNCTION, Restart(), RunBegin(), and RunEnd().

Referenced by ns3::TbfQueueDisc::DoDequeue(), and ns3::TrafficControlLayer::ScanDevices().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ RunBegin()

bool ns3::QueueDisc::RunBegin ( )
private

Modelled after the Linux function qdisc_run_begin (include/net/sch_generic.h).

Returns
false if the qdisc is already running; otherwise, set the qdisc as running and return true.

Definition at line 955 of file queue-disc.cc.

References m_running, and NS_LOG_FUNCTION.

Referenced by Run().

+ Here is the caller graph for this function:

◆ RunEnd()

void ns3::QueueDisc::RunEnd ( )
private

Modelled after the Linux function qdisc_run_end (include/net/sch_generic.h).

Set the qdisc as not running.

Definition at line 968 of file queue-disc.cc.

References m_running, and NS_LOG_FUNCTION.

Referenced by Run().

+ Here is the caller graph for this function:

◆ SetMaxSize()

bool ns3::QueueDisc::SetMaxSize ( QueueSize size)

Set the maximum size of the queue disc.

Trying to set a null size has no effect.

Parameters
sizethe maximum size.
Returns
true if setting the size succeeded, false otherwise.

Definition at line 463 of file queue-disc.cc.

References GetInternalQueue(), GetNInternalQueues(), GetNQueueDiscClasses(), GetQueueDiscClass(), ns3::QueueSize::GetUnit(), ns3::QueueSize::GetValue(), m_maxSize, m_prohibitChangeMode, m_sizePolicy, ns3::MULTIPLE_QUEUES, ns3::NO_LIMITS, NS_FATAL_ERROR, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::SINGLE_CHILD_QUEUE_DISC, and ns3::SINGLE_INTERNAL_QUEUE.

Referenced by ns3::CobaltQueueDisc::GetTypeId(), ns3::CoDelQueueDisc::GetTypeId(), ns3::FifoQueueDisc::GetTypeId(), ns3::FqCobaltQueueDisc::GetTypeId(), ns3::FqCoDelQueueDisc::GetTypeId(), ns3::FqPieQueueDisc::GetTypeId(), ns3::PfifoFastQueueDisc::GetTypeId(), ns3::PieQueueDisc::GetTypeId(), ns3::RedQueueDisc::GetTypeId(), and ns3::TbfQueueDisc::GetTypeId().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ SetNetDeviceQueueInterface()

void ns3::QueueDisc::SetNetDeviceQueueInterface ( Ptr< NetDeviceQueueInterface > ndqi)
Parameters
ndqithe NetDeviceQueueInterface aggregated to the receiving object.

Set the pointer to the NetDeviceQueueInterface object aggregated to the object receiving the packets dequeued from this queue disc.

Definition at line 520 of file queue-disc.cc.

References m_devQueueIface, and NS_LOG_FUNCTION.

◆ SetQuota()

void ns3::QueueDisc::SetQuota ( const uint32_t quota)
virtual

Set the maximum number of dequeue operations following a packet enqueue.

Parameters
quotathe maximum number of dequeue operations following a packet enqueue.

Definition at line 548 of file queue-disc.cc.

References m_quota, and NS_LOG_FUNCTION.

Referenced by GetTypeId().

+ Here is the caller graph for this function:

◆ SetSendCallback()

void ns3::QueueDisc::SetSendCallback ( SendCallback func)
Parameters
functhe callback to send a packet to the receiving object.

Set the callback used by the Transmit method (called eventually by the Run method) to send a packet to the receiving object.

Definition at line 534 of file queue-disc.cc.

References m_send, and NS_LOG_FUNCTION.

◆ Transmit()

bool ns3::QueueDisc::Transmit ( Ptr< QueueDiscItem > item)
private

Modelled after the Linux function sch_direct_xmit (net/sched/sch_generic.c) Sends a packet to the device if the device queue is not stopped, and requeues it otherwise.

Parameters
itemthe packet to transmit
Returns
true if the device queue is not stopped and the queue disc is not empty

Definition at line 1053 of file queue-disc.cc.

References GetNPackets(), m_devQueueIface, m_send, NS_ASSERT_MSG, NS_LOG_FUNCTION, and Requeue().

Referenced by Restart().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Member Data Documentation

◆ CHILD_QUEUE_DISC_DROP

const char* ns3::QueueDisc::CHILD_QUEUE_DISC_DROP
staticconstexpr
Initial value:
=
"(Dropped by child queue disc) "

Packet dropped by a child queue disc.

Definition at line 513 of file queue-disc.h.

Referenced by QueueDisc().

◆ CHILD_QUEUE_DISC_MARK

const char* ns3::QueueDisc::CHILD_QUEUE_DISC_MARK
staticconstexpr
Initial value:
=
"(Marked by child queue disc) "

Packet marked by a child queue disc.

Definition at line 515 of file queue-disc.h.

Referenced by QueueDisc().

◆ DEFAULT_QUOTA

const uint32_t ns3::QueueDisc::DEFAULT_QUOTA = 64
staticprivate

Default quota (as in /proc/sys/net/core/dev_weight)

Definition at line 677 of file queue-disc.h.

Referenced by GetTypeId().

◆ INTERNAL_QUEUE_DROP

const char* ns3::QueueDisc::INTERNAL_QUEUE_DROP
staticconstexpr
Initial value:
=
"Dropped by internal queue"

Packet dropped by an internal queue.

Definition at line 511 of file queue-disc.h.

Referenced by QueueDisc(), and RedQueueDiscTestCase::RunRedTest().

◆ m_childQueueDiscDadFunctor

ChildQueueDiscDropFunctor ns3::QueueDisc::m_childQueueDiscDadFunctor
private

Function object called when a child queue disc dropped a packet after dequeue.

Definition at line 729 of file queue-disc.h.

Referenced by QueueDisc(), AddQueueDiscClass(), and DoDispose().

◆ m_childQueueDiscDbeFunctor

ChildQueueDiscDropFunctor ns3::QueueDisc::m_childQueueDiscDbeFunctor
private

Function object called when a child queue disc dropped a packet before enqueue.

Definition at line 727 of file queue-disc.h.

Referenced by QueueDisc(), AddQueueDiscClass(), and DoDispose().

◆ m_childQueueDiscDropMsg

std::string ns3::QueueDisc::m_childQueueDiscDropMsg
private

Reason why a packet was dropped by a child queue disc.

Definition at line 695 of file queue-disc.h.

Referenced by QueueDisc().

◆ m_childQueueDiscMarkFunctor

ChildQueueDiscMarkFunctor ns3::QueueDisc::m_childQueueDiscMarkFunctor
private

Function object called when a child queue disc marked a packet.

Definition at line 731 of file queue-disc.h.

Referenced by QueueDisc(), and AddQueueDiscClass().

◆ m_childQueueDiscMarkMsg

std::string ns3::QueueDisc::m_childQueueDiscMarkMsg
private

Reason why a packet was marked by a child queue disc.

Definition at line 696 of file queue-disc.h.

Referenced by QueueDisc().

◆ m_classes

std::vector<Ptr<QueueDiscClass> > ns3::QueueDisc::m_classes
private

◆ m_devQueueIface

Ptr<NetDeviceQueueInterface> ns3::QueueDisc::m_devQueueIface
private

◆ m_filters

std::vector<Ptr<PacketFilter> > ns3::QueueDisc::m_filters
private

Packet filters.

Definition at line 680 of file queue-disc.h.

Referenced by AddPacketFilter(), Classify(), DoDispose(), GetNPacketFilters(), GetPacketFilter(), and GetTypeId().

◆ m_internalQueueDadFunctor

InternalQueueDropFunctor ns3::QueueDisc::m_internalQueueDadFunctor
private

Function object called when an internal queue dropped a packet after dequeue.

Definition at line 725 of file queue-disc.h.

Referenced by QueueDisc(), AddInternalQueue(), and DoDispose().

◆ m_internalQueueDbeFunctor

InternalQueueDropFunctor ns3::QueueDisc::m_internalQueueDbeFunctor
private

Function object called when an internal queue dropped a packet before enqueue.

Definition at line 723 of file queue-disc.h.

Referenced by QueueDisc(), AddInternalQueue(), and DoDispose().

◆ m_maxSize

QueueSize ns3::QueueDisc::m_maxSize
private

max queue size

Definition at line 686 of file queue-disc.h.

Referenced by QueueDisc(), GetMaxSize(), and SetMaxSize().

◆ m_nBytes

TracedValue<uint32_t> ns3::QueueDisc::m_nBytes
private

Number of bytes in the queue.

Definition at line 684 of file queue-disc.h.

Referenced by Dequeue(), GetCurrentSize(), GetNBytes(), GetTypeId(), PacketDequeued(), and PacketEnqueued().

◆ m_nPackets

TracedValue<uint32_t> ns3::QueueDisc::m_nPackets
private

Number of packets in the queue.

Definition at line 683 of file queue-disc.h.

Referenced by Dequeue(), GetCurrentSize(), GetNPackets(), GetTypeId(), PacketDequeued(), and PacketEnqueued().

◆ m_peeked

bool ns3::QueueDisc::m_peeked
private

A packet was dequeued because Peek was called.

Definition at line 694 of file queue-disc.h.

Referenced by Dequeue(), DequeuePacket(), DoPeek(), DropAfterDequeue(), and PacketDequeued().

◆ m_prohibitChangeMode

bool ns3::QueueDisc::m_prohibitChangeMode
private

True if changing mode is prohibited.

Definition at line 698 of file queue-disc.h.

Referenced by QueueDisc(), and SetMaxSize().

◆ m_queues

std::vector<Ptr<InternalQueue> > ns3::QueueDisc::m_queues
private

Internal queues.

Definition at line 679 of file queue-disc.h.

Referenced by AddInternalQueue(), DoDispose(), GetInternalQueue(), GetNInternalQueues(), and GetTypeId().

◆ m_quota

uint32_t ns3::QueueDisc::m_quota
private

Maximum number of packets dequeued in a qdisc run.

Definition at line 689 of file queue-disc.h.

Referenced by GetQuota(), Run(), and SetQuota().

◆ m_requeued

Ptr<QueueDiscItem> ns3::QueueDisc::m_requeued
private

The last packet that failed to be transmitted.

Definition at line 693 of file queue-disc.h.

Referenced by Dequeue(), DequeuePacket(), DoDispose(), DoPeek(), GetStats(), and Requeue().

◆ m_running

bool ns3::QueueDisc::m_running
private

The queue disc is performing multiple dequeue operations.

Definition at line 692 of file queue-disc.h.

Referenced by RunBegin(), and RunEnd().

◆ m_send

SendCallback ns3::QueueDisc::m_send
private

Callback used to send a packet to the receiving object.

Definition at line 691 of file queue-disc.h.

Referenced by DoDispose(), GetSendCallback(), SetSendCallback(), and Transmit().

◆ m_sizePolicy

QueueDiscSizePolicy ns3::QueueDisc::m_sizePolicy
private

The queue disc size policy.

Definition at line 697 of file queue-disc.h.

Referenced by GetMaxSize(), and SetMaxSize().

◆ m_sojourn

TracedCallback<Time> ns3::QueueDisc::m_sojourn
private

Sojourn time of the latest dequeued packet.

Definition at line 685 of file queue-disc.h.

Referenced by GetTypeId(), and PacketDequeued().

◆ m_stats

Stats ns3::QueueDisc::m_stats
private

The collected statistics.

Definition at line 688 of file queue-disc.h.

Referenced by Dequeue(), DropAfterDequeue(), DropBeforeEnqueue(), Enqueue(), GetStats(), Mark(), PacketDequeued(), PacketEnqueued(), and Requeue().

◆ m_traceDequeue

TracedCallback<Ptr<const QueueDiscItem> > ns3::QueueDisc::m_traceDequeue
private

Traced callback: fired when a packet is dequeued.

Definition at line 703 of file queue-disc.h.

Referenced by GetTypeId(), and PacketDequeued().

◆ m_traceDrop

TracedCallback<Ptr<const QueueDiscItem> > ns3::QueueDisc::m_traceDrop
private

Traced callback: fired when a packet is dropped.

Definition at line 707 of file queue-disc.h.

Referenced by DropAfterDequeue(), DropBeforeEnqueue(), and GetTypeId().

◆ m_traceDropAfterDequeue

TracedCallback<Ptr<const QueueDiscItem>, const char*> ns3::QueueDisc::m_traceDropAfterDequeue
private

Traced callback: fired when a packet is dropped after dequeue.

Definition at line 711 of file queue-disc.h.

Referenced by DropAfterDequeue(), and GetTypeId().

◆ m_traceDropBeforeEnqueue

TracedCallback<Ptr<const QueueDiscItem>, const char*> ns3::QueueDisc::m_traceDropBeforeEnqueue
private

Traced callback: fired when a packet is dropped before enqueue.

Definition at line 709 of file queue-disc.h.

Referenced by DropBeforeEnqueue(), and GetTypeId().

◆ m_traceEnqueue

TracedCallback<Ptr<const QueueDiscItem> > ns3::QueueDisc::m_traceEnqueue
private

Traced callback: fired when a packet is enqueued.

Definition at line 701 of file queue-disc.h.

Referenced by GetTypeId(), and PacketEnqueued().

◆ m_traceMark

TracedCallback<Ptr<const QueueDiscItem>, const char*> ns3::QueueDisc::m_traceMark
private

Traced callback: fired when a packet is marked.

Definition at line 713 of file queue-disc.h.

Referenced by GetTypeId(), and Mark().

◆ m_traceRequeue

TracedCallback<Ptr<const QueueDiscItem> > ns3::QueueDisc::m_traceRequeue
private

Traced callback: fired when a packet is requeued.

Definition at line 705 of file queue-disc.h.

Referenced by GetTypeId(), and Requeue().


The documentation for this class was generated from the following files: