20 #ifndef NET_DEVICE_QUEUE_INTERFACE_H 21 #define NET_DEVICE_QUEUE_INTERFACE_H 25 #include "ns3/callback.h" 26 #include "ns3/object.h" 29 #include "ns3/net-device.h" 34 class NetDeviceQueueInterface;
65 virtual void Start (
void);
71 virtual void Stop (
void);
78 virtual void Wake (
void);
155 template <
typename QueueType>
170 template <
typename QueueType>
185 template <
typename QueueType>
196 template <
typename QueueType>
305 template <
typename QueueType>
311 queue->TraceConnectWithoutContext (
"Enqueue",
312 MakeCallback (&NetDeviceQueue::PacketEnqueued<QueueType>,
this)
314 queue->TraceConnectWithoutContext (
"Dequeue",
315 MakeCallback (&NetDeviceQueue::PacketDequeued<QueueType>,
this)
317 queue->TraceConnectWithoutContext (
"DropBeforeEnqueue",
318 MakeCallback (&NetDeviceQueue::PacketDiscarded<QueueType>,
this)
322 template <
typename QueueType>
337 if (queue->GetCurrentSize () + p > queue->GetMaxSize ())
339 NS_LOG_DEBUG (
"The device queue is being stopped (" << queue->GetCurrentSize ()
345 template <
typename QueueType>
361 if (queue->GetCurrentSize () + p <= queue->GetMaxSize ())
367 template <
typename QueueType>
378 NS_LOG_ERROR (
"BUG! No room in the device queue for the received packet! (" 379 << queue->GetCurrentSize () <<
" inside)");
void ConnectQueueTraces(Ptr< QueueType > queue)
Connect the traced callbacks of a queue to the methods providing support for flow control and dynamic...
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 "...
NS_ASSERT_MSG(false, "Ipv4AddressGenerator::MaskToIndex(): Impossible")
bool m_stoppedByDevice
True if the queue has been stopped by the device.
void NotifyQueuedBytes(uint32_t bytes)
Called by the netdevice to report the number of bytes queued to the device queue. ...
bool m_stoppedByQueueLimits
True if the queue has been stopped by a queue limits object.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
U * PeekPointer(const Ptr< U > &p)
WakeCallback m_wakeCallback
Wake callback.
void SetSelectQueueCallback(SelectQueueCallback cb)
Set the select queue callback.
NS_LOG_TEMPLATE_DECLARE
redefinition of the log component
void NotifyAggregatedObject(Ptr< NetDeviceQueueInterface > ndqi)
Notify this NetDeviceQueue that the NetDeviceQueueInterface was aggregated to an object.
bool IsStopped(void) const
Get the status of the device transmission queue.
std::size_t GetNTxQueues(void) const
Get the number of device transmission queues.
Callback< void > WakeCallback
Callback invoked by netdevices to wake upper layers.
virtual void Start(void)
Called by the device to start this device transmission queue.
void PacketDiscarded(QueueType *queue, Ptr< const typename QueueType::ItemType > item)
Perform the actions required by flow control and dynamic queue limits when a packet is dropped before...
void PacketEnqueued(QueueType *queue, Ptr< const typename QueueType::ItemType > item)
Perform the actions required by flow control and dynamic queue limits when a packet is enqueued in th...
void PacketDequeued(QueueType *queue, Ptr< const typename QueueType::ItemType > item)
Perform the actions required by flow control and dynamic queue limits when a packet is dequeued (or d...
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
static TypeId GetTypeId(void)
Get the type ID.
SelectQueueCallback m_selectQueueCallback
Select queue callback.
Network device transmission queue interface.
SelectQueueCallback GetSelectQueueCallback(void) const
Get the select queue callback.
void ResetQueueLimits()
Reset queue limits state.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
virtual void Stop(void)
Called by the device to stop this device transmission queue.
std::vector< Ptr< NetDeviceQueue > > m_txQueuesVector
Device transmission queues.
virtual void DoDispose(void)
Dispose of the object.
void SetQueueLimits(Ptr< QueueLimits > ql)
Set queue limits to this queue.
std::function< std::size_t(Ptr< QueueItem >)> SelectQueueCallback
Callback invoked to determine the tx queue selected for a given packet.
void NotifyTransmittedBytes(uint32_t bytes)
Called by the netdevice to report the number of bytes it is going to transmit.
Ptr< QueueLimits > m_queueLimits
Queue limits object.
NetDeviceQueueInterface()
Constructor.
virtual void Wake(void)
Called by the device to wake the queue disc associated with this device transmission queue...
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Ptr< NetDevice > m_device
the netdevice aggregated to the NetDeviceQueueInterface
Ptr< QueueLimits > GetQueueLimits()
Get queue limits to this queue.
virtual void SetWakeCallback(WakeCallback cb)
Set the wake callback.
#define NS_LOG_ERROR(msg)
Use NS_LOG to output a message of level LOG_ERROR.
virtual ~NetDeviceQueueInterface()
Ptr< NetDeviceQueue > GetTxQueue(std::size_t i) const
Get the i-th transmission queue of the device.
A base class which provides memory management and object aggregation.
virtual void NotifyNewAggregate(void)
Notify that an object was aggregated.
virtual ~NetDeviceQueue()
void SetNTxQueues(std::size_t numTxQueues)
Set the number of device transmission queues to create.
Network device transmission queue.
A template-based reference counting class.
a unique identifier for an interface.