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

QosFrameExchangeManager handles the frame exchange sequences for QoS stations. More...

#include "qos-frame-exchange-manager.h"

+ Inheritance diagram for ns3::QosFrameExchangeManager:
+ Collaboration diagram for ns3::QosFrameExchangeManager:

Public Member Functions

 QosFrameExchangeManager ()
 
 ~QosFrameExchangeManager () override
 
virtual Ptr< WifiMpduCreateAliasIfNeeded (Ptr< WifiMpdu > mpdu) const
 Create an alias of the given MPDU for transmission by this Frame Exchange Manager. More...
 
virtual bool IsWithinLimitsIfAddMpdu (Ptr< const WifiMpdu > mpdu, const WifiTxParameters &txParams, Time ppduDurationLimit) const
 Check whether the given MPDU can be added to the frame being built (as described by the given TX parameters) without violating the given constraint on the PPDU transmission duration. More...
 
virtual bool IsWithinSizeAndTimeLimits (uint32_t ppduPayloadSize, Mac48Address receiver, const WifiTxParameters &txParams, Time ppduDurationLimit) const
 Check whether the transmission time of the frame being built (as described by the given TX parameters) does not exceed the given PPDU duration limit if the size of the PSDU addressed to the given receiver becomes ppduPayloadSize. More...
 
bool StartTransmission (Ptr< Txop > edca, uint16_t allowedWidth) override
 Request the FrameExchangeManager to start a frame exchange sequence. More...
 
bool TryAddMpdu (Ptr< const WifiMpdu > mpdu, WifiTxParameters &txParams, Time availableTime) const
 Recompute the protection and acknowledgment methods to use if the given MPDU is added to the frame being built (as described by the given TX parameters) and check whether the duration of the frame exchange sequence (including protection and acknowledgment) does not exceed the given available time. More...
 
- Public Member Functions inherited from ns3::FrameExchangeManager
 FrameExchangeManager ()
 
 ~FrameExchangeManager () override
 
virtual void CalculateAcknowledgmentTime (WifiAcknowledgment *acknowledgment) const
 Calculate the time required to acknowledge a frame according to the given acknowledgment method. More...
 
virtual void CalculateProtectionTime (WifiProtection *protection) const
 Calculate the time required to protect a frame according to the given protection method. More...
 
Ptr< WifiAckManagerGetAckManager () const
 Get the Acknowledgment Manager used by this node. More...
 
Mac48Address GetAddress () const
 Get the MAC address. More...
 
Mac48Address GetBssid () const
 Get the Basic Service Set Identification. More...
 
const std::set< Mac48Address > & GetProtectedStas () const
 
Ptr< WifiProtectionManagerGetProtectionManager () const
 Get the Protection Manager used by this node. More...
 
const WifiTxTimerGetWifiTxTimer () const
 Get a const reference to the WifiTxTimer object. More...
 
bool IsPromisc () const
 Check if the device is operating in promiscuous mode. More...
 
virtual void NotifyInternalCollision (Ptr< Txop > txop)
 Notify that an internal collision has occurred for the given Txop. More...
 
void NotifyOffNow ()
 This method is typically invoked by the PhyListener to notify the MAC layer that the device has been put into off mode. More...
 
void NotifySleepNow ()
 This method is typically invoked by the PhyListener to notify the MAC layer that the device has been put into sleep mode. More...
 
virtual void NotifySwitchingStartNow (Time duration)
 
void Receive (Ptr< const WifiPsdu > psdu, RxSignalInfo rxSignalInfo, WifiTxVector txVector, std::vector< bool > perMpduStatus)
 This method is intended to be called by the PHY layer every time an MPDU is received and also when the reception of an A-MPDU is completed. More...
 
virtual void ResetPhy ()
 Remove WifiPhy associated with this FrameExchangeManager. More...
 
void SetAckedMpduCallback (AckedMpdu callback)
 Set the callback to invoke when an MPDU is successfully acked. More...
 
virtual void SetAckManager (Ptr< WifiAckManager > ackManager)
 Set the Acknowledgment Manager to use. More...
 
virtual void SetAddress (Mac48Address address)
 Set the MAC address. More...
 
virtual void SetBssid (Mac48Address bssid)
 Set the Basic Service Set Identification. More...
 
virtual void SetChannelAccessManager (const Ptr< ChannelAccessManager > channelAccessManager)
 Set the channel access manager to use. More...
 
virtual void SetDroppedMpduCallback (DroppedMpdu callback)
 Set the callback to invoke when an MPDU is dropped. More...
 
virtual void SetLinkId (uint8_t linkId)
 Set the ID of the link this Frame Exchange Manager is associated with. More...
 
virtual void SetMacRxMiddle (const Ptr< MacRxMiddle > rxMiddle)
 Set the MAC RX Middle to use. More...
 
virtual void SetMacTxMiddle (const Ptr< MacTxMiddle > txMiddle)
 Set the MAC TX Middle to use. More...
 
void SetPromisc ()
 Enable promiscuous mode. More...
 
virtual void SetProtectionManager (Ptr< WifiProtectionManager > protectionManager)
 Set the Protection Manager to use. More...
 
virtual void SetWifiMac (const Ptr< WifiMac > mac)
 Set the MAC layer to use. More...
 
virtual void SetWifiPhy (const Ptr< WifiPhy > phy)
 Set the PHY layer to use. More...
 
virtual bool VirtualCsMediumIdle () const
 
- Public Member Functions inherited from ns3::Object
 Object ()
 Constructor. More...
 
 ~Object () override
 Destructor. More...
 
void AggregateObject (Ptr< Object > other)
 Aggregate two Objects together. More...
 
void Dispose ()
 Dispose of this Object. More...
 
AggregateIterator GetAggregateIterator () const
 Get an iterator to the Objects aggregated to this one. More...
 
TypeId GetInstanceTypeId () const override
 Get the most derived TypeId for this Object. More...
 
template<typename T >
Ptr< T > GetObject () const
 Get a pointer to the requested aggregated Object. More...
 
template<>
Ptr< ObjectGetObject () const
 Specialization of () for objects of type ns3::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 (TypeId tid) const
 Specialization of (TypeId tid) for objects of type ns3::Object. More...
 
void Initialize ()
 Invoke DoInitialize on all Objects aggregated to this one. More...
 
bool IsInitialized () 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[[maybe_unused]])
 Copy constructor. More...
 
uint32_t GetReferenceCount () const
 Get the reference count of the object. More...
 
SimpleRefCountoperator= (const SimpleRefCount &o[[maybe_unused]])
 Assignment operator. More...
 
void Ref () const
 Increment the reference count. More...
 
void Unref () 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 errors. 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 ()
 Get the type ID. More...
 
- Static Public Member Functions inherited from ns3::FrameExchangeManager
static TypeId GetTypeId ()
 Get the type ID. More...
 
- Static Public Member Functions inherited from ns3::Object
static TypeId GetTypeId ()
 Register this type. More...
 
- Static Public Member Functions inherited from ns3::ObjectBase
static TypeId GetTypeId ()
 Get the type ID. More...
 

Protected Member Functions

virtual void ClearTxopHolderIfNeeded ()
 Clear the TXOP holder if the NAV counted down to zero (includes the case of NAV reset). More...
 
void DoDispose () override
 Destructor implementation. More...
 
void ForwardMpduDown (Ptr< WifiMpdu > mpdu, WifiTxVector &txVector) override
 Forward an MPDU down to the PHY layer. More...
 
Time GetCtsToSelfDurationId (const WifiTxVector &ctsTxVector, Time txDuration, Time response) const override
 Compute how to set the Duration/ID field of a CTS-to-self frame to send to protect a frame transmitted with the given TX vector. More...
 
Time GetFrameDurationId (const WifiMacHeader &header, uint32_t size, const WifiTxParameters &txParams, Ptr< Packet > fragmentedPacket) const override
 Compute how to set the Duration/ID field of a frame being transmitted with the given TX parameters. More...
 
Time GetRtsDurationId (const WifiTxVector &rtsTxVector, Time txDuration, Time response) const override
 Compute how to set the Duration/ID field of an RTS frame to send to protect a frame transmitted with the given TX vector. More...
 
void NavResetTimeout () override
 Reset the NAV upon expiration of the NAV reset timer. More...
 
void PifsRecovery ()
 Perform a PIFS recovery as a response to transmission failure within a TXOP. More...
 
void PostProcessFrame (Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector) override
 Perform actions that are possibly needed after receiving any frame, independently of whether the frame is addressed to this station (e.g., setting the NAV or the TXOP holder). More...
 
void PreProcessFrame (Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector) override
 Perform actions that are possibly needed when receiving any frame, independently of whether the frame is addressed to this station (e.g., storing buffer status reports). More...
 
void ReceiveMpdu (Ptr< const WifiMpdu > mpdu, RxSignalInfo rxSignalInfo, const WifiTxVector &txVector, bool inAmpdu) override
 This method handles the reception of an MPDU (possibly included in an A-MPDU) More...
 
virtual bool SendCfEndIfNeeded ()
 Send a CF-End frame to indicate the completion of the TXOP, provided that the remaining duration is long enough to transmit this frame. More...
 
virtual void SetTxopHolder (Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector)
 Set the TXOP holder, if needed, based on the received frame. More...
 
virtual bool StartFrameExchange (Ptr< QosTxop > edca, Time availableTime, bool initialFrame)
 Start a frame exchange (including protection frames and acknowledgment frames as needed) that fits within the given availableTime (if different than Time::Min()). More...
 
virtual bool StartTransmission (Ptr< QosTxop > edca, Time txopDuration)
 Request the FrameExchangeManager to start a frame exchange sequence. More...
 
void TransmissionFailed () override
 Take necessary actions upon a transmission failure. More...
 
void TransmissionSucceeded () override
 Take necessary actions upon a transmission success. More...
 
void UpdateNav (Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector) override
 Update the NAV, if needed, based on the Duration/ID of the given psdu. More...
 
- Protected Member Functions inherited from ns3::FrameExchangeManager
virtual void CtsTimeout (Ptr< WifiMpdu > rts, const WifiTxVector &txVector)
 Called when the CTS timeout expires. More...
 
virtual void DequeueMpdu (Ptr< const WifiMpdu > mpdu)
 Dequeue the given MPDU from the queue in which it is stored. More...
 
void DoCtsTimeout (Ptr< WifiPsdu > psdu)
 Take required actions when the CTS timer fired after sending an RTS to protect the given PSDU expires. More...
 
void DoSendCtsAfterRts (const WifiMacHeader &rtsHdr, WifiTxVector &ctsTxVector, double rtsSnr)
 Send CTS after receiving RTS. More...
 
virtual void EndReceiveAmpdu (Ptr< const WifiPsdu > psdu, const RxSignalInfo &rxSignalInfo, const WifiTxVector &txVector, const std::vector< bool > &perMpduStatus)
 This method is called when the reception of an A-MPDU including multiple MPDUs is completed. More...
 
virtual void FinalizeMacHeader (Ptr< const WifiPsdu > psdu)
 Finalize the MAC header of the MPDUs in the given PSDU before transmission. More...
 
Ptr< WifiMpduGetFirstFragmentIfNeeded (Ptr< WifiMpdu > mpdu)
 Fragment the given MPDU if needed. More...
 
Ptr< WifiMpduGetNextFragment ()
 Get the next fragment of the current MSDU. More...
 
virtual uint32_t GetPsduSize (Ptr< const WifiMpdu > mpdu, const WifiTxVector &txVector) const
 Get the size in bytes of the given MPDU, which is to be transmitted with the given TXVECTOR. More...
 
virtual Time GetTxDuration (uint32_t ppduPayloadSize, Mac48Address receiver, const WifiTxParameters &txParams) const
 Get the updated TX duration of the frame associated with the given TX parameters if the size of the PSDU addressed to the given receiver becomes ppduPayloadSize. More...
 
Ptr< WifiRemoteStationManagerGetWifiRemoteStationManager () const
 
virtual void NormalAckTimeout (Ptr< WifiMpdu > mpdu, const WifiTxVector &txVector)
 Called when the Ack timeout expires. More...
 
virtual void NotifyChannelReleased (Ptr< Txop > txop)
 Notify the given Txop that channel has been released. More...
 
virtual void NotifyPacketDiscarded (Ptr< const WifiMpdu > mpdu)
 Pass the given MPDU, discarded because of the max retry limit was reached, to the MPDU dropped callback. More...
 
virtual void NotifyReceivedNormalAck (Ptr< WifiMpdu > mpdu)
 Notify other components that an MPDU was acknowledged. More...
 
virtual void ProtectionCompleted ()
 Transmit prepared frame upon successful protection mechanism. More...
 
virtual void ReceivedNormalAck (Ptr< WifiMpdu > mpdu, const WifiTxVector &txVector, const WifiTxVector &ackTxVector, const RxSignalInfo &rxInfo, double snr)
 Perform the actions needed when a Normal Ack is received. More...
 
virtual void ReleaseSequenceNumbers (Ptr< const WifiPsdu > psdu) const
 Make the sequence numbers of MPDUs included in the given PSDU available again if the MPDUs have never been transmitted. More...
 
virtual void Reset ()
 Reset this frame exchange manager. More...
 
virtual void RetransmitMpduAfterMissedAck (Ptr< WifiMpdu > mpdu) const
 Retransmit an MPDU that was not acknowledged. More...
 
virtual void RxStartIndication (WifiTxVector txVector, Time psduDuration)
 
void SendCtsAfterRts (const WifiMacHeader &rtsHdr, WifiMode rtsTxMode, double rtsSnr)
 Send CTS after receiving RTS. More...
 
void SendCtsToSelf (const WifiTxParameters &txParams)
 Send CTS for a CTS-to-self mechanism. More...
 
void SendMpduWithProtection (Ptr< WifiMpdu > mpdu, WifiTxParameters &txParams)
 Send an MPDU with the given TX parameters (with the specified protection). More...
 
void SendNormalAck (const WifiMacHeader &hdr, const WifiTxVector &dataTxVector, double dataSnr)
 Send Normal Ack. More...
 
void SendRts (const WifiTxParameters &txParams)
 Send RTS to begin RTS-CTS-Data-Ack transaction. More...
 
virtual void StartProtection (const WifiTxParameters &txParams)
 Start the protection mechanism indicated by the given TX parameters. More...
 
void UpdateTxDuration (Mac48Address receiver, WifiTxParameters &txParams) const
 Update the TX duration field of the given TX parameters after that the PSDU addressed to the given receiver has changed. More...
 
- Protected Member Functions inherited from ns3::Object
 Object (const Object &o)
 Copy an Object. More...
 
virtual void DoInitialize ()
 Initialize() implementation. More...
 
virtual void NotifyNewAggregate ()
 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 ()
 Notifier called once the ObjectBase is fully constructed. More...
 

Protected Attributes

Ptr< QosTxopm_edca
 the EDCAF that gained channel access More...
 
bool m_setQosQueueSize
 whether to set the Queue Size subfield of the QoS Control field of QoS data frames More...
 
std::optional< Mac48Addressm_txopHolder
 MAC address of the TXOP holder. More...
 
- Protected Attributes inherited from ns3::FrameExchangeManager
AckedMpdu m_ackedMpduCallback
 the acknowledged MPDU callback More...
 
uint16_t m_allowedWidth
 the allowed width in MHz for the current transmission More...
 
Mac48Address m_bssid
 BSSID address (Mac48Address) More...
 
Ptr< ChannelAccessManagerm_channelAccessManager
 the channel access manager More...
 
Ptr< Txopm_dcf
 the DCF/EDCAF that gained channel access More...
 
DroppedMpdu m_droppedMpduCallback
 the dropped MPDU callback More...
 
uint8_t m_linkId
 the ID of the link this object is associated with More...
 
Ptr< WifiMacm_mac
 the MAC layer on this station More...
 
Time m_navEnd
 NAV expiration time. More...
 
EventId m_navResetEvent
 the event to reset the NAV after an RTS More...
 
Ptr< WifiPhym_phy
 the PHY layer on this station More...
 
bool m_promisc
 Flag if the device is operating in promiscuous mode. More...
 
std::set< Mac48Addressm_protectedStas
 STAs that have replied to an RTS in this TXOP. More...
 
Ptr< MacRxMiddlem_rxMiddle
 the MAC RX Middle on this station More...
 
Mac48Address m_self
 the MAC address of this device More...
 
std::set< Mac48Addressm_sentRtsTo
 the STA(s) which we sent an RTS to (waiting for CTS) More...
 
Ptr< MacTxMiddlem_txMiddle
 the MAC TX Middle on this station More...
 
WifiTxTimer m_txTimer
 the timer set upon frame transmission More...
 

Private Member Functions

void CancelPifsRecovery ()
 Cancel the PIFS recovery event and have the EDCAF attempting PIFS recovery release the channel. More...
 

Private Attributes

Ptr< Txopm_edcaBackingOff
 channel access function that invoked backoff during TXOP More...
 
bool m_initialFrame
 true if transmitting the initial frame of a TXOP More...
 
bool m_pifsRecovery
 true if performing a PIFS recovery after failure More...
 
EventId m_pifsRecoveryEvent
 event associated with an attempt of PIFS recovery More...
 

Additional Inherited Members

- Public Types inherited from ns3::FrameExchangeManager
typedef Callback< void, Ptr< const WifiMpdu > > AckedMpdu
 typedef for a callback to invoke when an MPDU is successfully acknowledged. More...
 
typedef Callback< void, WifiMacDropReason, Ptr< const WifiMpdu > > DroppedMpdu
 typedef for a callback to invoke when an MPDU is dropped. More...
 

Detailed Description

QosFrameExchangeManager handles the frame exchange sequences for QoS stations.

Note that Basic Block Ack is not supported.

Definition at line 37 of file qos-frame-exchange-manager.h.

Constructor & Destructor Documentation

◆ QosFrameExchangeManager()

ns3::QosFrameExchangeManager::QosFrameExchangeManager ( )

Definition at line 62 of file qos-frame-exchange-manager.cc.

References NS_LOG_FUNCTION.

◆ ~QosFrameExchangeManager()

ns3::QosFrameExchangeManager::~QosFrameExchangeManager ( )
override

Definition at line 68 of file qos-frame-exchange-manager.cc.

References NS_LOG_FUNCTION_NOARGS.

Member Function Documentation

◆ CancelPifsRecovery()

void ns3::QosFrameExchangeManager::CancelPifsRecovery ( )
private

Cancel the PIFS recovery event and have the EDCAF attempting PIFS recovery release the channel.

Definition at line 149 of file qos-frame-exchange-manager.cc.

References ns3::EventId::Cancel(), ns3::EventId::IsRunning(), m_edca, m_pifsRecoveryEvent, ns3::FrameExchangeManager::NotifyChannelReleased(), NS_ASSERT, NS_LOG_DEBUG, and NS_LOG_FUNCTION.

Referenced by StartTransmission().

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

◆ ClearTxopHolderIfNeeded()

void ns3::QosFrameExchangeManager::ClearTxopHolderIfNeeded ( )
protectedvirtual

Clear the TXOP holder if the NAV counted down to zero (includes the case of NAV reset).

Reimplemented in ns3::HeFrameExchangeManager.

Definition at line 720 of file qos-frame-exchange-manager.cc.

References ns3::FrameExchangeManager::m_navEnd, m_txopHolder, ns3::Simulator::Now(), and NS_LOG_FUNCTION.

Referenced by NavResetTimeout(), and PreProcessFrame().

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

◆ CreateAliasIfNeeded()

Ptr< WifiMpdu > ns3::QosFrameExchangeManager::CreateAliasIfNeeded ( Ptr< WifiMpdu mpdu) const
virtual

Create an alias of the given MPDU for transmission by this Frame Exchange Manager.

This is required by 11be MLDs to support translation of MAC addresses. For single link devices, the given MPDU is simply returned.

Parameters
mpduthe given MPDU
Returns
the alias of the given MPDU for transmission on this link

Reimplemented in ns3::EhtFrameExchangeManager.

Definition at line 324 of file qos-frame-exchange-manager.cc.

Referenced by ns3::EhtFrameExchangeManager::CreateAliasIfNeeded(), StartFrameExchange(), and ns3::HtFrameExchangeManager::StartFrameExchange().

+ Here is the caller graph for this function:

◆ DoDispose()

void ns3::QosFrameExchangeManager::DoDispose ( void  )
overrideprotectedvirtual

Destructor implementation.

This method is called by Dispose() or by the Object's destructor, whichever comes first.

Subclasses are expected to implement their real destruction code in an overridden version of this method and chain up to their parent's implementation once they are done. i.e, for simplicity, the destructor of every subclass should be empty and its content should be moved to the associated DoDispose() method.

It is safe to call GetObject() from within this method.

Reimplemented from ns3::FrameExchangeManager.

Definition at line 74 of file qos-frame-exchange-manager.cc.

References ns3::EventId::Cancel(), ns3::FrameExchangeManager::DoDispose(), m_edca, m_edcaBackingOff, m_pifsRecoveryEvent, and NS_LOG_FUNCTION.

Referenced by ns3::HtFrameExchangeManager::DoDispose().

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

◆ ForwardMpduDown()

void ns3::QosFrameExchangeManager::ForwardMpduDown ( Ptr< WifiMpdu mpdu,
WifiTxVector txVector 
)
overrideprotectedvirtual

Forward an MPDU down to the PHY layer.

Parameters
mpduthe MPDU to forward down
txVectorthe TXVECTOR used to transmit the MPDU

Reimplemented from ns3::FrameExchangeManager.

Definition at line 552 of file qos-frame-exchange-manager.cc.

References ns3::FrameExchangeManager::ForwardMpduDown(), ns3::WifiMacHeader::GetAddr1(), ns3::QosTxop::GetQosQueueSize(), ns3::WifiMacHeader::GetQosTid(), ns3::WifiMac::GetQosTxop(), ns3::WifiMac::GetTypeOfStation(), ns3::WifiMacHeader::IsQosData(), ns3::WifiMacHeader::IsQosEosp(), ns3::FrameExchangeManager::m_mac, m_setQosQueueSize, NS_LOG_FUNCTION, ns3::WifiMacHeader::SetQosEosp(), ns3::WifiMacHeader::SetQosQueueSize(), and ns3::STA.

Referenced by SendCfEndIfNeeded().

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

◆ GetCtsToSelfDurationId()

Time ns3::QosFrameExchangeManager::GetCtsToSelfDurationId ( const WifiTxVector ctsTxVector,
Time  txDuration,
Time  response 
) const
overrideprotectedvirtual

Compute how to set the Duration/ID field of a CTS-to-self frame to send to protect a frame transmitted with the given TX vector.

Parameters
ctsTxVectorthe TX vector used to send the CTS-to-self frame
txDurationthe TX duration of the data frame
responsethe time taken by the response (acknowledgment) to the data frame
Returns
the computed Duration/ID value for the CTS-to-self frame

Reimplemented from ns3::FrameExchangeManager.

Definition at line 525 of file qos-frame-exchange-manager.cc.

References ns3::WifiPhy::CalculateTxDuration(), ns3::GetCtsSize(), ns3::FrameExchangeManager::GetCtsToSelfDurationId(), ns3::WifiPhy::GetPhyBand(), ns3::QosTxop::GetRemainingTxop(), ns3::Txop::GetTxopLimit(), ns3::Time::IsZero(), m_edca, ns3::FrameExchangeManager::m_linkId, ns3::FrameExchangeManager::m_phy, max, NS_LOG_FUNCTION, and ns3::Seconds().

+ Here is the call graph for this function:

◆ GetFrameDurationId()

Time ns3::QosFrameExchangeManager::GetFrameDurationId ( const WifiMacHeader header,
uint32_t  size,
const WifiTxParameters txParams,
Ptr< Packet fragmentedPacket 
) const
overrideprotectedvirtual

Compute how to set the Duration/ID field of a frame being transmitted with the given TX parameters.

Parameters
headerthe MAC header of the frame
sizethe size of the frame in bytes
txParamsthe TX parameters used to send the frame
fragmentedPacketthe packet that originated the frame to transmit, in case the latter is a fragment
Returns
the computed Duration/ID value

Reimplemented from ns3::FrameExchangeManager.

Definition at line 467 of file qos-frame-exchange-manager.cc.

References ns3::WifiPhy::CalculateTxDuration(), ns3::FrameExchangeManager::GetFrameDurationId(), ns3::WifiPhy::GetPhyBand(), ns3::QosTxop::GetRemainingTxop(), ns3::Txop::GetTxopLimit(), ns3::Time::IsZero(), ns3::WifiTxParameters::m_acknowledgment, m_edca, ns3::FrameExchangeManager::m_linkId, ns3::FrameExchangeManager::m_phy, ns3::WifiTxParameters::m_txVector, max, ns3::Time::Min(), NS_ASSERT, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ GetRtsDurationId()

Time ns3::QosFrameExchangeManager::GetRtsDurationId ( const WifiTxVector rtsTxVector,
Time  txDuration,
Time  response 
) const
overrideprotectedvirtual

Compute how to set the Duration/ID field of an RTS frame to send to protect a frame transmitted with the given TX vector.

Parameters
rtsTxVectorthe TX vector used to send the RTS frame
txDurationthe TX duration of the data frame
responsethe time taken by the response (acknowledgment) to the data frame
Returns
the computed Duration/ID value for the RTS frame

Reimplemented from ns3::FrameExchangeManager.

Definition at line 498 of file qos-frame-exchange-manager.cc.

References ns3::WifiPhy::CalculateTxDuration(), ns3::WifiPhy::GetPhyBand(), ns3::QosTxop::GetRemainingTxop(), ns3::FrameExchangeManager::GetRtsDurationId(), ns3::GetRtsSize(), ns3::Txop::GetTxopLimit(), ns3::Time::IsZero(), m_edca, ns3::FrameExchangeManager::m_linkId, ns3::FrameExchangeManager::m_phy, max, NS_LOG_FUNCTION, and ns3::Seconds().

Referenced by ns3::HeFrameExchangeManager::GetMuRtsDurationId().

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

◆ GetTypeId()

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

Get the type ID.

Returns
the object TypeId

Definition at line 40 of file qos-frame-exchange-manager.cc.

References m_pifsRecovery, m_setQosQueueSize, ns3::MakeBooleanAccessor(), ns3::MakeBooleanChecker(), and ns3::TypeId::SetParent().

+ Here is the call graph for this function:

◆ IsWithinLimitsIfAddMpdu()

bool ns3::QosFrameExchangeManager::IsWithinLimitsIfAddMpdu ( Ptr< const WifiMpdu mpdu,
const WifiTxParameters txParams,
Time  ppduDurationLimit 
) const
virtual

Check whether the given MPDU can be added to the frame being built (as described by the given TX parameters) without violating the given constraint on the PPDU transmission duration.

Parameters
mpduthe MPDU to add to the frame being built
txParamsthe TX parameters describing the frame being built
ppduDurationLimitthe time limit on the PPDU transmission duration
Returns
true if the given MPDU can be added to the frame being built

Reimplemented in ns3::HtFrameExchangeManager.

Definition at line 414 of file qos-frame-exchange-manager.cc.

References IsWithinSizeAndTimeLimits(), NS_ASSERT, and NS_LOG_FUNCTION.

Referenced by TryAddMpdu().

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

◆ IsWithinSizeAndTimeLimits()

bool ns3::QosFrameExchangeManager::IsWithinSizeAndTimeLimits ( uint32_t  ppduPayloadSize,
Mac48Address  receiver,
const WifiTxParameters txParams,
Time  ppduDurationLimit 
) const
virtual

Check whether the transmission time of the frame being built (as described by the given TX parameters) does not exceed the given PPDU duration limit if the size of the PSDU addressed to the given receiver becomes ppduPayloadSize.

Also check that the PSDU size does not exceed the max PSDU size for the modulation class being used.

Parameters
ppduPayloadSizethe new PSDU size
receiverthe MAC address of the receiver of the PSDU
txParamsthe TX parameters describing the frame being built
ppduDurationLimitthe limit on the PPDU duration
Returns
true if the constraints on the PPDU duration limit and the maximum PSDU size are met

Definition at line 430 of file qos-frame-exchange-manager.cc.

References ns3::Time::As(), ns3::WifiPhy::GetMaxPsduSize(), ns3::WifiTxVector::GetModulationClass(), ns3::GetPpduMaxTime(), ns3::WifiTxVector::GetPreambleType(), ns3::FrameExchangeManager::GetTxDuration(), ns3::Time::IsNegative(), ns3::Time::IsStrictlyPositive(), ns3::WifiTxParameters::m_txVector, ns3::Time::Min(), ns3::Time::MS, NS_LOG_DEBUG, and NS_LOG_FUNCTION.

Referenced by IsWithinLimitsIfAddMpdu(), ns3::HtFrameExchangeManager::IsWithinLimitsIfAddMpdu(), and ns3::HtFrameExchangeManager::IsWithinLimitsIfAggregateMsdu().

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

◆ NavResetTimeout()

void ns3::QosFrameExchangeManager::NavResetTimeout ( )
overrideprotectedvirtual

Reset the NAV upon expiration of the NAV reset timer.

Reimplemented from ns3::FrameExchangeManager.

Definition at line 744 of file qos-frame-exchange-manager.cc.

References ClearTxopHolderIfNeeded(), ns3::FrameExchangeManager::NavResetTimeout(), and NS_LOG_FUNCTION.

Referenced by UpdateNav().

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

◆ PifsRecovery()

void ns3::QosFrameExchangeManager::PifsRecovery ( )
protected

Perform a PIFS recovery as a response to transmission failure within a TXOP.

If the carrier sense indicates that the medium is idle, continue the TXOP. Otherwise, release the channel.

Definition at line 125 of file qos-frame-exchange-manager.cc.

References ns3::ChannelAccessManager::GetLargestIdlePrimaryChannel(), ns3::WifiPhy::GetPifs(), ns3::QosTxop::GetTxopStartTime(), ns3::FrameExchangeManager::m_allowedWidth, ns3::FrameExchangeManager::m_channelAccessManager, m_edca, ns3::FrameExchangeManager::m_linkId, ns3::FrameExchangeManager::m_phy, min, ns3::FrameExchangeManager::NotifyChannelReleased(), ns3::Simulator::Now(), NS_ASSERT, NS_LOG_FUNCTION, ns3::Seconds(), and StartTransmission().

Referenced by TransmissionFailed().

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

◆ PostProcessFrame()

void ns3::QosFrameExchangeManager::PostProcessFrame ( Ptr< const WifiPsdu psdu,
const WifiTxVector txVector 
)
overrideprotectedvirtual

Perform actions that are possibly needed after receiving any frame, independently of whether the frame is addressed to this station (e.g., setting the NAV or the TXOP holder).

Parameters
psduthe received PSDU
txVectorTX vector of the received PSDU

Reimplemented from ns3::FrameExchangeManager.

Definition at line 689 of file qos-frame-exchange-manager.cc.

References NS_LOG_FUNCTION, ns3::FrameExchangeManager::PostProcessFrame(), and SetTxopHolder().

+ Here is the call graph for this function:

◆ PreProcessFrame()

void ns3::QosFrameExchangeManager::PreProcessFrame ( Ptr< const WifiPsdu psdu,
const WifiTxVector txVector 
)
overrideprotectedvirtual

Perform actions that are possibly needed when receiving any frame, independently of whether the frame is addressed to this station (e.g., storing buffer status reports).

Parameters
psduthe received PSDU
txVectorTX vector of the received PSDU

Reimplemented from ns3::FrameExchangeManager.

Definition at line 657 of file qos-frame-exchange-manager.cc.

References ns3::AP, ClearTxopHolderIfNeeded(), ns3::WifiPsdu::GetAddr1(), ns3::WifiMacHeader::GetAddr2(), ns3::WifiMacHeader::GetQosQueueSize(), ns3::WifiMacHeader::GetQosTid(), ns3::WifiMac::GetTypeOfStation(), ns3::WifiMacHeader::IsQosData(), ns3::WifiMacHeader::IsQosEosp(), ns3::FrameExchangeManager::m_mac, ns3::FrameExchangeManager::m_self, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::PeekPointer(), and ns3::FrameExchangeManager::PreProcessFrame().

Referenced by ns3::EhtFrameExchangeManager::PreProcessFrame().

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

◆ ReceiveMpdu()

void ns3::QosFrameExchangeManager::ReceiveMpdu ( Ptr< const WifiMpdu mpdu,
RxSignalInfo  rxSignalInfo,
const WifiTxVector txVector,
bool  inAmpdu 
)
overrideprotectedvirtual

◆ SendCfEndIfNeeded()

◆ SetTxopHolder()

void ns3::QosFrameExchangeManager::SetTxopHolder ( Ptr< const WifiPsdu psdu,
const WifiTxVector txVector 
)
protectedvirtual

Set the TXOP holder, if needed, based on the received frame.

Parameters
psduthe received PSDU
txVectorTX vector of the received PSDU

Reimplemented in ns3::HeFrameExchangeManager.

Definition at line 698 of file qos-frame-exchange-manager.cc.

References ns3::WifiMacHeader::GetAddr1(), ns3::WifiPsdu::GetAddr1(), ns3::WifiMacHeader::GetAddr2(), ns3::WifiPsdu::GetAddr2(), ns3::WifiPsdu::GetHeader(), ns3::WifiMacHeader::IsCts(), ns3::WifiMacHeader::IsMgt(), ns3::WifiMacHeader::IsQosData(), ns3::WifiMacHeader::IsRts(), ns3::FrameExchangeManager::m_bssid, m_txopHolder, and NS_LOG_FUNCTION.

Referenced by PostProcessFrame().

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

◆ StartFrameExchange()

bool ns3::QosFrameExchangeManager::StartFrameExchange ( Ptr< QosTxop edca,
Time  availableTime,
bool  initialFrame 
)
protectedvirtual

Start a frame exchange (including protection frames and acknowledgment frames as needed) that fits within the given availableTime (if different than Time::Min()).

Parameters
edcathe EDCAF which has been granted the opportunity to transmit
availableTimethe amount of time allowed for the frame exchange. Pass Time::Min() in case the TXOP limit is null
initialFrametrue if the frame being transmitted is the initial frame of the TXOP. This is used to determine whether the TXOP limit can be exceeded
Returns
true if a frame exchange is started, false otherwise

Reimplemented in ns3::HtFrameExchangeManager, and ns3::HeFrameExchangeManager.

Definition at line 273 of file qos-frame-exchange-manager.cc.

References CreateAliasIfNeeded(), ns3::FrameExchangeManager::GetFirstFragmentIfNeeded(), ns3::QosTxop::GetNextMpdu(), ns3::FrameExchangeManager::GetProtectionManager(), ns3::FrameExchangeManager::GetWifiRemoteStationManager(), ns3::FrameExchangeManager::m_allowedWidth, ns3::FrameExchangeManager::m_linkId, ns3::WifiTxParameters::m_protection, ns3::WifiTxParameters::m_txVector, NS_ASSERT, NS_ASSERT_MSG, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::QosTxop::PeekNextMpdu(), and ns3::FrameExchangeManager::SendMpduWithProtection().

Referenced by ns3::HtFrameExchangeManager::StartFrameExchange(), and StartTransmission().

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

◆ StartTransmission() [1/2]

bool ns3::QosFrameExchangeManager::StartTransmission ( Ptr< QosTxop edca,
Time  txopDuration 
)
protectedvirtual

Request the FrameExchangeManager to start a frame exchange sequence.

Parameters
edcathe EDCA that gained channel access
txopDurationthe duration of a TXOP. This value is only used when a new TXOP is started (and hence the TXOP limit for the given EDCAF is non-zero)
Returns
true if a frame exchange sequence was started, false otherwise

Definition at line 185 of file qos-frame-exchange-manager.cc.

References ns3::WifiTxTimer::Cancel(), CancelPifsRecovery(), ns3::QosTxop::GetRemainingTxop(), ns3::Txop::GetTxopLimit(), ns3::QosTxop::GetTxopStartTime(), ns3::EventId::IsRunning(), ns3::WifiTxTimer::IsRunning(), ns3::Time::IsStrictlyPositive(), ns3::Time::IsZero(), ns3::FrameExchangeManager::m_dcf, m_edca, m_edcaBackingOff, m_initialFrame, ns3::FrameExchangeManager::m_linkId, m_pifsRecovery, m_pifsRecoveryEvent, ns3::FrameExchangeManager::m_txTimer, ns3::Time::Min(), ns3::QosTxop::NotifyChannelAccessed(), ns3::FrameExchangeManager::NotifyChannelReleased(), NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::Seconds(), SendCfEndIfNeeded(), and StartFrameExchange().

+ Here is the call graph for this function:

◆ StartTransmission() [2/2]

bool ns3::QosFrameExchangeManager::StartTransmission ( Ptr< Txop dcf,
uint16_t  allowedWidth 
)
overridevirtual

Request the FrameExchangeManager to start a frame exchange sequence.

Parameters
dcfthe channel access function that gained channel access. It is the DCF on non-QoS stations and an EDCA on QoS stations.
allowedWidththe allowed width in MHz for the frame exchange sequence
Returns
true if a frame exchange sequence was started, false otherwise

Reimplemented from ns3::FrameExchangeManager.

Definition at line 161 of file qos-frame-exchange-manager.cc.

References CancelPifsRecovery(), ns3::Txop::IsQosTxop(), ns3::EventId::IsRunning(), ns3::FrameExchangeManager::m_allowedWidth, m_edca, ns3::FrameExchangeManager::m_linkId, m_pifsRecoveryEvent, NS_LOG_FUNCTION, and ns3::FrameExchangeManager::StartTransmission().

Referenced by PifsRecovery(), ns3::EhtFrameExchangeManager::StartTransmission(), ns3::HtFrameExchangeManager::TransmissionSucceeded(), and TransmissionSucceeded().

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

◆ TransmissionFailed()

◆ TransmissionSucceeded()

void ns3::QosFrameExchangeManager::TransmissionSucceeded ( )
overrideprotectedvirtual

Take necessary actions upon a transmission success.

A non-QoS station transmits the next fragment, if any, or releases the channel, otherwise.

Reimplemented from ns3::FrameExchangeManager.

Definition at line 569 of file qos-frame-exchange-manager.cc.

References ns3::QosTxop::GetRemainingTxop(), ns3::WifiPhy::GetSifs(), ns3::Txop::GetTxopLimit(), ns3::Time::IsStrictlyPositive(), m_edca, m_initialFrame, ns3::FrameExchangeManager::m_linkId, ns3::FrameExchangeManager::m_phy, ns3::FrameExchangeManager::NotifyChannelReleased(), NS_LOG_DEBUG, ns3::Simulator::Schedule(), ns3::Seconds(), StartTransmission(), and ns3::FrameExchangeManager::TransmissionSucceeded().

Referenced by ns3::HtFrameExchangeManager::TransmissionSucceeded().

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

◆ TryAddMpdu()

bool ns3::QosFrameExchangeManager::TryAddMpdu ( Ptr< const WifiMpdu mpdu,
WifiTxParameters txParams,
Time  availableTime 
) const

Recompute the protection and acknowledgment methods to use if the given MPDU is added to the frame being built (as described by the given TX parameters) and check whether the duration of the frame exchange sequence (including protection and acknowledgment) does not exceed the given available time.

The protection and acknowledgment methods held by the given TX parameters are only updated if the given MPDU can be added.

Parameters
mpduthe MPDU to add to the frame being built
txParamsthe TX parameters describing the frame being built
availableTimethe time limit on the frame exchange sequence
Returns
true if the given MPDU can be added to the frame being built

Definition at line 330 of file qos-frame-exchange-manager.cc.

References ns3::WifiTxParameters::AddMpdu(), ns3::FrameExchangeManager::CalculateAcknowledgmentTime(), ns3::FrameExchangeManager::CalculateProtectionTime(), ns3::FrameExchangeManager::GetAckManager(), ns3::FrameExchangeManager::GetProtectionManager(), IsWithinLimitsIfAddMpdu(), ns3::WifiTxParameters::m_acknowledgment, ns3::WifiTxParameters::m_protection, ns3::Time::Min(), NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, and ns3::FrameExchangeManager::UpdateTxDuration().

Referenced by ns3::HtFrameExchangeManager::SendAddBaRequest(), and ns3::HtFrameExchangeManager::SendMpduFromBaManager().

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

◆ UpdateNav()

void ns3::QosFrameExchangeManager::UpdateNav ( Ptr< const WifiPsdu psdu,
const WifiTxVector txVector 
)
overrideprotectedvirtual

Update the NAV, if needed, based on the Duration/ID of the given psdu.

Parameters
psduthe received PSDU
txVectorTxVector of the received PSDU

Reimplemented from ns3::FrameExchangeManager.

Definition at line 730 of file qos-frame-exchange-manager.cc.

References ns3::WifiPsdu::GetHeader(), ns3::WifiMacHeader::IsCfEnd(), NavResetTimeout(), NS_LOG_DEBUG, NS_LOG_FUNCTION, and ns3::FrameExchangeManager::UpdateNav().

+ Here is the call graph for this function:

Member Data Documentation

◆ m_edca

◆ m_edcaBackingOff

Ptr<Txop> ns3::QosFrameExchangeManager::m_edcaBackingOff
private

channel access function that invoked backoff during TXOP

Definition at line 201 of file qos-frame-exchange-manager.h.

Referenced by DoDispose(), StartTransmission(), and TransmissionFailed().

◆ m_initialFrame

bool ns3::QosFrameExchangeManager::m_initialFrame
private

true if transmitting the initial frame of a TXOP

Definition at line 198 of file qos-frame-exchange-manager.h.

Referenced by StartTransmission(), TransmissionFailed(), and TransmissionSucceeded().

◆ m_pifsRecovery

bool ns3::QosFrameExchangeManager::m_pifsRecovery
private

true if performing a PIFS recovery after failure

Definition at line 199 of file qos-frame-exchange-manager.h.

Referenced by GetTypeId(), StartTransmission(), and TransmissionFailed().

◆ m_pifsRecoveryEvent

EventId ns3::QosFrameExchangeManager::m_pifsRecoveryEvent
private

event associated with an attempt of PIFS recovery

Definition at line 200 of file qos-frame-exchange-manager.h.

Referenced by CancelPifsRecovery(), DoDispose(), StartTransmission(), and TransmissionFailed().

◆ m_setQosQueueSize

bool ns3::QosFrameExchangeManager::m_setQosQueueSize
protected

whether to set the Queue Size subfield of the QoS Control field of QoS data frames

Definition at line 188 of file qos-frame-exchange-manager.h.

Referenced by ns3::HtFrameExchangeManager::FinalizeMacHeader(), ForwardMpduDown(), and GetTypeId().

◆ m_txopHolder

std::optional<Mac48Address> ns3::QosFrameExchangeManager::m_txopHolder
protected

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