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

Manages all block ack agreements for an originator station. More...

#include "block-ack-manager.h"

+ Inheritance diagram for ns3::BlockAckManager:
+ Collaboration diagram for ns3::BlockAckManager:

Public Types

typedef void(* AgreementStateTracedCallback) (Time now, Mac48Address recipient, uint8_t tid, OriginatorBlockAckAgreement::State state)
 TracedCallback signature for state changes. More...
 
typedef Callback< void, const WifiMacHeader & > TxFailed
 typedef for a callback to invoke when a packet transmission was failed. More...
 
typedef Callback< void, const WifiMacHeader & > TxOk
 typedef for a callback to invoke when a packet transmission was completed successfully. More...
 

Public Member Functions

 BlockAckManager ()
 
 ~BlockAckManager ()
 
void CreateAgreement (const MgtAddBaRequestHeader *reqHdr, Mac48Address recipient)
 
void DestroyAgreement (Mac48Address recipient, uint8_t tid)
 
void DiscardOutstandingMpdus (Mac48Address recipient, uint8_t tid)
 
bool ExistsAgreement (Mac48Address recipient, uint8_t tid) const
 
bool ExistsAgreementInState (Mac48Address recipient, uint8_t tid, OriginatorBlockAckAgreement::State state) const
 
Ptr< const WifiMacQueueItemGetBar (bool remove=true)
 Returns the next BlockAckRequest to send, if any. More...
 
CtrlBAckRequestHeader GetBlockAckReqHeader (Mac48Address recipient, uint8_t tid) const
 
uint32_t GetNBufferedPackets (Mac48Address recipient, uint8_t tid) const
 
uint16_t GetOriginatorStartingSequence (Mac48Address recipient, uint8_t tid) const
 This function returns the starting sequence number of the transmit window. More...
 
uint16_t GetRecipientBufferSize (Mac48Address recipient, uint8_t tid) const
 This function returns the buffer size negotiated with the recipient. More...
 
Ptr< WifiMacQueueGetRetransmitQueue (void)
 
bool HasPackets (void)
 Returns true if there are packets that need of retransmission or at least a BAR is scheduled. More...
 
bool NeedBarRetransmission (uint8_t tid, Mac48Address recipient)
 This function returns true if a block ack agreement is established with the given recipient for the given TID and there is at least an outstanding MPDU for such agreement whose lifetime is not expired. More...
 
void NotifyAgreementEstablished (Mac48Address recipient, uint8_t tid, uint16_t startingSeq)
 
void NotifyAgreementNoReply (Mac48Address recipient, uint8_t tid)
 
void NotifyAgreementRejected (Mac48Address recipient, uint8_t tid)
 
void NotifyAgreementReset (Mac48Address recipient, uint8_t tid)
 
void NotifyDiscardedMpdu (Ptr< const WifiMacQueueItem > mpdu)
 
void NotifyGotAck (Ptr< const WifiMacQueueItem > mpdu)
 Invoked upon receipt of an Ack frame after the transmission of a QoS data frame sent under an established block ack agreement. More...
 
void NotifyGotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient, double rxSnr, double dataSnr, WifiTxVector dataTxVector)
 
void NotifyMissedAck (Ptr< WifiMacQueueItem > mpdu)
 Invoked upon missed reception of an Ack frame after the transmission of a QoS data frame sent under an established block ack agreement. More...
 
void NotifyMissedBlockAck (Mac48Address recipient, uint8_t tid)
 
void ScheduleBar (Ptr< const WifiMacQueueItem > bar, bool skipIfNoDataQueued=false)
 
void SetBlockAckInactivityCallback (Callback< void, Mac48Address, uint8_t, bool > callback)
 Set BlockAck inactivity callback. More...
 
void SetBlockAckThreshold (uint8_t nPackets)
 
void SetBlockAckType (BlockAckType bAckType)
 
void SetBlockDestinationCallback (Callback< void, Mac48Address, uint8_t > callback)
 Set block destination callback. More...
 
void SetQueue (const Ptr< WifiMacQueue > queue)
 
void SetTxFailedCallback (TxFailed callback)
 
void SetTxMiddle (const Ptr< MacTxMiddle > txMiddle)
 Set the MacTxMiddle. More...
 
void SetTxOkCallback (TxOk callback)
 
void SetUnblockDestinationCallback (Callback< void, Mac48Address, uint8_t > callback)
 Set unblock destination callback. More...
 
void SetWifiRemoteStationManager (const Ptr< WifiRemoteStationManager > manager)
 Set up WifiRemoteStationManager associated with this BlockAckManager. More...
 
void StorePacket (Ptr< WifiMacQueueItem > mpdu)
 
bool SwitchToBlockAckIfNeeded (Mac48Address recipient, uint8_t tid, uint16_t startingSeq)
 
void UpdateAgreement (const MgtAddBaResponseHeader *respHdr, Mac48Address recipient)
 
- Public Member Functions inherited from ns3::Object
 Object ()
 Constructor. More...
 
virtual ~Object ()
 Destructor. More...
 
void AggregateObject (Ptr< Object > other)
 Aggregate two Objects together. More...
 
void Dispose (void)
 Dispose of this Object. More...
 
AggregateIterator GetAggregateIterator (void) const
 Get an iterator to the Objects aggregated to this one. More...
 
virtual TypeId GetInstanceTypeId (void) const
 Get the most derived TypeId for this Object. More...
 
template<typename T >
Ptr< T > GetObject (void) const
 Get a pointer to the requested aggregated Object. More...
 
template<typename T >
Ptr< T > GetObject (TypeId tid) const
 Get a pointer to the requested aggregated Object by TypeId. More...
 
template<>
Ptr< ObjectGetObject () const
 
template<>
Ptr< ObjectGetObject (TypeId tid) const
 
void Initialize (void)
 Invoke DoInitialize on all Objects aggregated to this one. More...
 
bool IsInitialized (void) const
 Check if the object has been initialized. More...
 
- Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter >
 SimpleRefCount ()
 Default constructor. More...
 
 SimpleRefCount (const SimpleRefCount &o)
 Copy constructor. More...
 
uint32_t GetReferenceCount (void) const
 Get the reference count of the object. More...
 
SimpleRefCountoperator= (const SimpleRefCount &o)
 Assignment operator. More...
 
void Ref (void) const
 Increment the reference count. More...
 
void Unref (void) const
 Decrement the reference count. More...
 
- Public Member Functions inherited from ns3::ObjectBase
virtual ~ObjectBase ()
 Virtual destructor. More...
 
void GetAttribute (std::string name, AttributeValue &value) const
 Get the value of an attribute, raising fatal errors if unsuccessful. More...
 
bool GetAttributeFailSafe (std::string name, AttributeValue &value) const
 Get the value of an attribute without raising erros. More...
 
void SetAttribute (std::string name, const AttributeValue &value)
 Set a single attribute, raising fatal errors if unsuccessful. More...
 
bool SetAttributeFailSafe (std::string name, const AttributeValue &value)
 Set a single attribute without raising errors. More...
 
bool TraceConnect (std::string name, std::string context, const CallbackBase &cb)
 Connect a TraceSource to a Callback with a context. More...
 
bool TraceConnectWithoutContext (std::string name, const CallbackBase &cb)
 Connect a TraceSource to a Callback without a context. More...
 
bool TraceDisconnect (std::string name, std::string context, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected with a context. More...
 
bool TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected without a context. More...
 

Static Public Member Functions

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

Private Types

typedef std::map< std::pair< Mac48Address, uint8_t >, std::pair< OriginatorBlockAckAgreement, PacketQueue > > Agreements
 typedef for a map between MAC address and block ack agreement. More...
 
typedef std::map< std::pair< Mac48Address, uint8_t >, std::pair< OriginatorBlockAckAgreement, PacketQueue > >::const_iterator AgreementsCI
 typedef for a const iterator for Agreements. More...
 
typedef std::map< std::pair< Mac48Address, uint8_t >, std::pair< OriginatorBlockAckAgreement, PacketQueue > >::iterator AgreementsI
 typedef for an iterator for Agreements. More...
 
typedef std::list< Ptr< WifiMacQueueItem > > PacketQueue
 typedef for a list of WifiMacQueueItem. More...
 
typedef std::list< Ptr< WifiMacQueueItem > >::const_iterator PacketQueueCI
 typedef for a const iterator for PacketQueue. More...
 
typedef std::list< Ptr< WifiMacQueueItem > >::iterator PacketQueueI
 typedef for an iterator for PacketQueue. More...
 

Private Member Functions

 BlockAckManager (const BlockAckManager &)
 type conversion operator More...
 
void InactivityTimeout (Mac48Address recipient, uint8_t tid)
 Inactivity timeout function. More...
 
void InsertInRetryQueue (Ptr< WifiMacQueueItem > mpdu)
 
BlockAckManageroperator= (const BlockAckManager &block)
 assignment operator More...
 
void RemoveFromRetryQueue (Mac48Address address, uint8_t tid, uint16_t seq)
 Remove an item from retransmission queue. More...
 
void RemoveFromRetryQueue (Mac48Address address, uint8_t tid, uint16_t startSeq, uint16_t endSeq)
 Remove a range of items from retransmission queue. More...
 
void RemoveOldPackets (Mac48Address recipient, uint8_t tid, uint16_t startingSeq)
 Remove packets from the retransmit queue and from the queue of outstanding packets that become old after setting the starting sequence number for the agreement with recipient equal to recipient and TID equal to tid to the given startingSeq. More...
 

Private Attributes

Mac48Address m_address
 address More...
 
Agreements m_agreements
 This data structure contains, for each block ack agreement (recipient, TID), a set of packets for which an ack by block ack is requested. More...
 
TracedCallback< Time, Mac48Address, uint8_t, OriginatorBlockAckAgreement::Statem_agreementState
 The trace source fired when a state transition occurred. More...
 
std::list< Barm_bars
 list of BARs More...
 
Callback< void, Mac48Address, uint8_t, bool > m_blockAckInactivityTimeout
 BlockAck inactivity timeout callback. More...
 
uint8_t m_blockAckThreshold
 block ack threshold More...
 
BlockAckType m_blockAckType
 BlockAck type. More...
 
Callback< void, Mac48Address, uint8_t > m_blockPackets
 block packets callback More...
 
Ptr< WifiMacQueuem_queue
 queue More...
 
Ptr< WifiMacQueuem_retryPackets
 This list contains all iterators to stored packets that need to be retransmitted. More...
 
Ptr< WifiRemoteStationManagerm_stationManager
 the station manager More...
 
TxFailed m_txFailedCallback
 transmit failed callback More...
 
Ptr< MacTxMiddlem_txMiddle
 the MacTxMiddle More...
 
TxOk m_txOkCallback
 transmit OK callback More...
 
Callback< void, Mac48Address, uint8_t > m_unblockPackets
 unblock packets callback More...
 

Additional Inherited Members

- Protected Member Functions inherited from ns3::Object
 Object (const Object &o)
 Copy an Object. More...
 
virtual void DoDispose (void)
 Destructor implementation. More...
 
virtual void DoInitialize (void)
 Initialize() implementation. More...
 
virtual void NotifyNewAggregate (void)
 Notify all Objects aggregated to this one of a new Object being aggregated. More...
 
- Protected Member Functions inherited from ns3::ObjectBase
void ConstructSelf (const AttributeConstructionList &attributes)
 Complete construction of ObjectBase; invoked by derived classes. More...
 
virtual void NotifyConstructionCompleted (void)
 Notifier called once the ObjectBase is fully constructed. More...
 

Detailed Description

Manages all block ack agreements for an originator station.


Config Paths

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

  • "/NodeList/[i]/DeviceList/[i]/$ns3::WifiNetDevice/Mac/$ns3::RegularWifiMac/Txop/$ns3::QosTxop/BlockAckManager"
  • "/NodeList/[i]/DeviceList/[i]/$ns3::WifiNetDevice/Mac/$ns3::RegularWifiMac/VO_Txop/BlockAckManager"
  • "/NodeList/[i]/DeviceList/[i]/$ns3::WifiNetDevice/Mac/$ns3::RegularWifiMac/VI_Txop/BlockAckManager"
  • "/NodeList/[i]/DeviceList/[i]/$ns3::WifiNetDevice/Mac/$ns3::RegularWifiMac/BE_Txop/BlockAckManager"
  • "/NodeList/[i]/DeviceList/[i]/$ns3::WifiNetDevice/Mac/$ns3::RegularWifiMac/BK_Txop/BlockAckManager"

No Attributes are defined for this type.

TraceSources

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

Definition at line 70 of file block-ack-manager.h.

Member Typedef Documentation

◆ Agreements

typedef std::map<std::pair<Mac48Address, uint8_t>, std::pair<OriginatorBlockAckAgreement, PacketQueue> > ns3::BlockAckManager::Agreements
private

typedef for a map between MAC address and block ack agreement.

Definition at line 451 of file block-ack-manager.h.

◆ AgreementsCI

typedef std::map<std::pair<Mac48Address, uint8_t>, std::pair<OriginatorBlockAckAgreement, PacketQueue> >::const_iterator ns3::BlockAckManager::AgreementsCI
private

typedef for a const iterator for Agreements.

Definition at line 461 of file block-ack-manager.h.

◆ AgreementsI

typedef std::map<std::pair<Mac48Address, uint8_t>, std::pair<OriginatorBlockAckAgreement, PacketQueue> >::iterator ns3::BlockAckManager::AgreementsI
private

typedef for an iterator for Agreements.

Definition at line 456 of file block-ack-manager.h.

◆ AgreementStateTracedCallback

typedef void(* ns3::BlockAckManager::AgreementStateTracedCallback) (Time now, Mac48Address recipient, uint8_t tid, OriginatorBlockAckAgreement::State state)

TracedCallback signature for state changes.

Parameters
[in]nowTime when the state changed.
[in]recipientMAC address of the recipient.
[in]tidthe TID.
[in]stateThe state.

Definition at line 381 of file block-ack-manager.h.

◆ PacketQueue

typedef for a list of WifiMacQueueItem.

Definition at line 438 of file block-ack-manager.h.

◆ PacketQueueCI

typedef for a const iterator for PacketQueue.

Definition at line 446 of file block-ack-manager.h.

◆ PacketQueueI

typedef for an iterator for PacketQueue.

Definition at line 442 of file block-ack-manager.h.

◆ TxFailed

typedef for a callback to invoke when a packet transmission was failed.

Definition at line 361 of file block-ack-manager.h.

◆ TxOk

typedef for a callback to invoke when a packet transmission was completed successfully.

Definition at line 356 of file block-ack-manager.h.

Constructor & Destructor Documentation

◆ BlockAckManager() [1/2]

ns3::BlockAckManager::BlockAckManager ( const BlockAckManager )
private

type conversion operator

◆ BlockAckManager() [2/2]

ns3::BlockAckManager::BlockAckManager ( )

Definition at line 66 of file block-ack-manager.cc.

References m_retryPackets, ns3::MakeCallback(), NotifyDiscardedMpdu(), and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ ~BlockAckManager()

ns3::BlockAckManager::~BlockAckManager ( )

Definition at line 73 of file block-ack-manager.cc.

References m_agreements, m_queue, m_retryPackets, and NS_LOG_FUNCTION.

Member Function Documentation

◆ CreateAgreement()

void ns3::BlockAckManager::CreateAgreement ( const MgtAddBaRequestHeader reqHdr,
Mac48Address  recipient 
)
Parameters
reqHdrRelative Add block ack request (action frame).
recipientAddress of peer station involved in block ack mechanism.

Creates a new block ack agreement in pending state. When a ADDBA response with a successful status code is received, the relative agreement becomes established.

Definition at line 116 of file block-ack-manager.cc.

References ExistsAgreement(), ExistsAgreementInState(), ns3::MgtAddBaRequestHeader::GetBufferSize(), ns3::WifiRemoteStationManager::GetHtSupported(), ns3::MgtAddBaRequestHeader::GetStartingSequence(), ns3::MgtAddBaRequestHeader::GetTid(), ns3::MgtAddBaRequestHeader::GetTimeout(), ns3::MgtAddBaRequestHeader::IsAmsduSupported(), ns3::MgtAddBaRequestHeader::IsImmediateBlockAck(), m_agreements, m_agreementState, m_blockPackets, m_stationManager, ns3::Simulator::Now(), NS_ASSERT, NS_LOG_FUNCTION, ns3::OriginatorBlockAckAgreement::PENDING, ns3::OriginatorBlockAckAgreement::RESET, and ns3::BlockAckAgreement::SetStartingSequence().

+ Here is the call graph for this function:

◆ DestroyAgreement()

void ns3::BlockAckManager::DestroyAgreement ( Mac48Address  recipient,
uint8_t  tid 
)
Parameters
recipientAddress of peer station involved in block ack mechanism.
tidtraffic ID of transmitted packet.

Invoked when a recipient reject a block ack agreement or when a DELBA frame is Received/Transmitted.

Definition at line 152 of file block-ack-manager.cc.

References m_agreements, m_bars, m_retryPackets, and NS_LOG_FUNCTION.

◆ DiscardOutstandingMpdus()

void ns3::BlockAckManager::DiscardOutstandingMpdus ( Mac48Address  recipient,
uint8_t  tid 
)
Parameters
recipientoutstanding frames' receiver.
tidTraffic ID.

Discard all the outstanding MPDUs destined to the given receiver and belonging to the given TID. Typically, this function is called by ns3::QosTxop object when it gives up retransmitting either a BlockAckRequest or the Data frames.

Definition at line 579 of file block-ack-manager.cc.

References ns3::OriginatorBlockAckAgreement::ESTABLISHED, ExistsAgreementInState(), m_agreements, NotifyDiscardedMpdu(), NS_LOG_FUNCTION, and ns3::SEQNO_SPACE_HALF_SIZE.

+ Here is the call graph for this function:

◆ ExistsAgreement()

bool ns3::BlockAckManager::ExistsAgreement ( Mac48Address  recipient,
uint8_t  tid 
) const
Parameters
recipientAddress of peer station involved in block ack mechanism.
tidTraffic ID.
Returns
true if a block ack agreement exists, false otherwise

Checks if a block ack agreement exists with station addressed by recipient for TID tid.

Definition at line 82 of file block-ack-manager.cc.

References m_agreements, and NS_LOG_FUNCTION.

Referenced by CreateAgreement(), and SwitchToBlockAckIfNeeded().

+ Here is the caller graph for this function:

◆ ExistsAgreementInState()

bool ns3::BlockAckManager::ExistsAgreementInState ( Mac48Address  recipient,
uint8_t  tid,
OriginatorBlockAckAgreement::State  state 
) const
Parameters
recipientAddress of peer station involved in block ack mechanism.
tidTraffic ID.
stateThe state for block ack agreement
Returns
true if a block ack agreement exists, false otherwise

Checks if a block ack agreement with a state equals to state exists with station addressed by recipient for TID tid.

Definition at line 89 of file block-ack-manager.cc.

References ns3::OriginatorBlockAckAgreement::ESTABLISHED, m_agreements, ns3::OriginatorBlockAckAgreement::NO_REPLY, NS_FATAL_ERROR, ns3::OriginatorBlockAckAgreement::PENDING, ns3::OriginatorBlockAckAgreement::REJECTED, and ns3::OriginatorBlockAckAgreement::RESET.

Referenced by CreateAgreement(), DiscardOutstandingMpdus(), NeedBarRetransmission(), NotifyDiscardedMpdu(), NotifyGotAck(), NotifyGotBlockAck(), NotifyMissedAck(), NotifyMissedBlockAck(), and SwitchToBlockAckIfNeeded().

+ Here is the caller graph for this function:

◆ GetBar()

Ptr< const WifiMacQueueItem > ns3::BlockAckManager::GetBar ( bool  remove = true)

Returns the next BlockAckRequest to send, if any.

Parameters
removetrue if the BAR has to be removed from the queue
Returns
the next BAR to be sent, if any

Definition at line 291 of file block-ack-manager.cc.

References ns3::Packet::AddHeader(), ns3::WifiMacQueue::EMPTY, ns3::CtrlBAckRequestHeader::GetStartingSequence(), m_agreements, m_bars, m_queue, m_retryPackets, ns3::Simulator::Now(), and ns3::CtrlBAckRequestHeader::SetStartingSequence().

Referenced by HasPackets().

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

◆ GetBlockAckReqHeader()

CtrlBAckRequestHeader ns3::BlockAckManager::GetBlockAckReqHeader ( Mac48Address  recipient,
uint8_t  tid 
) const
Parameters
recipientthe recipient
tidthe TID

Get the BlockAckRequest header for the established BA agreement (recipient,tid).

Definition at line 660 of file block-ack-manager.cc.

References m_agreements, m_blockAckType, NS_ASSERT, NS_LOG_FUNCTION, and ns3::CtrlBAckRequestHeader::SetType().

Referenced by NotifyDiscardedMpdu().

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

◆ GetNBufferedPackets()

uint32_t ns3::BlockAckManager::GetNBufferedPackets ( Mac48Address  recipient,
uint8_t  tid 
) const
Parameters
recipientAddress of peer station involved in block ack mechanism.
tidTraffic ID.
Returns
the number of packets buffered for a specified agreement

Returns the number of packets buffered for a specified agreement. This methods doesn't return the number of buffered MPDUs but the number of buffered MSDUs.

Definition at line 364 of file block-ack-manager.cc.

References m_agreements, and NS_LOG_FUNCTION.

Referenced by SwitchToBlockAckIfNeeded().

+ Here is the caller graph for this function:

◆ GetOriginatorStartingSequence()

uint16_t ns3::BlockAckManager::GetOriginatorStartingSequence ( Mac48Address  recipient,
uint8_t  tid 
) const

This function returns the starting sequence number of the transmit window.

Parameters
tidTraffic ID
recipientMAC address of the recipient
Returns
the starting sequence number of the transmit window (WinStartO)

Definition at line 984 of file block-ack-manager.cc.

References m_agreements.

◆ GetRecipientBufferSize()

uint16_t ns3::BlockAckManager::GetRecipientBufferSize ( Mac48Address  recipient,
uint8_t  tid 
) const

This function returns the buffer size negotiated with the recipient.

Parameters
tidTraffic ID
recipientMAC address of the recipient
Returns
the buffer size negotiated with the recipient

Definition at line 972 of file block-ack-manager.cc.

References m_agreements.

◆ GetRetransmitQueue()

Ptr< WifiMacQueue > ns3::BlockAckManager::GetRetransmitQueue ( void  )
Returns
the retransmit queue.

Return the retransmit queue.

Definition at line 240 of file block-ack-manager.cc.

References m_retryPackets.

◆ GetTypeId()

TypeId ns3::BlockAckManager::GetTypeId ( void  )
static

Get the type ID.

Returns
the object TypeId

Definition at line 52 of file block-ack-manager.cc.

References m_agreementState, ns3::MakeTraceSourceAccessor(), and ns3::TypeId::SetParent().

+ Here is the call graph for this function:

◆ HasPackets()

bool ns3::BlockAckManager::HasPackets ( void  )

Returns true if there are packets that need of retransmission or at least a BAR is scheduled.

Returns false otherwise.

Returns
true if there are packets that need of retransmission or at least a BAR is scheduled, false otherwise

Definition at line 357 of file block-ack-manager.cc.

References GetBar(), m_retryPackets, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ InactivityTimeout()

void ns3::BlockAckManager::InactivityTimeout ( Mac48Address  recipient,
uint8_t  tid 
)
private

Inactivity timeout function.

Parameters
recipientthe recipient MAC address
tidTraffic ID

Definition at line 706 of file block-ack-manager.cc.

References m_blockAckInactivityTimeout, and NS_LOG_FUNCTION.

Referenced by NotifyGotBlockAck(), and UpdateAgreement().

+ Here is the caller graph for this function:

◆ InsertInRetryQueue()

void ns3::BlockAckManager::InsertInRetryQueue ( Ptr< WifiMacQueueItem mpdu)
private
Parameters
mpduthe packet to insert in the retransmission queue

Insert mpdu in retransmission queue. This method ensures packets are retransmitted in the correct order.

Definition at line 928 of file block-ack-manager.cc.

References m_agreements, m_retryPackets, NS_ASSERT, NS_LOG_DEBUG, NS_LOG_INFO, and ns3::SEQNO_SPACE_HALF_SIZE.

Referenced by NotifyGotBlockAck(), NotifyMissedAck(), and NotifyMissedBlockAck().

+ Here is the caller graph for this function:

◆ NeedBarRetransmission()

bool ns3::BlockAckManager::NeedBarRetransmission ( uint8_t  tid,
Mac48Address  recipient 
)

This function returns true if a block ack agreement is established with the given recipient for the given TID and there is at least an outstanding MPDU for such agreement whose lifetime is not expired.

Parameters
tidTraffic ID
recipientMAC address of the recipient
Returns
true if BAR retransmission needed

Definition at line 791 of file block-ack-manager.cc.

References ns3::OriginatorBlockAckAgreement::ESTABLISHED, ExistsAgreementInState(), m_agreements, m_queue, ns3::Simulator::Now(), and NS_ASSERT.

+ Here is the call graph for this function:

◆ NotifyAgreementEstablished()

void ns3::BlockAckManager::NotifyAgreementEstablished ( Mac48Address  recipient,
uint8_t  tid,
uint16_t  startingSeq 
)
Parameters
recipientAddress of peer station involved in block ack mechanism.
tidTraffic ID of transmitted packet.
startingSeqstarting sequence field

Puts corresponding agreement in established state and updates number of packets and starting sequence field. Invoked typically after a block ack refresh.

Definition at line 713 of file block-ack-manager.cc.

References ns3::OriginatorBlockAckAgreement::ESTABLISHED, m_agreements, m_agreementState, ns3::Simulator::Now(), NS_ASSERT, and NS_LOG_FUNCTION.

Referenced by SwitchToBlockAckIfNeeded().

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

◆ NotifyAgreementNoReply()

void ns3::BlockAckManager::NotifyAgreementNoReply ( Mac48Address  recipient,
uint8_t  tid 
)
Parameters
recipientAddress of peer station involved in block ack mechanism.
tidTraffic ID of transmitted packet.

Marks an agreement after not receiving response to ADDBA request. During this state any packets in queue will be transmitted using normal MPDU. This also unblock recipient address.

Definition at line 740 of file block-ack-manager.cc.

References m_agreements, m_agreementState, m_unblockPackets, ns3::OriginatorBlockAckAgreement::NO_REPLY, ns3::Simulator::Now(), NS_ASSERT, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ NotifyAgreementRejected()

void ns3::BlockAckManager::NotifyAgreementRejected ( Mac48Address  recipient,
uint8_t  tid 
)
Parameters
recipientAddress of peer station involved in block ack mechanism.
tidTraffic ID of transmitted packet.

Marks an agreement as rejected. This happens if recipient station reject block ack setup by an ADDBA Response frame with a failure status code. For now we assume that every QoS station accepts a block ack setup.

Definition at line 727 of file block-ack-manager.cc.

References m_agreements, m_agreementState, ns3::Simulator::Now(), NS_ASSERT, NS_LOG_FUNCTION, and ns3::OriginatorBlockAckAgreement::REJECTED.

+ Here is the call graph for this function:

◆ NotifyAgreementReset()

void ns3::BlockAckManager::NotifyAgreementReset ( Mac48Address  recipient,
uint8_t  tid 
)
Parameters
recipientAddress of peer station involved in block ack mechanism.
tidTraffic ID of transmitted packet.

Set BA agreement to a transitory state to reset it after not receiving response to ADDBA request.

Definition at line 754 of file block-ack-manager.cc.

References m_agreements, m_agreementState, ns3::Simulator::Now(), NS_ASSERT, NS_LOG_FUNCTION, and ns3::OriginatorBlockAckAgreement::RESET.

+ Here is the call graph for this function:

◆ NotifyDiscardedMpdu()

void ns3::BlockAckManager::NotifyDiscardedMpdu ( Ptr< const WifiMacQueueItem mpdu)
Parameters
mpduthe discarded frame

Notify the block ack manager that an MPDU has been discarded, e.g., because the MSDU lifetime expired. If there is an established block ack agreement, make the transmit window advance beyond the discarded frame. This also involves (i) the removal of frames that consequently become old from the retransmit queue and from the queue of the block ack agreement, and (ii) the scheduling of a BlockAckRequest.

Definition at line 609 of file block-ack-manager.cc.

References ns3::Packet::AddHeader(), ns3::OriginatorBlockAckAgreement::ESTABLISHED, ExistsAgreementInState(), GetBlockAckReqHeader(), m_agreements, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::QosUtilsIsOldPacket(), RemoveOldPackets(), ScheduleBar(), ns3::SEQNO_SPACE_SIZE, ns3::WifiMacHeader::SetAddr1(), ns3::WifiMacHeader::SetAddr2(), ns3::WifiMacHeader::SetAddr3(), ns3::WifiMacHeader::SetDsNotFrom(), ns3::WifiMacHeader::SetDsNotTo(), ns3::WifiMacHeader::SetNoMoreFragments(), ns3::WifiMacHeader::SetNoRetry(), ns3::WifiMacHeader::SetType(), and ns3::WIFI_MAC_CTL_BACKREQ.

Referenced by BlockAckManager(), and DiscardOutstandingMpdus().

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

◆ NotifyGotAck()

void ns3::BlockAckManager::NotifyGotAck ( Ptr< const WifiMacQueueItem mpdu)

Invoked upon receipt of an Ack frame after the transmission of a QoS data frame sent under an established block ack agreement.

Remove the acknowledged frame from the outstanding packets and update the starting sequence number of the transmit window, if needed.

Parameters
mpduThe acknowledged MPDU.

Definition at line 402 of file block-ack-manager.cc.

References ns3::OriginatorBlockAckAgreement::ESTABLISHED, ExistsAgreementInState(), m_agreements, NS_ASSERT, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ NotifyGotBlockAck()

void ns3::BlockAckManager::NotifyGotBlockAck ( const CtrlBAckResponseHeader blockAck,
Mac48Address  recipient,
double  rxSnr,
double  dataSnr,
WifiTxVector  dataTxVector 
)
Parameters
blockAckThe received BlockAck frame.
recipientSender of BlockAck frame.
rxSnrreceived SNR of the BlockAck frame itself
dataSnrdata SNR reported by remote station
dataTxVectorthe TXVECTOR used to send the Data

Invoked upon receipt of a BlockAck frame. Typically, this function, is called by ns3::QosTxop object. Performs a check on which MPDUs, previously sent with Ack Policy set to Block Ack, were correctly received by the recipient. An acknowledged MPDU is removed from the buffer, retransmitted otherwise.

Definition at line 464 of file block-ack-manager.cc.

References ns3::OriginatorBlockAckAgreement::ESTABLISHED, ExistsAgreementInState(), ns3::CtrlBAckResponseHeader::GetTidInfo(), InactivityTimeout(), InsertInRetryQueue(), ns3::CtrlBAckResponseHeader::IsBasic(), ns3::CtrlBAckResponseHeader::IsCompressed(), ns3::CtrlBAckResponseHeader::IsExtendedCompressed(), ns3::CtrlBAckResponseHeader::IsFragmentReceived(), ns3::CtrlBAckResponseHeader::IsMultiTid(), ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::IsNull(), ns3::CtrlBAckResponseHeader::IsPacketReceived(), m_agreements, m_stationManager, m_txFailedCallback, m_txOkCallback, ns3::MicroSeconds(), NS_FATAL_ERROR, NS_LOG_FUNCTION, ns3::QosUtilsIsOldPacket(), RemoveOldPackets(), ns3::WifiRemoteStationManager::ReportAmpduTxStatus(), ns3::Simulator::Schedule(), ns3::SEQNO_SPACE_SIZE, and timeout.

+ Here is the call graph for this function:

◆ NotifyMissedAck()

void ns3::BlockAckManager::NotifyMissedAck ( Ptr< WifiMacQueueItem mpdu)

Invoked upon missed reception of an Ack frame after the transmission of a QoS data frame sent under an established block ack agreement.

Remove the acknowledged frame from the outstanding packets and insert it in the retransmission queue.

Parameters
mpduThe unacknowledged MPDU.

Definition at line 432 of file block-ack-manager.cc.

References ns3::OriginatorBlockAckAgreement::ESTABLISHED, ExistsAgreementInState(), InsertInRetryQueue(), m_agreements, NS_ASSERT, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ NotifyMissedBlockAck()

void ns3::BlockAckManager::NotifyMissedBlockAck ( Mac48Address  recipient,
uint8_t  tid 
)
Parameters
recipientSender of the expected BlockAck frame.
tidTraffic ID.

Invoked upon missed reception of a block ack frame. Typically, this function, is called by ns3::QosTxop object. Performs a check on which MPDUs, previously sent with ack policy set to Block Ack, should be placed in the retransmission queue.

Definition at line 561 of file block-ack-manager.cc.

References ns3::OriginatorBlockAckAgreement::ESTABLISHED, ExistsAgreementInState(), InsertInRetryQueue(), m_agreements, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ operator=()

BlockAckManager& ns3::BlockAckManager::operator= ( const BlockAckManager block)
private

assignment operator

Parameters
blockBlockAckManager to assign
Returns
the assigned BlockAckManager

◆ RemoveFromRetryQueue() [1/2]

void ns3::BlockAckManager::RemoveFromRetryQueue ( Mac48Address  address,
uint8_t  tid,
uint16_t  seq 
)
private

Remove an item from retransmission queue.

This method should be called when packets are acknowledged.

Parameters
addressrecipient MAC address of the packet to be removed
tidTraffic ID of the packet to be removed
seqsequence number of the packet to be removed

Definition at line 814 of file block-ack-manager.cc.

References first::address.

Referenced by RemoveOldPackets().

+ Here is the caller graph for this function:

◆ RemoveFromRetryQueue() [2/2]

void ns3::BlockAckManager::RemoveFromRetryQueue ( Mac48Address  address,
uint8_t  tid,
uint16_t  startSeq,
uint16_t  endSeq 
)
private

Remove a range of items from retransmission queue.

This method should be called when packets are acknowledged.

Parameters
addressrecipient MAC address of the packet to be removed
tidTraffic ID of the packet to be removed
startSeqsequence number of the first packet to be removed
endSeqsequence number of the last packet to be removed

Definition at line 820 of file block-ack-manager.cc.

References first::address, m_agreements, m_retryPackets, NS_ASSERT, NS_LOG_DEBUG, and NS_LOG_FUNCTION.

◆ RemoveOldPackets()

void ns3::BlockAckManager::RemoveOldPackets ( Mac48Address  recipient,
uint8_t  tid,
uint16_t  startingSeq 
)
private

Remove packets from the retransmit queue and from the queue of outstanding packets that become old after setting the starting sequence number for the agreement with recipient equal to recipient and TID equal to tid to the given startingSeq.

Parameters
recipientthe recipient MAC address
tidTraffic ID
startingSeqthe new starting sequence number

Definition at line 849 of file block-ack-manager.cc.

References m_agreements, NS_ABORT_MSG_IF, NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, RemoveFromRetryQueue(), ns3::SEQNO_SPACE_HALF_SIZE, and ns3::SEQNO_SPACE_SIZE.

Referenced by NotifyDiscardedMpdu(), and NotifyGotBlockAck().

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

◆ ScheduleBar()

void ns3::BlockAckManager::ScheduleBar ( Ptr< const WifiMacQueueItem bar,
bool  skipIfNoDataQueued = false 
)
Parameters
barthe BlockAckRequest to enqueue
skipIfNoDataQueueddo not send if there is no data queued

Enqueue the given BlockAckRequest into the queue storing the next BAR frames to transmit. If a BAR for the same recipient and TID is already present in the queue, it is replaced by the new one. If the given BAR is retransmitted, it is placed at the head of the queue, otherwise at the tail.

Definition at line 674 of file block-ack-manager.cc.

References m_bars, NS_ASSERT, and NS_LOG_FUNCTION.

Referenced by NotifyDiscardedMpdu().

+ Here is the caller graph for this function:

◆ SetBlockAckInactivityCallback()

void ns3::BlockAckManager::SetBlockAckInactivityCallback ( Callback< void, Mac48Address, uint8_t, bool >  callback)

Set BlockAck inactivity callback.

Parameters
callbackthe BlockAck inactivity callback function

Definition at line 888 of file block-ack-manager.cc.

References m_blockAckInactivityTimeout, and NS_LOG_FUNCTION.

◆ SetBlockAckThreshold()

void ns3::BlockAckManager::SetBlockAckThreshold ( uint8_t  nPackets)
Parameters
nPacketsMinimum number of packets for use of block ack.

Upon receipt of a BlockAck frame, if total number of packets (packets in WifiMacQueue and buffered packets) is greater of nPackets, they are transmitted using block ack mechanism.

Definition at line 388 of file block-ack-manager.cc.

References m_blockAckThreshold, and NS_LOG_FUNCTION.

◆ SetBlockAckType()

void ns3::BlockAckManager::SetBlockAckType ( BlockAckType  bAckType)
Parameters
bAckTypeType of BlockAck

See ctrl-headers.h for more details.

Definition at line 602 of file block-ack-manager.cc.

References m_blockAckType, and NS_LOG_FUNCTION.

◆ SetBlockDestinationCallback()

void ns3::BlockAckManager::SetBlockDestinationCallback ( Callback< void, Mac48Address, uint8_t >  callback)

Set block destination callback.

Parameters
callbackthe block destination callback

Definition at line 895 of file block-ack-manager.cc.

References m_blockPackets, and NS_LOG_FUNCTION.

◆ SetQueue()

void ns3::BlockAckManager::SetQueue ( const Ptr< WifiMacQueue queue)
Parameters
queueThe WifiMacQueue object.

Definition at line 767 of file block-ack-manager.cc.

References m_queue, and NS_LOG_FUNCTION.

◆ SetTxFailedCallback()

void ns3::BlockAckManager::SetTxFailedCallback ( TxFailed  callback)
Parameters
callbackthe callback to invoke when a packet transmission was completed unsuccessfully.

Definition at line 922 of file block-ack-manager.cc.

References m_txFailedCallback.

◆ SetTxMiddle()

void ns3::BlockAckManager::SetTxMiddle ( const Ptr< MacTxMiddle txMiddle)

Set the MacTxMiddle.

Parameters
txMiddlethe MacTxMiddle

Definition at line 909 of file block-ack-manager.cc.

References m_txMiddle, and NS_LOG_FUNCTION.

◆ SetTxOkCallback()

void ns3::BlockAckManager::SetTxOkCallback ( TxOk  callback)
Parameters
callbackthe callback to invoke when a packet transmission was completed successfully.

Definition at line 916 of file block-ack-manager.cc.

References m_txOkCallback.

◆ SetUnblockDestinationCallback()

void ns3::BlockAckManager::SetUnblockDestinationCallback ( Callback< void, Mac48Address, uint8_t >  callback)

Set unblock destination callback.

Parameters
callbackthe unblock destination callback

Definition at line 902 of file block-ack-manager.cc.

References m_unblockPackets, and NS_LOG_FUNCTION.

◆ SetWifiRemoteStationManager()

void ns3::BlockAckManager::SetWifiRemoteStationManager ( const Ptr< WifiRemoteStationManager manager)

Set up WifiRemoteStationManager associated with this BlockAckManager.

Parameters
managerWifiRemoteStationManager associated with this BlockAckManager

Definition at line 395 of file block-ack-manager.cc.

References m_stationManager, and NS_LOG_FUNCTION.

◆ StorePacket()

void ns3::BlockAckManager::StorePacket ( Ptr< WifiMacQueueItem mpdu)
Parameters
mpduMPDU to store.

Stores mpdu for a possible future retransmission. Retransmission occurs if the packet, in a BlockAck frame, is indicated by recipient as not received.

Definition at line 246 of file block-ack-manager.cc.

References m_agreements, NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, and ns3::SEQNO_SPACE_HALF_SIZE.

◆ SwitchToBlockAckIfNeeded()

bool ns3::BlockAckManager::SwitchToBlockAckIfNeeded ( Mac48Address  recipient,
uint8_t  tid,
uint16_t  startingSeq 
)
Parameters
recipientthe destination address
tidthe Traffic ID
startingSeqthe starting sequence number
Returns
true if there are packets in the queue that could be sent under block ack, false otherwise

Checks if there are in the queue other packets that could be send under block ack. If yes adds these packets in current block ack exchange. However, number of packets exchanged in the current block ack, will not exceed the value of BufferSize in the corresponding OriginatorBlockAckAgreement object.

Definition at line 774 of file block-ack-manager.cc.

References ExistsAgreement(), ExistsAgreementInState(), GetNBufferedPackets(), m_blockAckThreshold, m_queue, NotifyAgreementEstablished(), NS_ASSERT, NS_LOG_FUNCTION, ns3::OriginatorBlockAckAgreement::PENDING, and ns3::OriginatorBlockAckAgreement::REJECTED.

+ Here is the call graph for this function:

◆ UpdateAgreement()

Member Data Documentation

◆ m_address

Mac48Address ns3::BlockAckManager::m_address
private

address

Definition at line 511 of file block-ack-manager.h.

◆ m_agreements

Agreements ns3::BlockAckManager::m_agreements
private

This data structure contains, for each block ack agreement (recipient, TID), a set of packets for which an ack by block ack is requested.

Every packet or fragment indicated as correctly received in BlockAck frame is erased from this data structure. Pushed back in retransmission queue otherwise.

Definition at line 498 of file block-ack-manager.h.

Referenced by CreateAgreement(), DestroyAgreement(), DiscardOutstandingMpdus(), ExistsAgreement(), ExistsAgreementInState(), GetBar(), GetBlockAckReqHeader(), GetNBufferedPackets(), GetOriginatorStartingSequence(), GetRecipientBufferSize(), InsertInRetryQueue(), NeedBarRetransmission(), NotifyAgreementEstablished(), NotifyAgreementNoReply(), NotifyAgreementRejected(), NotifyAgreementReset(), NotifyDiscardedMpdu(), NotifyGotAck(), NotifyGotBlockAck(), NotifyMissedAck(), NotifyMissedBlockAck(), RemoveFromRetryQueue(), RemoveOldPackets(), StorePacket(), UpdateAgreement(), and ~BlockAckManager().

◆ m_agreementState

TracedCallback<Time, Mac48Address, uint8_t, OriginatorBlockAckAgreement::State> ns3::BlockAckManager::m_agreementState
private

The trace source fired when a state transition occurred.

Definition at line 523 of file block-ack-manager.h.

Referenced by CreateAgreement(), GetTypeId(), NotifyAgreementEstablished(), NotifyAgreementNoReply(), NotifyAgreementRejected(), NotifyAgreementReset(), and UpdateAgreement().

◆ m_bars

std::list<Bar> ns3::BlockAckManager::m_bars
private

list of BARs

Definition at line 506 of file block-ack-manager.h.

Referenced by DestroyAgreement(), GetBar(), and ScheduleBar().

◆ m_blockAckInactivityTimeout

Callback<void, Mac48Address, uint8_t, bool> ns3::BlockAckManager::m_blockAckInactivityTimeout
private

BlockAck inactivity timeout callback.

Definition at line 513 of file block-ack-manager.h.

Referenced by InactivityTimeout(), and SetBlockAckInactivityCallback().

◆ m_blockAckThreshold

uint8_t ns3::BlockAckManager::m_blockAckThreshold
private

block ack threshold

Definition at line 508 of file block-ack-manager.h.

Referenced by SetBlockAckThreshold(), and SwitchToBlockAckIfNeeded().

◆ m_blockAckType

BlockAckType ns3::BlockAckManager::m_blockAckType
private

BlockAck type.

Definition at line 509 of file block-ack-manager.h.

Referenced by GetBlockAckReqHeader(), and SetBlockAckType().

◆ m_blockPackets

Callback<void, Mac48Address, uint8_t> ns3::BlockAckManager::m_blockPackets
private

block packets callback

Definition at line 514 of file block-ack-manager.h.

Referenced by CreateAgreement(), and SetBlockDestinationCallback().

◆ m_queue

Ptr<WifiMacQueue> ns3::BlockAckManager::m_queue
private

◆ m_retryPackets

Ptr<WifiMacQueue> ns3::BlockAckManager::m_retryPackets
private

This list contains all iterators to stored packets that need to be retransmitted.

A packet needs retransmission if it's indicated as not correctly received in a BlockAck frame.

Definition at line 505 of file block-ack-manager.h.

Referenced by BlockAckManager(), DestroyAgreement(), GetBar(), GetRetransmitQueue(), HasPackets(), InsertInRetryQueue(), RemoveFromRetryQueue(), UpdateAgreement(), and ~BlockAckManager().

◆ m_stationManager

Ptr<WifiRemoteStationManager> ns3::BlockAckManager::m_stationManager
private

the station manager

Definition at line 518 of file block-ack-manager.h.

Referenced by CreateAgreement(), NotifyGotBlockAck(), and SetWifiRemoteStationManager().

◆ m_txFailedCallback

TxFailed ns3::BlockAckManager::m_txFailedCallback
private

transmit failed callback

Definition at line 517 of file block-ack-manager.h.

Referenced by NotifyGotBlockAck(), and SetTxFailedCallback().

◆ m_txMiddle

Ptr<MacTxMiddle> ns3::BlockAckManager::m_txMiddle
private

the MacTxMiddle

Definition at line 510 of file block-ack-manager.h.

Referenced by SetTxMiddle(), and UpdateAgreement().

◆ m_txOkCallback

TxOk ns3::BlockAckManager::m_txOkCallback
private

transmit OK callback

Definition at line 516 of file block-ack-manager.h.

Referenced by NotifyGotBlockAck(), and SetTxOkCallback().

◆ m_unblockPackets

Callback<void, Mac48Address, uint8_t> ns3::BlockAckManager::m_unblockPackets
private

unblock packets callback

Definition at line 515 of file block-ack-manager.h.

Referenced by NotifyAgreementNoReply(), SetUnblockDestinationCallback(), and UpdateAgreement().


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