A Discrete-Event Network Simulator
API
ns3::WifiMacQueue Class Reference

This queue implements the timeout procedure described in (Section 9.19.2.6 "Retransmit procedures" paragraph 6; IEEE 802.11-2012). More...

#include "wifi-mac-queue.h"

+ Inheritance diagram for ns3::WifiMacQueue:
+ Collaboration diagram for ns3::WifiMacQueue:

Public Types

enum  DropPolicy { DROP_NEWEST, DROP_OLDEST }
 drop policy More...
 

Public Member Functions

 WifiMacQueue ()
 
 ~WifiMacQueue ()
 
Ptr< WifiMacQueueItemDequeue (void)
 Dequeue the packet in the front of the queue. More...
 
Ptr< WifiMacQueueItemDequeue (WifiMacQueue::ConstIterator pos)
 Dequeue the item at position pos in the queue. More...
 
Ptr< WifiMacQueueItemDequeueByAddress (Mac48Address dest)
 Search and return, if present in the queue, the first packet (either Data frame or QoS Data frame) having the receiver address equal to addr. More...
 
Ptr< WifiMacQueueItemDequeueByTid (uint8_t tid)
 Search and return, if present in the queue, the first packet having the TID equal to tid. More...
 
Ptr< WifiMacQueueItemDequeueByTidAndAddress (uint8_t tid, Mac48Address dest)
 Search and return, if present in the queue, the first packet having the address indicated by type equal to addr, and TID equal to tid. More...
 
Ptr< WifiMacQueueItemDequeueFirstAvailable (const Ptr< QosBlockedDestinations > blockedPackets=nullptr)
 Return first available packet for transmission. More...
 
bool Enqueue (Ptr< WifiMacQueueItem > item)
 Enqueue the given Wifi MAC queue item at the end of the queue. More...
 
Time GetMaxDelay (void) const
 Return the maximum delay before the packet is discarded. More...
 
uint32_t GetNBytes (void)
 
uint32_t GetNPackets (void)
 
uint32_t GetNPacketsByAddress (Mac48Address dest)
 Return the number of packets having destination address specified by dest. More...
 
uint32_t GetNPacketsByTidAndAddress (uint8_t tid, Mac48Address dest)
 Return the number of QoS packets having TID equal to tid and destination address equal to dest. More...
 
bool Insert (ConstIterator pos, Ptr< WifiMacQueueItem > item)
 Enqueue the given Wifi MAC queue item before the given position. More...
 
bool IsEmpty (void)
 
Ptr< const WifiMacQueueItemPeek (void) const
 Peek the packet in the front of the queue. More...
 
ConstIterator PeekByAddress (Mac48Address dest, ConstIterator pos=EMPTY) const
 Search and return, if present in the queue, the first packet (either Data frame or QoS Data frame) having the receiver address equal to addr. More...
 
ConstIterator PeekByTid (uint8_t tid, ConstIterator pos=EMPTY) const
 Search and return, if present in the queue, the first packet having the TID equal to tid. More...
 
ConstIterator PeekByTidAndAddress (uint8_t tid, Mac48Address dest, ConstIterator pos=EMPTY) const
 Search and return, if present in the queue, the first packet having the receiver address equal to dest, and TID equal to tid. More...
 
ConstIterator PeekFirstAvailable (const Ptr< QosBlockedDestinations > blockedPackets=nullptr, ConstIterator pos=EMPTY) const
 Return first available packet for transmission. More...
 
bool PushFront (Ptr< WifiMacQueueItem > item)
 Enqueue the given Wifi MAC queue item at the front of the queue. More...
 
Ptr< WifiMacQueueItemRemove (void)
 Remove the packet in the front of the queue. More...
 
bool Remove (Ptr< const Packet > packet)
 If exists, removes packet from queue and returns true. More...
 
ConstIterator Remove (ConstIterator pos, bool removeExpired=false)
 Remove the item at position pos in the queue and return an iterator pointing to the item following the removed one. More...
 
void SetMaxDelay (Time delay)
 Set the maximum delay before the packet is discarded. More...
 

Static Public Member Functions

static TypeId GetTypeId (void)
 Get the type ID. More...
 

Static Public Attributes

static const ConstIterator EMPTY = g_emptyWifiMacQueue.end ()
 Invalid iterator to signal an empty queue. More...
 

Private Member Functions

bool TtlExceeded (ConstIterator &it)
 Remove the item pointed to by the iterator it if it has been in the queue for too long. More...
 

Private Attributes

DropPolicy m_dropPolicy
 Drop behavior of queue. More...
 
bool m_expiredPacketsPresent
 True if expired packets are in the queue. More...
 
Time m_maxDelay
 Time to live for packets in the queue. More...
 
TracedCallback< Ptr< const WifiMacQueueItem > > m_traceExpired
 Traced callback: fired when a packet is dropped due to lifetime expiration. More...
 
 NS_LOG_TEMPLATE_DECLARE
 redefinition of the log component More...
 

Detailed Description

This queue implements the timeout procedure described in (Section 9.19.2.6 "Retransmit procedures" paragraph 6; IEEE 802.11-2012).


When a packet is received by the MAC, to be sent to the PHY, it is queued in the internal queue after being tagged by the current time.

When a packet is dequeued, the queue checks its timestamp to verify whether or not it should be dropped. If dot11EDCATableMSDULifetime has elapsed, it is dropped. Otherwise, it is returned to the caller.

Config Paths

ns3::WifiMacQueue is accessible through the following paths with Config::Set and Config::Connect:

  • "/NodeList/[i]/DeviceList/[i]/$ns3::WifiNetDevice/Mac/$ns3::RegularWifiMac/Txop/Queue"

Attributes

  • MaxSize: The max queue size
  • MaxDelay: If a packet stays longer than this delay in the queue, it is dropped.
    • Set with class: ns3::TimeValue
    • Underlying type: Time -9.22337e+18ns:+9.22337e+18ns
    • Initial value: +5e+08ns
    • Flags: construct write
  • DropPolicy: Upon enqueue with full queue, drop oldest (DropOldest) or newest (DropNewest) packet
    • Set with class: ns3::EnumValue
    • Underlying type:
    • Initial value: DropNewest
    • Flags: construct write read

TraceSources

  • Expired: MPDU dropped because its lifetime expired.
    Callback signature: ns3::WifiMacQueueItem::TracedCallback

TraceSources defined in parent class ns3::Queue<WifiMacQueueItem>

  • Enqueue: Enqueue a packet in the queue.
    Callback signature: ns3::WifiMacQueueItem::TracedCallback
  • Dequeue: Dequeue a packet from the queue.
    Callback signature: ns3::WifiMacQueueItem::TracedCallback
  • Drop: Drop a packet (for whatever reason).
    Callback signature: ns3::WifiMacQueueItem::TracedCallback
  • DropBeforeEnqueue: Drop a packet before enqueue.
    Callback signature: ns3::WifiMacQueueItem::TracedCallback
  • DropAfterDequeue: Drop a packet after dequeue.
    Callback signature: ns3::WifiMacQueueItem::TracedCallback

TraceSources defined in parent class ns3::QueueBase

Size of this type is 272 bytes (on a 64-bit architecture).

Definition at line 57 of file wifi-mac-queue.h.

Member Enumeration Documentation

◆ DropPolicy

drop policy

Enumerator
DROP_NEWEST 
DROP_OLDEST 

Definition at line 69 of file wifi-mac-queue.h.

Constructor & Destructor Documentation

◆ WifiMacQueue()

ns3::WifiMacQueue::WifiMacQueue ( )

Definition at line 64 of file wifi-mac-queue.cc.

◆ ~WifiMacQueue()

ns3::WifiMacQueue::~WifiMacQueue ( )

Definition at line 70 of file wifi-mac-queue.cc.

References NS_LOG_FUNCTION_NOARGS.

Member Function Documentation

◆ Dequeue() [1/2]

Ptr< WifiMacQueueItem > ns3::WifiMacQueue::Dequeue ( void  )

Dequeue the packet in the front of the queue.

Returns
the packet

Definition at line 164 of file wifi-mac-queue.cc.

References NS_LOG_DEBUG, NS_LOG_FUNCTION, and TtlExceeded().

Referenced by DequeueByAddress(), DequeueByTid(), DequeueByTidAndAddress(), and DequeueFirstAvailable().

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

◆ Dequeue() [2/2]

Ptr<WifiMacQueueItem> ns3::WifiMacQueue::Dequeue ( WifiMacQueue::ConstIterator  pos)

Dequeue the item at position pos in the queue.

Return a null pointer if the given iterator is invalid, the queue is empty or the lifetime of the item pointed to by the given iterator is expired.

Parameters
posthe position of the item to be dequeued
Returns
the dequeued item, if any

◆ DequeueByAddress()

Ptr< WifiMacQueueItem > ns3::WifiMacQueue::DequeueByAddress ( Mac48Address  dest)

Search and return, if present in the queue, the first packet (either Data frame or QoS Data frame) having the receiver address equal to addr.

This method removes the packet from the queue. It is typically used by ns3::Txop during the CF period.

Parameters
destthe given destination
Returns
the packet

Definition at line 179 of file wifi-mac-queue.cc.

References Dequeue(), NS_LOG_FUNCTION, and PeekByAddress().

+ Here is the call graph for this function:

◆ DequeueByTid()

Ptr< WifiMacQueueItem > ns3::WifiMacQueue::DequeueByTid ( uint8_t  tid)

Search and return, if present in the queue, the first packet having the TID equal to tid.

This method removes the packet from the queue.

Parameters
tidthe given TID
Returns
the packet

Definition at line 192 of file wifi-mac-queue.cc.

References Dequeue(), NS_LOG_FUNCTION, and PeekByTid().

+ Here is the call graph for this function:

◆ DequeueByTidAndAddress()

Ptr< WifiMacQueueItem > ns3::WifiMacQueue::DequeueByTidAndAddress ( uint8_t  tid,
Mac48Address  dest 
)

Search and return, if present in the queue, the first packet having the address indicated by type equal to addr, and TID equal to tid.

This method removes the packet from the queue. It is typically used by ns3::QosTxop in order to perform correct MSDU aggregation (A-MSDU).

Parameters
tidthe given TID
destthe given destination
Returns
the packet

Definition at line 205 of file wifi-mac-queue.cc.

References Dequeue(), NS_LOG_FUNCTION, and PeekByTidAndAddress().

+ Here is the call graph for this function:

◆ DequeueFirstAvailable()

Ptr< WifiMacQueueItem > ns3::WifiMacQueue::DequeueFirstAvailable ( const Ptr< QosBlockedDestinations blockedPackets = nullptr)

Return first available packet for transmission.

A packet could be no available if it is a QoS packet with a TID and an address1 fields equal to tid and addr respectively that index a pending agreement in the BlockAckManager object. So that packet must not be transmitted until reception of an ADDBA response frame from station addressed by addr. This method removes the packet from queue.

Parameters
blockedPacketsthe destination address & TID pairs that are waiting for a BlockAck response
Returns
the packet

Definition at line 218 of file wifi-mac-queue.cc.

References Dequeue(), NS_LOG_FUNCTION, and PeekFirstAvailable().

+ Here is the call graph for this function:

◆ Enqueue()

bool ns3::WifiMacQueue::Enqueue ( Ptr< WifiMacQueueItem item)

Enqueue the given Wifi MAC queue item at the end of the queue.

Parameters
itemthe Wifi MAC queue item to be enqueued at the end
Returns
true if success, false if the packet has been dropped

Definition at line 110 of file wifi-mac-queue.cc.

References Insert(), and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ GetMaxDelay()

Time ns3::WifiMacQueue::GetMaxDelay ( void  ) const

Return the maximum delay before the packet is discarded.

Returns
the maximum delay

Definition at line 87 of file wifi-mac-queue.cc.

References m_maxDelay.

◆ GetNBytes()

uint32_t ns3::WifiMacQueue::GetNBytes ( void  )
Returns
The number of bytes currently occupied by the packets in the Queue

Overrides the GetNBytes method provided by QueueBase

Definition at line 547 of file wifi-mac-queue.cc.

References ns3::QueueBase::GetNBytes(), NS_LOG_FUNCTION, and TtlExceeded().

+ Here is the call graph for this function:

◆ GetNPackets()

uint32_t ns3::WifiMacQueue::GetNPackets ( void  )
Returns
The number of packets currently stored in the Queue

Overrides the GetNPackets method provided by QueueBase

Definition at line 532 of file wifi-mac-queue.cc.

References ns3::QueueBase::GetNPackets(), NS_LOG_FUNCTION, and TtlExceeded().

+ Here is the call graph for this function:

◆ GetNPacketsByAddress()

uint32_t ns3::WifiMacQueue::GetNPacketsByAddress ( Mac48Address  dest)

Return the number of packets having destination address specified by dest.

Parameters
destthe given destination
Returns
the number of packets

Definition at line 471 of file wifi-mac-queue.cc.

References NS_LOG_DEBUG, NS_LOG_FUNCTION, and TtlExceeded().

+ Here is the call graph for this function:

◆ GetNPacketsByTidAndAddress()

uint32_t ns3::WifiMacQueue::GetNPacketsByTidAndAddress ( uint8_t  tid,
Mac48Address  dest 
)

Return the number of QoS packets having TID equal to tid and destination address equal to dest.

Parameters
tidthe given TID
destthe given destination
Returns
the number of QoS packets

Definition at line 494 of file wifi-mac-queue.cc.

References NS_LOG_DEBUG, NS_LOG_FUNCTION, and TtlExceeded().

+ Here is the call graph for this function:

◆ GetTypeId()

◆ Insert()

bool ns3::WifiMacQueue::Insert ( ConstIterator  pos,
Ptr< WifiMacQueueItem item 
)

Enqueue the given Wifi MAC queue item before the given position.

Parameters
posthe position before which the item is to be inserted
itemthe Wifi MAC queue item to be enqueued
Returns
true if success, false if the packet has been dropped

Definition at line 126 of file wifi-mac-queue.cc.

References DROP_OLDEST, ns3::QueueBase::GetNPackets(), m_dropPolicy, NS_ASSERT_MSG, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::PACKETS, and TtlExceeded().

Referenced by Enqueue(), and PushFront().

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

◆ IsEmpty()

bool ns3::WifiMacQueue::IsEmpty ( void  )
Returns
true if the queue is empty; false otherwise

Overrides the IsEmpty method provided by QueueBase

Definition at line 516 of file wifi-mac-queue.cc.

References NS_LOG_DEBUG, NS_LOG_FUNCTION, and TtlExceeded().

+ Here is the call graph for this function:

◆ Peek()

Ptr< const WifiMacQueueItem > ns3::WifiMacQueue::Peek ( void  ) const

Peek the packet in the front of the queue.

The packet is not removed.

Returns
the packet

Definition at line 270 of file wifi-mac-queue.cc.

References m_expiredPacketsPresent, m_maxDelay, ns3::Simulator::Now(), NS_LOG_DEBUG, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ PeekByAddress()

WifiMacQueue::ConstIterator ns3::WifiMacQueue::PeekByAddress ( Mac48Address  dest,
ConstIterator  pos = EMPTY 
) const

Search and return, if present in the queue, the first packet (either Data frame or QoS Data frame) having the receiver address equal to addr.

If pos is a valid iterator, the search starts from the packet pointed to by the given iterator. This method does not remove the packet from the queue.

Parameters
destthe given destination
posthe iterator pointing to the packet the search starts from
Returns
an iterator pointing to the peeked packet

Definition at line 289 of file wifi-mac-queue.cc.

References EMPTY, m_expiredPacketsPresent, m_maxDelay, ns3::Simulator::Now(), NS_LOG_DEBUG, and NS_LOG_FUNCTION.

Referenced by DequeueByAddress().

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

◆ PeekByTid()

WifiMacQueue::ConstIterator ns3::WifiMacQueue::PeekByTid ( uint8_t  tid,
ConstIterator  pos = EMPTY 
) const

Search and return, if present in the queue, the first packet having the TID equal to tid.

If pos is a valid iterator, the search starts from the packet pointed to by the given iterator. This method does not remove the packet from the queue.

Parameters
tidthe given TID
posthe iterator pointing to the packet the search starts from
Returns
an iterator pointing to the peeked packet

Definition at line 317 of file wifi-mac-queue.cc.

References EMPTY, m_expiredPacketsPresent, m_maxDelay, ns3::Simulator::Now(), NS_LOG_DEBUG, and NS_LOG_FUNCTION.

Referenced by DequeueByTid().

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

◆ PeekByTidAndAddress()

WifiMacQueue::ConstIterator ns3::WifiMacQueue::PeekByTidAndAddress ( uint8_t  tid,
Mac48Address  dest,
ConstIterator  pos = EMPTY 
) const

Search and return, if present in the queue, the first packet having the receiver address equal to dest, and TID equal to tid.

If pos is a valid iterator, the search starts from the packet pointed to by the given iterator. This method does not remove the packet from the queue. It is typically used by ns3::QosTxop in order to perform correct MSDU aggregation (A-MSDU).

Parameters
tidthe given TID
destthe given destination
posthe iterator pointing to the packet the search starts from
Returns
an iterator pointing to the peeked packet

Definition at line 344 of file wifi-mac-queue.cc.

References EMPTY, m_expiredPacketsPresent, m_maxDelay, ns3::Simulator::Now(), NS_LOG_DEBUG, and NS_LOG_FUNCTION.

Referenced by DequeueByTidAndAddress().

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

◆ PeekFirstAvailable()

WifiMacQueue::ConstIterator ns3::WifiMacQueue::PeekFirstAvailable ( const Ptr< QosBlockedDestinations blockedPackets = nullptr,
ConstIterator  pos = EMPTY 
) const

Return first available packet for transmission.

The packet is not removed from queue.

Parameters
blockedPacketsthe destination address & TID pairs that are waiting for a BlockAck response
posthe iterator pointing to the packet the search starts from
Returns
an iterator pointing to the peeked packet

Definition at line 372 of file wifi-mac-queue.cc.

References EMPTY, m_expiredPacketsPresent, m_maxDelay, ns3::Simulator::Now(), NS_LOG_DEBUG, and NS_LOG_FUNCTION.

Referenced by DequeueFirstAvailable().

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

◆ PushFront()

bool ns3::WifiMacQueue::PushFront ( Ptr< WifiMacQueueItem item)

Enqueue the given Wifi MAC queue item at the front of the queue.

Parameters
itemthe Wifi MAC queue item to be enqueued at the front
Returns
true if success, false if the packet has been dropped

Definition at line 118 of file wifi-mac-queue.cc.

References Insert(), and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ Remove() [1/3]

Ptr< WifiMacQueueItem > ns3::WifiMacQueue::Remove ( void  )

Remove the packet in the front of the queue.

Returns
the packet

Definition at line 400 of file wifi-mac-queue.cc.

References NS_LOG_DEBUG, NS_LOG_FUNCTION, and TtlExceeded().

+ Here is the call graph for this function:

◆ Remove() [2/3]

bool ns3::WifiMacQueue::Remove ( Ptr< const Packet packet)

If exists, removes packet from queue and returns true.

Otherwise it takes no effects and return false. Deletion of the packet is performed in linear time (O(n)).

Parameters
packetthe packet to be removed
Returns
true if the packet was removed, false otherwise

Definition at line 416 of file wifi-mac-queue.cc.

References NS_LOG_DEBUG, NS_LOG_FUNCTION, and TtlExceeded().

+ Here is the call graph for this function:

◆ Remove() [3/3]

WifiMacQueue::ConstIterator ns3::WifiMacQueue::Remove ( ConstIterator  pos,
bool  removeExpired = false 
)

Remove the item at position pos in the queue and return an iterator pointing to the item following the removed one.

If removeExpired is true, all the items in the queue from the head to the given position are removed if their lifetime expired.

Parameters
posthe position of the item to be removed
removeExpiredtrue to remove expired items
Returns
an iterator pointing to the item following the removed one

Definition at line 437 of file wifi-mac-queue.cc.

References m_expiredPacketsPresent, NS_LOG_DEBUG, NS_LOG_FUNCTION, and TtlExceeded().

+ Here is the call graph for this function:

◆ SetMaxDelay()

void ns3::WifiMacQueue::SetMaxDelay ( Time  delay)

Set the maximum delay before the packet is discarded.

Parameters
delaythe maximum delay

Definition at line 80 of file wifi-mac-queue.cc.

References m_maxDelay, and NS_LOG_FUNCTION.

Referenced by GetTypeId().

+ Here is the caller graph for this function:

◆ TtlExceeded()

bool ns3::WifiMacQueue::TtlExceeded ( ConstIterator &  it)
private

Remove the item pointed to by the iterator it if it has been in the queue for too long.

If the item is removed, the iterator is updated to point to the item that followed the erased one.

Parameters
itan iterator pointing to the item
Returns
true if the item is removed, false otherwise

Definition at line 93 of file wifi-mac-queue.cc.

References m_maxDelay, m_traceExpired, ns3::Simulator::Now(), NS_LOG_DEBUG, and NS_LOG_FUNCTION.

Referenced by Dequeue(), GetNBytes(), GetNPackets(), GetNPacketsByAddress(), GetNPacketsByTidAndAddress(), Insert(), IsEmpty(), and Remove().

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

Member Data Documentation

◆ EMPTY

const WifiMacQueue::ConstIterator ns3::WifiMacQueue::EMPTY = g_emptyWifiMacQueue.end ()
static

Invalid iterator to signal an empty queue.

Definition at line 302 of file wifi-mac-queue.h.

Referenced by ns3::BlockAckManager::GetBar(), PeekByAddress(), PeekByTid(), PeekByTidAndAddress(), PeekFirstAvailable(), and ns3::QosTxop::PeekNextFrame().

◆ m_dropPolicy

DropPolicy ns3::WifiMacQueue::m_dropPolicy
private

Drop behavior of queue.

Definition at line 317 of file wifi-mac-queue.h.

Referenced by GetTypeId(), and Insert().

◆ m_expiredPacketsPresent

bool ns3::WifiMacQueue::m_expiredPacketsPresent
mutableprivate

True if expired packets are in the queue.

Definition at line 318 of file wifi-mac-queue.h.

Referenced by Peek(), PeekByAddress(), PeekByTid(), PeekByTidAndAddress(), PeekFirstAvailable(), and Remove().

◆ m_maxDelay

Time ns3::WifiMacQueue::m_maxDelay
private

Time to live for packets in the queue.

Definition at line 316 of file wifi-mac-queue.h.

Referenced by GetMaxDelay(), Peek(), PeekByAddress(), PeekByTid(), PeekByTidAndAddress(), PeekFirstAvailable(), SetMaxDelay(), and TtlExceeded().

◆ m_traceExpired

TracedCallback<Ptr<const WifiMacQueueItem> > ns3::WifiMacQueue::m_traceExpired
private

Traced callback: fired when a packet is dropped due to lifetime expiration.

Definition at line 321 of file wifi-mac-queue.h.

Referenced by GetTypeId(), and TtlExceeded().

◆ NS_LOG_TEMPLATE_DECLARE

ns3::WifiMacQueue::NS_LOG_TEMPLATE_DECLARE
private

redefinition of the log component

Definition at line 323 of file wifi-mac-queue.h.


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