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

Handle packet fragmentation and retransmissions for QoS data frames as well as MSDU aggregation (A-MSDU) and block ack sessions, for a given access class. More...

#include "qos-txop.h"

+ Inheritance diagram for ns3::QosTxop:
+ Collaboration diagram for ns3::QosTxop:

Public Member Functions

 QosTxop ()
 
virtual ~QosTxop ()
 
void BaTxFailed (const WifiMacHeader &hdr)
 The packet we sent was successfully received by the receiver. More...
 
void BaTxOk (const WifiMacHeader &hdr)
 The packet we sent was successfully received by the receiver. More...
 
void CompleteAmpduTransfer (Mac48Address recipient, uint8_t tid)
 
void CompleteConfig (void)
 Complete block ACK configuration. More...
 
void CompleteMpduTx (Ptr< const Packet > packet, WifiMacHeader hdr, Time tstamp)
 Stores an MPDU (part of an A-MPDU) in blockackagreement (i.e. More...
 
void EndTxNoAck (void)
 Event handler when a transmission that does not require an ACK has completed. More...
 
bool GetAmpduExist (Mac48Address dest) const
 Return whether A-MPDU is used to transmit data to a peer station. More...
 
bool GetBaAgreementExists (Mac48Address address, uint8_t tid) const
 
uint8_t GetBlockAckThreshold (void) const
 Return the current threshold for block ACK mechanism. More...
 
Ptr< PacketGetFragmentPacket (WifiMacHeader *hdr)
 Get the next fragment from the packet with appropriate Wifi header for the fragment. More...
 
Ptr< MpduAggregatorGetMpduAggregator (void) const
 Returns the aggregator used to construct A-MPDU subframes. More...
 
Ptr< MsduAggregatorGetMsduAggregator (void) const
 Returns the aggregator used to construct A-MSDU subframes. More...
 
uint16_t GetNextSequenceNumberFor (WifiMacHeader *hdr)
 Return the next sequence number for the given header. More...
 
TypeOfStation GetTypeOfStation (void) const
 Return type of station. More...
 
void GotAck (void)
 Event handler when an ACK is received. More...
 
void GotAddBaResponse (const MgtAddBaResponseHeader *respHdr, Mac48Address recipient)
 Event handler when an ADDBA response is received. More...
 
void GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient, double rxSnr, WifiMode txMode, double dataSnr)
 Event handler when a Block ACK is received. More...
 
void GotDelBaFrame (const MgtDelBaHeader *delBaHdr, Mac48Address recipient)
 Event handler when a DELBA frame is received. More...
 
bool IsQosTxop () const
 Check for QoS TXOP. More...
 
Mac48Address MapDestAddressForAggregation (const WifiMacHeader &hdr)
 This functions are used only to correctly set destination address in A-MSDU subframes. More...
 
Mac48Address MapSrcAddressForAggregation (const WifiMacHeader &hdr)
 This functions are used only to correctly set source address in A-MSDU subframes. More...
 
void MissedAck (void)
 Event handler when an ACK is missed. More...
 
void MissedBlockAck (uint8_t nMpdus)
 Event handler when a Block ACK timeout has occurred. More...
 
void MissedCts (void)
 Event handler when a CTS timeout has occurred. More...
 
bool NeedBarRetransmission (void)
 Check if Block ACK Request should be re-transmitted. More...
 
bool NeedFragmentation (void) const
 Check if the current packet should be fragmented. More...
 
void NotifyAccessGranted (void)
 Notify the EDCAF that access has been granted. More...
 
void NotifyCollision (void)
 Notify the EDCAF that collision has occurred. More...
 
void NotifyInternalCollision (void)
 Notify the EDCAF that internal collision has occurred. More...
 
Ptr< const PacketPeekNextRetransmitPacket (WifiMacHeader &header, uint8_t tid, Time *timestamp)
 Peek in retransmit queue and get the next packet without removing it from the queue. More...
 
uint16_t PeekNextSequenceNumberFor (WifiMacHeader *hdr)
 Return the next sequence number for the Traffic ID and destination, but do not pick it (i.e. More...
 
void PushFront (Ptr< const Packet > packet, const WifiMacHeader &hdr)
 
void RemoveRetransmitPacket (uint8_t tid, Mac48Address recipient, uint16_t seqnumber)
 Remove a packet after you peek in the retransmit queue and get it. More...
 
void RestartAccessIfNeeded (void)
 Restart access request if needed. More...
 
void SendDelbaFrame (Mac48Address addr, uint8_t tid, bool byOriginator)
 Sends DELBA frame to cancel a block ack agreement with sta addressed by addr for tid tid. More...
 
void SetAccessCategory (AcIndex ac)
 Set the access category of this EDCAF. More...
 
void SetAmpduExist (Mac48Address dest, bool enableAmpdu)
 Set indication whether A-MPDU is used to transmit data to a peer station. More...
 
void SetBlockAckInactivityTimeout (uint16_t timeout)
 Set the Block Ack inactivity timeout. More...
 
void SetBlockAckThreshold (uint8_t threshold)
 Set threshold for block ACK mechanism. More...
 
void SetMpduAggregator (const Ptr< MpduAggregator > aggr)
 Set the aggregator used to construct A-MPDU subframes. More...
 
void SetMsduAggregator (const Ptr< MsduAggregator > aggr)
 Set the aggregator used to construct A-MSDU subframes. More...
 
void SetTypeOfStation (TypeOfStation type)
 Set type of station with the given type. More...
 
void SetWifiRemoteStationManager (const Ptr< WifiRemoteStationManager > remoteManager)
 Set WifiRemoteStationsManager this QosTxop is associated to. More...
 
void StartAccessIfNeeded (void)
 Request access from DCF manager if needed. More...
 
void StartNextPacket (void)
 Start transmission for the next packet if allowed by the TxopLimit. More...
 
- Public Member Functions inherited from ns3::Txop
 Txop ()
 
virtual ~Txop ()
 
int64_t AssignStreams (int64_t stream)
 Assign a fixed random variable stream number to the random variables used by this model. More...
 
virtual void Cancel (void)
 Cancel the transmission. More...
 
bool CanStartNextPolling (void) const
 Check if the next PCF transmission can fit in the remaining CFP duration. More...
 
uint8_t GetAifsn (void) const
 Return the number of slots that make up an AIFS. More...
 
Ptr< MacLowGetLow (void) const
 Return the MacLow associated with this Txop. More...
 
uint32_t GetMaxCw (void) const
 Return the maximum contention window size. More...
 
uint32_t GetMinCw (void) const
 Return the minimum contention window size. More...
 
Time GetTxopLimit (void) const
 Return the TXOP limit. More...
 
Ptr< WifiMacQueueGetWifiMacQueue () const
 Return the packet queue associated with this Txop. More...
 
void GotCfEnd (void)
 Event handler when a CF-END frame is received. More...
 
virtual bool IsAccessRequested (void) const
 
void MissedCfPollResponse (bool expectedCfAck)
 Event handler when a response to a CF-POLL frame is missed. More...
 
virtual void NotifyChannelSwitching (void)
 When a channel switching occurs, enqueued packets are removed. More...
 
virtual void NotifyOff (void)
 When off operation occurs, the queue gets cleaned up. More...
 
virtual void NotifyOn (void)
 When on operation occurs, channel access will be started. More...
 
virtual void NotifySleep (void)
 When sleep operation occurs, if there is a pending packet transmission, it will be reinserted to the front of the queue. More...
 
virtual void NotifyWakeUp (void)
 When wake up operation occurs, channel access will be restarted. More...
 
virtual void Queue (Ptr< const Packet > packet, const WifiMacHeader &hdr)
 
void SendCfFrame (WifiMacType frameType, Mac48Address addr)
 Sends CF frame to sta with address addr. More...
 
void SetAifsn (uint8_t aifsn)
 Set the number of slots that make up an AIFS. More...
 
void SetChannelAccessManager (const Ptr< ChannelAccessManager > manager)
 Set ChannelAccessManager this Txop is associated to. More...
 
void SetMacLow (const Ptr< MacLow > low)
 Set MacLow associated with this Txop. More...
 
void SetMaxCw (uint32_t maxCw)
 Set the maximum contention window size. More...
 
void SetMinCw (uint32_t minCw)
 Set the minimum contention window size. More...
 
void SetTxDroppedCallback (TxDropped callback)
 
void SetTxFailedCallback (TxFailed callback)
 
void SetTxMiddle (const Ptr< MacTxMiddle > txMiddle)
 Set MacTxMiddle this Txop is associated to. More...
 
void SetTxOkCallback (TxOk callback)
 
void SetTxopLimit (Time txopLimit)
 Set the TXOP limit. More...
 
void StartBackoffNow (uint32_t nSlots)
 
virtual void StartNextFragment (void)
 Start transmission for the next fragment. More...
 
- 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...
 
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::Txop
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...
 

Public Attributes

std::map< Mac48Address, bool > m_aMpduEnabled
 list containing flags whether A-MPDU is enabled for a given destination address More...
 

Private Member Functions

void CompleteTx (void)
 For now is typically invoked to complete transmission of a packets sent with ack policy Block Ack: the packet is buffered and dcf is reset. More...
 
void DoDispose (void)
 Destructor implementation. More...
 
void DoInitialize (void)
 Initialize() implementation. More...
 
uint32_t GetFragmentOffset (void) const
 Calculate the offset for the current fragment. More...
 
uint32_t GetFragmentSize (void) const
 Calculate the size of the current fragment. More...
 
uint32_t GetNextFragmentSize (void) const
 Calculate the size of the next fragment. More...
 
uint32_t GetNextTxopFragmentSize (uint32_t fragmentNumber) const
 Calculate the size of the next TXOP fragment. More...
 
uint32_t GetNTxopFragment () const
 Calculate the number of TXOP fragments needed for the transmission of the current packet. More...
 
uint32_t GetTxopFragmentOffset (uint32_t fragmentNumber) const
 Calculate the offset for the fragment. More...
 
uint32_t GetTxopFragmentSize () const
 Calculate the size of the current TXOP fragment. More...
 
Time GetTxopRemaining (void) const
 Return the remaining duration in the current TXOP. More...
 
bool HasTxop (void) const
 Check if the station has TXOP granted for the next MPDU. More...
 
bool IsLastFragment (void) const
 Check if the current fragment is the last fragment. More...
 
bool IsTxopFragmentation () const
 Check if the current packet is fragmented because of an exceeded TXOP duration. More...
 
void SendAddBaRequest (Mac48Address recipient, uint8_t tid, uint16_t startSeq, uint16_t timeout, bool immediateBAck)
 Sends an ADDBA Request to establish a block ack agreement with sta addressed by recipient for tid tid. More...
 
void SendBlockAckRequest (const Bar &bar)
 After that all packets, for which a block ack agreement was established, have been transmitted, we have to send a block ack request. More...
 
bool SetupBlockAckIfNeeded ()
 If number of packets in the queue reaches m_blockAckThreshold value, an ADDBA Request frame is sent to destination in order to setup a block ack. More...
 
void VerifyBlockAck (void)
 Verifies if dequeued packet has to be transmitted with ack policy Block Ack. More...
 

Private Attributes

AcIndex m_ac
 the access category More...
 
TracedValue< uint32_t > m_backoffTrace
 backoff trace value More...
 
Ptr< BlockAckManagerm_baManager
 the Block ACK manager More...
 
uint16_t m_blockAckInactivityTimeout
 the Block ACK inactivity timeout More...
 
uint8_t m_blockAckThreshold
 the Block ACK threshold More...
 
BlockAckType m_blockAckType
 the Block ACK type More...
 
Bar m_currentBar
 the current BAR More...
 
bool m_currentIsFragmented
 flag whether current packet is fragmented More...
 
Time m_currentPacketTimestamp
 the current packet timestamp More...
 
TracedValue< uint32_t > m_cwTrace
 CW trace value. More...
 
bool m_isAccessRequestedForRts
 flag whether access is requested to transmit a RTS frame More...
 
Ptr< MpduAggregatorm_mpduAggregator
 A-MPDU aggregator. More...
 
Ptr< MsduAggregatorm_msduAggregator
 A-MSDU aggregator. More...
 
Ptr< QosBlockedDestinationsm_qosBlockedDestinations
 QOS blocked destinations. More...
 
Time m_startTxop
 the start TXOP time More...
 
TracedCallback< Time, Timem_txopTrace
 TXOP trace callback. More...
 
TypeOfStation m_typeOfStation
 the type of station More...
 

Friends

class ::AmpduAggregationTest
 Allow test cases to access private members. More...
 
class AggregationCapableTransmissionListener
 allow AggregationCapableTransmissionListener class access More...
 

Additional Inherited Members

- Public Types inherited from ns3::Txop
typedef Callback< void, Ptr< const Packet > > TxDropped
 typedef for a callback to invoke when a packet is dropped. 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...
 
- Protected Member Functions inherited from ns3::Txop
uint32_t GetBackoffSlots (void) const
 Return the current number of backoff slots. More...
 
Time GetBackoffStart (void) const
 Return the time when the backoff procedure started. More...
 
uint32_t GetCw (void) const
 
bool NeedDataRetransmission (Ptr< const Packet > packet, const WifiMacHeader &hdr)
 Check if DATA should be re-transmitted if ACK was missed. More...
 
bool NeedRtsRetransmission (Ptr< const Packet > packet, const WifiMacHeader &hdr)
 Check if RTS should be re-transmitted if CTS was missed. More...
 
void NextFragment (void)
 Continue to the next fragment. More...
 
virtual void NotifyAccessRequested (void)
 Notify that access request has been received. More...
 
void ResetCw (void)
 Update the value of the CW variable to take into account a transmission success or a transmission abort (stop transmission of a packet after the maximum number of retransmissions has been reached). More...
 
void TxDroppedPacket (Ptr< const WifiMacQueueItem > item)
 Pass the packet included in the wifi MAC queue item to the packet dropped callback. More...
 
void UpdateBackoffSlotsNow (uint32_t nSlots, Time backoffUpdateBound)
 Update backoff slots that nSlots has passed. More...
 
void UpdateFailedCw (void)
 Update the value of the CW variable to take into account a transmission failure. More...
 
- Protected Member Functions inherited from ns3::Object
 Object (const Object &o)
 Copy an Object. 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...
 
- Protected Attributes inherited from ns3::Txop
bool m_accessRequested
 flag whether channel access is already requested More...
 
uint8_t m_aifsn
 the AIFSN More...
 
uint32_t m_backoffSlots
 the backoff slots More...
 
Time m_backoffStart
 the backoffStart variable is used to keep track of the time at which a backoff was started or the time at which the backoff counter was last updated. More...
 
Ptr< ChannelAccessManagerm_channelAccessManager
 the channel access manager More...
 
WifiMacHeader m_currentHdr
 the current header More...
 
Ptr< const Packetm_currentPacket
 the current packet More...
 
MacLowTransmissionParameters m_currentParams
 current transmission parameters More...
 
uint32_t m_cw
 the current CW More...
 
uint32_t m_cwMax
 the CW maximum More...
 
uint32_t m_cwMin
 the CW minimum More...
 
uint8_t m_fragmentNumber
 the fragment number More...
 
Ptr< MacLowm_low
 the MacLow More...
 
Ptr< WifiMacQueuem_queue
 the wifi MAC queue More...
 
Ptr< UniformRandomVariablem_rng
 the random stream More...
 
Ptr< WifiRemoteStationManagerm_stationManager
 the wifi remote station manager More...
 
TxDropped m_txDroppedCallback
 the packet dropped callback More...
 
TxFailed m_txFailedCallback
 the transmit failed callback More...
 
Ptr< MacTxMiddlem_txMiddle
 the MacTxMiddle More...
 
TxOk m_txOkCallback
 the transmit OK callback More...
 
Time m_txopLimit
 the txop limit time More...
 

Detailed Description

Handle packet fragmentation and retransmissions for QoS data frames as well as MSDU aggregation (A-MSDU) and block ack sessions, for a given access class.


This class implements the packet fragmentation and retransmission policy for QoS data frames. It uses the ns3::MacLow and ns3::ChannelAccessManager helper classes to respectively send packets and decide when to send them. Packets are stored in a ns3::WifiMacQueue until they can be sent.

This queue contains packets for a particular access class. Possibles access classes are:

  • AC_VO : voice, tid = 6,7
  • AC_VI : video, tid = 4,5
  • AC_BE : best-effort, tid = 0,3
  • AC_BK : background, tid = 1,2

This class also implements block ack sessions and MSDU aggregation (A-MSDU). If A-MSDU is enabled for that access class, it picks several packets from the queue instead of a single one and sends the aggregated packet to ns3::MacLow.

The fragmentation policy currently implemented uses a simple threshold: any packet bigger than this threshold is fragmented in fragments whose size is smaller than the threshold.

The retransmission policy is also very simple: every packet is retransmitted until it is either successfully transmitted or it has been retransmitted up until the ssrc or slrc thresholds.

The rts/cts policy is similar to the fragmentation policy: when a packet is bigger than a threshold, the rts/cts protocol is used.

Config Paths

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

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

No Attributes are defined for this type.

Attributes defined in parent class ns3::Txop

  • MinCw: The minimum value of the contention window.
    • Set with class: ns3::UintegerValue
    • Underlying type: uint32_t 0:4294967295
    • Initial value: 15
    • Flags: construct write read
  • MaxCw: The maximum value of the contention window.
    • Set with class: ns3::UintegerValue
    • Underlying type: uint32_t 0:4294967295
    • Initial value: 1023
    • Flags: construct write read
  • Aifsn: The AIFSN: the default value conforms to non-QOS.
    • Set with class: ns3::UintegerValue
    • Underlying type: uint8_t 0:255
    • Initial value: 2
    • Flags: construct write read
  • TxopLimit: The TXOP limit: the default value conforms to non-QoS.
    • Set with class: ns3::TimeValue
    • Underlying type: Time –9223372036854775808.0ns:+9223372036854775807.0ns
    • Initial value: +0.0ns
    • Flags: construct write read
  • Queue: The WifiMacQueue object

TraceSources

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

Definition at line 90 of file qos-txop.h.

Constructor & Destructor Documentation

◆ QosTxop()

◆ ~QosTxop()

ns3::QosTxop::~QosTxop ( )
virtual

Definition at line 92 of file qos-txop.cc.

References NS_LOG_FUNCTION.

Member Function Documentation

◆ BaTxFailed()

void ns3::QosTxop::BaTxFailed ( const WifiMacHeader hdr)

The packet we sent was successfully received by the receiver.

Parameters
hdrthe header of the packet that we failed to sent.

Definition at line 1553 of file qos-txop.cc.

References ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::IsNull(), ns3::Txop::m_currentHdr, ns3::Txop::m_txFailedCallback, and NS_LOG_FUNCTION.

Referenced by QosTxop().

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

◆ BaTxOk()

void ns3::QosTxop::BaTxOk ( const WifiMacHeader hdr)

The packet we sent was successfully received by the receiver.

Parameters
hdrthe header of the packet that we successfully sent.

Definition at line 1543 of file qos-txop.cc.

References ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::IsNull(), ns3::Txop::m_currentHdr, ns3::Txop::m_txOkCallback, and NS_LOG_FUNCTION.

Referenced by QosTxop().

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

◆ CompleteAmpduTransfer()

void ns3::QosTxop::CompleteAmpduTransfer ( Mac48Address  recipient,
uint8_t  tid 
)
Parameters
recipientaddress of peer station involved in block ack mechanism.
tidTtraffic ID of transmitted packet.

This function resets the status of OriginatorBlockAckAgreement after the transfer of an A-MPDU with ImmediateBlockAck policy (i.e. no BAR is scheduled).

Definition at line 115 of file qos-txop.cc.

References m_baManager.

◆ CompleteConfig()

void ns3::QosTxop::CompleteConfig ( void  )

Complete block ACK configuration.

Definition at line 1404 of file qos-txop.cc.

References m_ac, m_baManager, ns3::Txop::m_low, ns3::Txop::m_txMiddle, ns3::MakeCallback(), NS_LOG_FUNCTION, ns3::MacLow::RegisterEdcaForAc(), and SendDelbaFrame().

Referenced by AmpduAggregationTest::DoRun(), and TwoLevelAggregationTest::DoRun().

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

◆ CompleteMpduTx()

void ns3::QosTxop::CompleteMpduTx ( Ptr< const Packet packet,
WifiMacHeader  hdr,
Time  tstamp 
)

Stores an MPDU (part of an A-MPDU) in blockackagreement (i.e.

the sender is waiting for a blockack containing the sequence number of this MPDU). It also calls NotifyMpdu transmission that updates the status of OriginatorBlockAckAgreement.

Parameters
packetreceived packet.
hdrreceived Wi-Fi header.
tstamptimestamp.

Definition at line 1332 of file qos-txop.cc.

References ns3::WifiMacHeader::GetAddr1(), ns3::MacTxMiddle::GetNextSeqNumberByTidAndAddress(), ns3::WifiMacHeader::GetQosTid(), ns3::WifiMacHeader::IsQosData(), m_baManager, ns3::Txop::m_txMiddle, ns3::WifiMacHeader::NORMAL_ACK, and NS_ASSERT.

+ Here is the call graph for this function:

◆ CompleteTx()

void ns3::QosTxop::CompleteTx ( void  )
private

For now is typically invoked to complete transmission of a packets sent with ack policy Block Ack: the packet is buffered and dcf is reset.

Definition at line 1316 of file qos-txop.cc.

References ns3::WifiMacHeader::BLOCK_ACK, ns3::WifiMacHeader::GetAddr1(), ns3::MacTxMiddle::GetNextSeqNumberByTidAndAddress(), ns3::WifiMacHeader::GetQosTid(), ns3::WifiMacHeader::IsQosBlockAck(), ns3::WifiMacHeader::IsQosData(), ns3::WifiMacHeader::IsRetry(), m_baManager, ns3::Txop::m_currentHdr, ns3::Txop::m_currentPacket, m_currentPacketTimestamp, ns3::Txop::m_txMiddle, and NS_LOG_FUNCTION.

Referenced by NotifyAccessGranted(), and StartNextPacket().

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

◆ DoDispose()

void ns3::QosTxop::DoDispose ( void  )
privatevirtual

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::Txop.

Definition at line 98 of file qos-txop.cc.

References ns3::Txop::DoDispose(), m_baManager, m_mpduAggregator, m_msduAggregator, m_qosBlockedDestinations, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ DoInitialize()

void ns3::QosTxop::DoInitialize ( void  )
privatevirtual

Initialize() implementation.

This method is called only once by Initialize(). If the user calls Initialize() multiple times, DoInitialize() is called only the first time.

Subclasses are expected to override this method and chain up to their parent's implementation once they are done. It is safe to call GetObject() and AggregateObject() from within this method.

Reimplemented from ns3::Txop.

Definition at line 1533 of file qos-txop.cc.

References ns3::Txop::GetCw(), ns3::RandomVariableStream::GetInteger(), m_backoffTrace, m_cwTrace, ns3::Txop::m_rng, NS_LOG_FUNCTION, ns3::Txop::ResetCw(), and ns3::Txop::StartBackoffNow().

+ Here is the call graph for this function:

◆ EndTxNoAck()

◆ GetAmpduExist()

bool ns3::QosTxop::GetAmpduExist ( Mac48Address  dest) const

Return whether A-MPDU is used to transmit data to a peer station.

Parameters
destaddress of peer station
Returns
true if A-MPDU is used by the peer station

Definition at line 1298 of file qos-txop.cc.

References m_aMpduEnabled, and NS_LOG_FUNCTION.

Referenced by MissedAck(), MissedBlockAck(), MissedCts(), NeedFragmentation(), NotifyAccessGranted(), and StartNextPacket().

+ Here is the caller graph for this function:

◆ GetBaAgreementExists()

bool ns3::QosTxop::GetBaAgreementExists ( Mac48Address  address,
uint8_t  tid 
) const
Parameters
addressrecipient address of the peer station
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 109 of file qos-txop.cc.

References first::address, and m_baManager.

Referenced by MissedAck(), MissedCts(), and NeedFragmentation().

+ Here is the caller graph for this function:

◆ GetBlockAckThreshold()

uint8_t ns3::QosTxop::GetBlockAckThreshold ( void  ) const

Return the current threshold for block ACK mechanism.

Returns
the current threshold for block ACK mechanism.

Definition at line 1428 of file qos-txop.cc.

References m_blockAckThreshold, and NS_LOG_FUNCTION.

Referenced by NotifyAccessGranted(), and SetupBlockAckIfNeeded().

+ Here is the caller graph for this function:

◆ GetFragmentOffset()

uint32_t ns3::QosTxop::GetFragmentOffset ( void  ) const
privatevirtual

Calculate the offset for the current fragment.

Returns
the offset for the current fragment.

Reimplemented from ns3::Txop.

Definition at line 1110 of file qos-txop.cc.

References ns3::WifiMacHeader::GetAddr1(), ns3::WifiRemoteStationManager::GetFragmentOffset(), GetTxopFragmentOffset(), IsTxopFragmentation(), ns3::Txop::m_currentHdr, ns3::Txop::m_currentPacket, ns3::Txop::m_fragmentNumber, and ns3::Txop::m_stationManager.

Referenced by GetFragmentPacket().

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

◆ GetFragmentPacket()

Ptr< Packet > ns3::QosTxop::GetFragmentPacket ( WifiMacHeader hdr)
virtual

Get the next fragment from the packet with appropriate Wifi header for the fragment.

Parameters
hdrWi-Fi header.
Returns
the fragment with the current fragment number.

Reimplemented from ns3::Txop.

Definition at line 1142 of file qos-txop.cc.

References ns3::Packet::CreateFragment(), GetFragmentOffset(), GetFragmentSize(), IsLastFragment(), ns3::Txop::m_currentHdr, ns3::Txop::m_currentPacket, ns3::Txop::m_fragmentNumber, NS_LOG_FUNCTION, ns3::WifiMacHeader::SetFragmentNumber(), ns3::WifiMacHeader::SetMoreFragments(), and ns3::WifiMacHeader::SetNoMoreFragments().

Referenced by NotifyAccessGranted().

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

◆ GetFragmentSize()

uint32_t ns3::QosTxop::GetFragmentSize ( void  ) const
privatevirtual

Calculate the size of the current fragment.

Returns
the size of the current fragment.

Reimplemented from ns3::Txop.

Definition at line 1080 of file qos-txop.cc.

References ns3::WifiMacHeader::GetAddr1(), ns3::WifiRemoteStationManager::GetFragmentSize(), GetNextTxopFragmentSize(), IsTxopFragmentation(), ns3::Txop::m_currentHdr, ns3::Txop::m_currentPacket, ns3::Txop::m_fragmentNumber, and ns3::Txop::m_stationManager.

Referenced by GetFragmentPacket().

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

◆ GetMpduAggregator()

Ptr< MpduAggregator > ns3::QosTxop::GetMpduAggregator ( void  ) const

Returns the aggregator used to construct A-MPDU subframes.

Returns
the aggregator used to construct A-MPDU subframes.

Definition at line 702 of file qos-txop.cc.

References m_mpduAggregator.

Referenced by ns3::RegularWifiMac::ConfigureAggregation(), NeedFragmentation(), and VerifyBlockAck().

+ Here is the caller graph for this function:

◆ GetMsduAggregator()

Ptr< MsduAggregator > ns3::QosTxop::GetMsduAggregator ( void  ) const

Returns the aggregator used to construct A-MSDU subframes.

Returns
the aggregator used to construct A-MSDU subframes.

Definition at line 696 of file qos-txop.cc.

References m_msduAggregator.

Referenced by ns3::RegularWifiMac::ConfigureAggregation().

+ Here is the caller graph for this function:

◆ GetNextFragmentSize()

uint32_t ns3::QosTxop::GetNextFragmentSize ( void  ) const
privatevirtual

Calculate the size of the next fragment.

Returns
the size of the next fragment.

Reimplemented from ns3::Txop.

Definition at line 1095 of file qos-txop.cc.

References ns3::WifiMacHeader::GetAddr1(), ns3::WifiRemoteStationManager::GetFragmentSize(), GetNextTxopFragmentSize(), IsTxopFragmentation(), ns3::Txop::m_currentHdr, ns3::Txop::m_currentPacket, ns3::Txop::m_fragmentNumber, and ns3::Txop::m_stationManager.

Referenced by NotifyAccessGranted().

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

◆ GetNextSequenceNumberFor()

uint16_t ns3::QosTxop::GetNextSequenceNumberFor ( WifiMacHeader hdr)

Return the next sequence number for the given header.

Parameters
hdrWi-Fi header.
Returns
the next sequence number.

Definition at line 142 of file qos-txop.cc.

References ns3::MacTxMiddle::GetNextSequenceNumberFor(), and ns3::Txop::m_txMiddle.

+ Here is the call graph for this function:

◆ GetNextTxopFragmentSize()

uint32_t ns3::QosTxop::GetNextTxopFragmentSize ( uint32_t  fragmentNumber) const
private

Calculate the size of the next TXOP fragment.

Parameters
fragmentNumbernumber of the next fragment
Returns
the next TXOP fragment size

Definition at line 1061 of file qos-txop.cc.

References GetNTxopFragment(), ns3::Packet::GetSize(), GetTxopFragmentSize(), ns3::Txop::m_currentPacket, NS_LOG_DEBUG, and NS_LOG_FUNCTION.

Referenced by GetFragmentSize(), and GetNextFragmentSize().

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

◆ GetNTxopFragment()

uint32_t ns3::QosTxop::GetNTxopFragment ( ) const
private

Calculate the number of TXOP fragments needed for the transmission of the current packet.

Returns
the number of TXOP fragments needed for the transmission of the current packet

Definition at line 1022 of file qos-txop.cc.

References ns3::Packet::GetSize(), GetTxopFragmentSize(), ns3::Txop::m_currentPacket, and NS_LOG_DEBUG.

Referenced by GetNextTxopFragmentSize(), and IsLastFragment().

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

◆ GetTxopFragmentOffset()

uint32_t ns3::QosTxop::GetTxopFragmentOffset ( uint32_t  fragmentNumber) const
private

Calculate the offset for the fragment.

Parameters
fragmentNumbernumber of the fragment
Returns
the TXOP fragment offset

Definition at line 1035 of file qos-txop.cc.

References ns3::Packet::GetSize(), GetTxopFragmentSize(), ns3::Txop::m_currentPacket, NS_ASSERT, and NS_LOG_DEBUG.

Referenced by GetFragmentOffset().

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

◆ GetTxopFragmentSize()

uint32_t ns3::QosTxop::GetTxopFragmentSize ( ) const
private

Calculate the size of the current TXOP fragment.

Returns
the size of the current TXOP fragment

Definition at line 989 of file qos-txop.cc.

References ns3::MacLow::CalculateOverallTxTime(), ns3::Txop::GetLow(), ns3::Packet::GetSize(), ns3::Txop::GetTxopLimit(), ns3::Time::IsZero(), ns3::Txop::m_currentHdr, ns3::Txop::m_currentPacket, ns3::Txop::m_currentParams, and NS_ASSERT.

Referenced by GetNextTxopFragmentSize(), GetNTxopFragment(), GetTxopFragmentOffset(), and IsTxopFragmentation().

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

◆ GetTxopRemaining()

Time ns3::QosTxop::GetTxopRemaining ( void  ) const
private

Return the remaining duration in the current TXOP.

Returns
the remaining duration in the current TXOP.

Definition at line 882 of file qos-txop.cc.

References ns3::Txop::GetTxopLimit(), ns3::Time::IsStrictlyNegative(), m_startTxop, ns3::Simulator::Now(), NS_LOG_FUNCTION, and ns3::Seconds().

Referenced by HasTxop().

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

◆ GetTypeId()

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

Get the type ID.

Returns
the object TypeId

Definition at line 49 of file qos-txop.cc.

References m_backoffTrace, m_cwTrace, m_txopTrace, ns3::MakeTraceSourceAccessor(), and ns3::TypeId::SetParent().

+ Here is the call graph for this function:

◆ GetTypeOfStation()

TypeOfStation ns3::QosTxop::GetTypeOfStation ( void  ) const

Return type of station.

Returns
type of station.

Definition at line 136 of file qos-txop.cc.

References m_typeOfStation.

Referenced by MapDestAddressForAggregation(), and MapSrcAddressForAggregation().

+ Here is the caller graph for this function:

◆ GotAck()

◆ GotAddBaResponse()

void ns3::QosTxop::GotAddBaResponse ( const MgtAddBaResponseHeader respHdr,
Mac48Address  recipient 
)

Event handler when an ADDBA response is received.

Parameters
respHdrADDBA response header.
recipientaddress of the recipient.

Definition at line 1226 of file qos-txop.cc.

References ns3::MgtAddBaResponseHeader::GetStatusCode(), ns3::MgtAddBaResponseHeader::GetTid(), ns3::StatusCode::IsSuccess(), m_baManager, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::OriginatorBlockAckAgreement::PENDING, and RestartAccessIfNeeded().

+ Here is the call graph for this function:

◆ GotBlockAck()

void ns3::QosTxop::GotBlockAck ( const CtrlBAckResponseHeader blockAck,
Mac48Address  recipient,
double  rxSnr,
WifiMode  txMode,
double  dataSnr 
)
virtual

◆ GotDelBaFrame()

void ns3::QosTxop::GotDelBaFrame ( const MgtDelBaHeader delBaHdr,
Mac48Address  recipient 
)

Event handler when a DELBA frame is received.

Parameters
delBaHdrDELBA header.
recipientaddress of the recipient.

Definition at line 1248 of file qos-txop.cc.

References ns3::MgtDelBaHeader::GetTid(), m_baManager, NS_LOG_DEBUG, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ HasTxop()

bool ns3::QosTxop::HasTxop ( void  ) const
privatevirtual

Check if the station has TXOP granted for the next MPDU.

Returns
true if the station has TXOP granted for the next MPDU, false otherwise.

Reimplemented from ns3::Txop.

Definition at line 895 of file qos-txop.cc.

References ns3::MacLow::CalculateOverallTxTime(), ns3::MacLowTransmissionParameters::DisableAck(), ns3::MacLowTransmissionParameters::EnableAck(), ns3::WifiMacHeader::GetAddr1(), ns3::Txop::GetLow(), ns3::WifiMacHeader::GetQosTid(), ns3::Txop::GetTxopLimit(), GetTxopRemaining(), ns3::WifiMacHeader::IsQosBlockAck(), ns3::WifiMacHeader::IsQosData(), ns3::Time::IsZero(), ns3::Txop::m_currentHdr, ns3::Txop::m_currentPacket, ns3::Txop::m_currentParams, ns3::Txop::m_queue, and NS_LOG_FUNCTION.

Referenced by GotAck(), and GotBlockAck().

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

◆ IsLastFragment()

bool ns3::QosTxop::IsLastFragment ( void  ) const
privatevirtual

Check if the current fragment is the last fragment.

Returns
true if the current fragment is the last fragment, false otherwise.

Reimplemented from ns3::Txop.

Definition at line 1126 of file qos-txop.cc.

References ns3::WifiMacHeader::GetAddr1(), GetNTxopFragment(), ns3::WifiRemoteStationManager::IsLastFragment(), IsTxopFragmentation(), ns3::Txop::m_currentHdr, ns3::Txop::m_currentPacket, ns3::Txop::m_fragmentNumber, and ns3::Txop::m_stationManager.

Referenced by GetFragmentPacket(), and NotifyAccessGranted().

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

◆ IsQosTxop()

bool ns3::QosTxop::IsQosTxop ( ) const
virtual

Check for QoS TXOP.

Returns
true if QoS TXOP.

Reimplemented from ns3::Txop.

Definition at line 1563 of file qos-txop.cc.

◆ IsTxopFragmentation()

bool ns3::QosTxop::IsTxopFragmentation ( ) const
private

Check if the current packet is fragmented because of an exceeded TXOP duration.

Returns
true if the current packet is fragmented because of an exceeded TXOP duration, false otherwise

Definition at line 974 of file qos-txop.cc.

References ns3::WifiMacHeader::GetAddr1(), ns3::WifiRemoteStationManager::GetFragmentSize(), GetTxopFragmentSize(), ns3::Txop::GetTxopLimit(), ns3::Txop::m_currentHdr, ns3::Txop::m_currentPacket, ns3::Txop::m_stationManager, and ns3::WifiRemoteStationManager::NeedFragmentation().

Referenced by GetFragmentOffset(), GetFragmentSize(), GetNextFragmentSize(), and IsLastFragment().

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

◆ MapDestAddressForAggregation()

Mac48Address ns3::QosTxop::MapDestAddressForAggregation ( const WifiMacHeader hdr)

This functions are used only to correctly set destination address in A-MSDU subframes.

If aggregating sta is a STA (in an infrastructured network): DA = Address3 If aggregating sta is an AP DA = Address1

Parameters
hdrWi-Fi header
Returns
Mac48Address

Definition at line 1186 of file qos-txop.cc.

References ns3::ADHOC_STA, ns3::AP, ns3::WifiMacHeader::GetAddr1(), ns3::WifiMacHeader::GetAddr3(), GetTypeOfStation(), and NS_LOG_FUNCTION.

Referenced by NotifyAccessGranted().

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

◆ MapSrcAddressForAggregation()

Mac48Address ns3::QosTxop::MapSrcAddressForAggregation ( const WifiMacHeader hdr)

This functions are used only to correctly set source address in A-MSDU subframes.

If aggregating sta is a STA (in an infrastructured network): SA = Address2 If aggregating sta is an AP SA = Address3

Parameters
hdrWi-Fi header
Returns
Mac48Address

Definition at line 1170 of file qos-txop.cc.

References ns3::ADHOC_STA, ns3::WifiMacHeader::GetAddr2(), ns3::WifiMacHeader::GetAddr3(), GetTypeOfStation(), NS_LOG_FUNCTION, and ns3::STA.

Referenced by NotifyAccessGranted().

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

◆ MissedAck()

void ns3::QosTxop::MissedAck ( void  )
virtual

Event handler when an ACK is missed.

Reimplemented from ns3::Txop.

Definition at line 556 of file qos-txop.cc.

References ns3::Packet::AddHeader(), ns3::COMPRESSED_BLOCK_ACK, ns3::WifiMacHeader::GetAddr1(), ns3::MacLow::GetAddress(), GetAmpduExist(), GetBaAgreementExists(), ns3::MacLow::GetBssid(), ns3::Txop::GetCw(), ns3::RandomVariableStream::GetInteger(), ns3::Packet::GetSize(), ns3::GetTid(), ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::IsNull(), ns3::WifiMacHeader::IsQosData(), m_backoffTrace, m_currentBar, ns3::Txop::m_currentHdr, ns3::Txop::m_currentPacket, m_cwTrace, ns3::Txop::m_low, ns3::Txop::m_rng, ns3::Txop::m_stationManager, ns3::Txop::m_txFailedCallback, ns3::Txop::m_txMiddle, ns3::CtrlBAckRequestHeader::MustSendHtImmediateAck(), ns3::Txop::NeedDataRetransmission(), NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::MacTxMiddle::PeekNextSequenceNumberFor(), ns3::WifiRemoteStationManager::ReportFinalDataFailed(), ns3::Txop::ResetCw(), RestartAccessIfNeeded(), ns3::WifiMacHeader::SetAddr1(), ns3::WifiMacHeader::SetAddr2(), ns3::WifiMacHeader::SetAddr3(), ns3::WifiMacHeader::SetDsNotFrom(), ns3::WifiMacHeader::SetDsNotTo(), ns3::CtrlBAckRequestHeader::SetHtImmediateAck(), ns3::WifiMacHeader::SetNoMoreFragments(), ns3::WifiMacHeader::SetNoRetry(), ns3::WifiMacHeader::SetRetry(), ns3::CtrlBAckRequestHeader::SetStartingSequence(), ns3::CtrlBAckRequestHeader::SetTidInfo(), ns3::CtrlBAckRequestHeader::SetType(), ns3::WifiMacHeader::SetType(), ns3::Txop::StartBackoffNow(), ns3::Txop::UpdateFailedCw(), and ns3::WIFI_MAC_CTL_BACKREQ.

Referenced by AmpduAggregationTest::DoRun().

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

◆ MissedBlockAck()

void ns3::QosTxop::MissedBlockAck ( uint8_t  nMpdus)
virtual

Event handler when a Block ACK timeout has occurred.

Parameters
nMpdusnumber of MPDUs sent in the A-MPDU transmission that results in a Block ACK timeout.

Reimplemented from ns3::Txop.

Definition at line 622 of file qos-txop.cc.

References ns3::Packet::AddHeader(), ns3::COMPRESSED_BLOCK_ACK, ns3::WifiMacHeader::GetAddr1(), ns3::MacLow::GetAddress(), GetAmpduExist(), ns3::MacLow::GetBssid(), ns3::Txop::GetCw(), ns3::RandomVariableStream::GetInteger(), ns3::WifiMacHeader::GetSequenceNumber(), ns3::CtrlBAckRequestHeader::GetStartingSequence(), ns3::GetTid(), ns3::WifiMacHeader::IsBlockAck(), ns3::WifiMacHeader::IsBlockAckReq(), ns3::WifiMacHeader::IsQosData(), m_backoffTrace, m_currentBar, ns3::Txop::m_currentHdr, ns3::Txop::m_currentPacket, m_cwTrace, ns3::Txop::m_low, ns3::Txop::m_rng, ns3::Txop::m_stationManager, ns3::CtrlBAckRequestHeader::MustSendHtImmediateAck(), NeedBarRetransmission(), NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::Packet::PeekHeader(), ns3::WifiRemoteStationManager::ReportAmpduTxStatus(), ns3::Txop::ResetCw(), RestartAccessIfNeeded(), ns3::WifiMacHeader::SetAddr1(), ns3::WifiMacHeader::SetAddr2(), ns3::WifiMacHeader::SetAddr3(), ns3::WifiMacHeader::SetDsNotFrom(), ns3::WifiMacHeader::SetDsNotTo(), ns3::CtrlBAckRequestHeader::SetHtImmediateAck(), ns3::WifiMacHeader::SetNoMoreFragments(), ns3::WifiMacHeader::SetNoRetry(), ns3::WifiMacHeader::SetRetry(), ns3::CtrlBAckRequestHeader::SetStartingSequence(), ns3::CtrlBAckRequestHeader::SetTidInfo(), ns3::CtrlBAckRequestHeader::SetType(), ns3::WifiMacHeader::SetType(), ns3::Txop::StartBackoffNow(), ns3::Txop::UpdateFailedCw(), and ns3::WIFI_MAC_CTL_BACKREQ.

+ Here is the call graph for this function:

◆ MissedCts()

void ns3::QosTxop::MissedCts ( void  )
virtual

Event handler when a CTS timeout has occurred.

Reimplemented from ns3::Txop.

Definition at line 427 of file qos-txop.cc.

References ns3::Packet::AddHeader(), ns3::COMPRESSED_BLOCK_ACK, ns3::MacLow::FlushAggregateQueue(), ns3::WifiMacHeader::GetAddr1(), ns3::MacLow::GetAddress(), GetAmpduExist(), GetBaAgreementExists(), ns3::MacLow::GetBssid(), ns3::Txop::GetCw(), ns3::RandomVariableStream::GetInteger(), ns3::GetTid(), ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::IsNull(), ns3::WifiMacHeader::IsQosData(), m_backoffTrace, m_currentBar, ns3::Txop::m_currentHdr, ns3::Txop::m_currentPacket, m_cwTrace, ns3::Txop::m_low, ns3::Txop::m_rng, ns3::Txop::m_stationManager, ns3::Txop::m_txFailedCallback, ns3::Txop::m_txMiddle, ns3::CtrlBAckRequestHeader::MustSendHtImmediateAck(), ns3::Txop::NeedRtsRetransmission(), NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::MacTxMiddle::PeekNextSequenceNumberFor(), ns3::WifiRemoteStationManager::ReportFinalRtsFailed(), ns3::Txop::ResetCw(), RestartAccessIfNeeded(), ns3::WifiMacHeader::SetAddr1(), ns3::WifiMacHeader::SetAddr2(), ns3::WifiMacHeader::SetAddr3(), ns3::WifiMacHeader::SetDsNotFrom(), ns3::WifiMacHeader::SetDsNotTo(), ns3::CtrlBAckRequestHeader::SetHtImmediateAck(), ns3::WifiMacHeader::SetNoMoreFragments(), ns3::WifiMacHeader::SetNoRetry(), ns3::CtrlBAckRequestHeader::SetStartingSequence(), ns3::CtrlBAckRequestHeader::SetTidInfo(), ns3::CtrlBAckRequestHeader::SetType(), ns3::WifiMacHeader::SetType(), ns3::Txop::StartBackoffNow(), ns3::Txop::UpdateFailedCw(), and ns3::WIFI_MAC_CTL_BACKREQ.

+ Here is the call graph for this function:

◆ NeedBarRetransmission()

bool ns3::QosTxop::NeedBarRetransmission ( void  )

◆ NeedFragmentation()

◆ NotifyAccessGranted()

void ns3::QosTxop::NotifyAccessGranted ( void  )
virtual

Notify the EDCAF that access has been granted.

Reimplemented from ns3::Txop.

Definition at line 166 of file qos-txop.cc.

References ns3::MsduAggregator::Aggregate(), ns3::BASIC_BLOCK_ACK, CompleteTx(), ns3::MacLowTransmissionParameters::DisableAck(), ns3::MacLowTransmissionParameters::DisableNextData(), ns3::MacLowTransmissionParameters::DisableRts(), ns3::MacLowTransmissionParameters::EnableAck(), ns3::MacLowTransmissionParameters::EnableNextData(), ns3::WifiMacHeader::GetAddr1(), GetAmpduExist(), GetBlockAckThreshold(), ns3::MacLow::GetBssid(), GetFragmentPacket(), GetNextFragmentSize(), ns3::MacTxMiddle::GetNextSequenceNumberFor(), ns3::WifiRemoteStationManager::GetQosSupported(), ns3::WifiMacHeader::GetQosTid(), ns3::WifiMacHeader::GetSequenceControl(), ns3::Packet::GetSize(), ns3::WifiMacHeader::GetType(), ns3::Mac48Address::IsBroadcast(), ns3::WifiMacHeader::IsData(), ns3::Mac48Address::IsGroup(), IsLastFragment(), ns3::WifiMacHeader::IsQosAmsdu(), ns3::WifiMacHeader::IsQosBlockAck(), ns3::WifiMacHeader::IsQosData(), ns3::WifiMacHeader::IsRetry(), ns3::Txop::m_accessRequested, m_baManager, m_blockAckType, m_currentBar, ns3::Txop::m_currentHdr, m_currentIsFragmented, ns3::Txop::m_currentPacket, m_currentPacketTimestamp, ns3::Txop::m_currentParams, ns3::Txop::m_fragmentNumber, m_isAccessRequestedForRts, ns3::Txop::m_low, m_msduAggregator, m_qosBlockedDestinations, ns3::Txop::m_queue, m_startTxop, ns3::Txop::m_stationManager, ns3::Txop::m_txMiddle, MapDestAddressForAggregation(), MapSrcAddressForAggregation(), NeedFragmentation(), ns3::Simulator::Now(), NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, SendBlockAckRequest(), ns3::WifiMacHeader::SetAddr3(), ns3::WifiMacHeader::SetFragmentNumber(), ns3::WifiMacHeader::SetNoMoreFragments(), ns3::WifiMacHeader::SetNoRetry(), ns3::WifiMacHeader::SetQosAmsdu(), ns3::WifiMacHeader::SetSequenceNumber(), SetupBlockAckIfNeeded(), ns3::MacLow::StartTransmission(), ns3::WifiRemoteStationManager::UpdateFragmentationThreshold(), VerifyBlockAck(), and ns3::WIFI_MAC_CTL_BACKREQ.

+ Here is the call graph for this function:

◆ NotifyCollision()

void ns3::QosTxop::NotifyCollision ( void  )
virtual

Notify the EDCAF that collision has occurred.

Reimplemented from ns3::Txop.

Definition at line 418 of file qos-txop.cc.

References ns3::Txop::GetCw(), ns3::RandomVariableStream::GetInteger(), m_backoffTrace, ns3::Txop::m_rng, NS_LOG_FUNCTION, RestartAccessIfNeeded(), and ns3::Txop::StartBackoffNow().

+ Here is the call graph for this function:

◆ NotifyInternalCollision()

◆ PeekNextRetransmitPacket()

Ptr< const Packet > ns3::QosTxop::PeekNextRetransmitPacket ( WifiMacHeader header,
uint8_t  tid,
Time timestamp 
)

Peek in retransmit queue and get the next packet without removing it from the queue.

Parameters
headerWi-Fi header.
tidtraffic ID.
timestampthe timestamp.
Returns
the packet.

Definition at line 154 of file qos-txop.cc.

References m_baManager.

◆ PeekNextSequenceNumberFor()

uint16_t ns3::QosTxop::PeekNextSequenceNumberFor ( WifiMacHeader hdr)

Return the next sequence number for the Traffic ID and destination, but do not pick it (i.e.

the current sequence number remains unchanged).

Parameters
hdrWi-Fi header.
Returns
the next sequence number.

Definition at line 148 of file qos-txop.cc.

References ns3::Txop::m_txMiddle, and ns3::MacTxMiddle::PeekNextSequenceNumberFor().

+ Here is the call graph for this function:

◆ PushFront()

void ns3::QosTxop::PushFront ( Ptr< const Packet packet,
const WifiMacHeader hdr 
)
Parameters
packetpacket to send.
hdrheader of packet to send.

Store the packet in the front of the internal queue until it can be sent safely.

Definition at line 1216 of file qos-txop.cc.

References ns3::WifiMacHeader::GetAddr1(), ns3::Txop::m_queue, ns3::Txop::m_stationManager, NS_LOG_FUNCTION, ns3::WifiRemoteStationManager::PrepareForQueue(), and StartAccessIfNeeded().

Referenced by SendDelbaFrame().

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

◆ RemoveRetransmitPacket()

void ns3::QosTxop::RemoveRetransmitPacket ( uint8_t  tid,
Mac48Address  recipient,
uint16_t  seqnumber 
)

Remove a packet after you peek in the retransmit queue and get it.

Parameters
tidtraffic ID of the packet to be removed.
recipientaddress of the recipient the packet was intended for.
seqnumbersequence number of the packet to be removed.

Definition at line 160 of file qos-txop.cc.

References m_baManager.

◆ RestartAccessIfNeeded()

◆ SendAddBaRequest()

void ns3::QosTxop::SendAddBaRequest ( Mac48Address  recipient,
uint8_t  tid,
uint16_t  startSeq,
uint16_t  timeout,
bool  immediateBAck 
)
private

Sends an ADDBA Request to establish a block ack agreement with sta addressed by recipient for tid tid.

Parameters
recipientaddress of the recipient.
tidtraffic ID.
startSeqstarting sequence.
timeouttimeout value.
immediateBAckflag to indicate whether immediate block ack is used.

Definition at line 1435 of file qos-txop.cc.

References ns3::Packet::AddHeader(), ns3::WifiActionHeader::BLOCK_ACK, ns3::WifiActionHeader::BLOCK_ACK_ADDBA_REQUEST, ns3::WifiActionHeader::ActionValue::blockAck, ns3::MacLowTransmissionParameters::DisableNextData(), ns3::MacLowTransmissionParameters::DisableRts(), ns3::MacLowTransmissionParameters::EnableAck(), ns3::MacLow::GetAddress(), ns3::MacTxMiddle::GetNextSequenceNumberFor(), m_baManager, ns3::Txop::m_currentHdr, ns3::Txop::m_currentPacket, ns3::Txop::m_currentParams, ns3::Txop::m_low, ns3::Txop::m_stationManager, ns3::Txop::m_txMiddle, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::WifiActionHeader::SetAction(), ns3::WifiMacHeader::SetAddr1(), ns3::WifiMacHeader::SetAddr2(), ns3::WifiMacHeader::SetAddr3(), ns3::MgtAddBaRequestHeader::SetAmsduSupport(), ns3::WifiMacHeader::SetDsNotFrom(), ns3::WifiMacHeader::SetDsNotTo(), ns3::WifiMacHeader::SetFragmentNumber(), ns3::WifiMacHeader::SetNoMoreFragments(), ns3::WifiMacHeader::SetNoRetry(), ns3::WifiMacHeader::SetSequenceNumber(), ns3::WifiMacHeader::SetType(), ns3::MacLow::StartTransmission(), timeout, ns3::WifiRemoteStationManager::UpdateFragmentationThreshold(), and ns3::WIFI_MAC_MGT_ACTION.

Referenced by SetupBlockAckIfNeeded().

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

◆ SendBlockAckRequest()

◆ SendDelbaFrame()

void ns3::QosTxop::SendDelbaFrame ( Mac48Address  addr,
uint8_t  tid,
bool  byOriginator 
)

◆ SetAccessCategory()

void ns3::QosTxop::SetAccessCategory ( AcIndex  ac)

Set the access category of this EDCAF.

Parameters
acaccess category.

Definition at line 1163 of file qos-txop.cc.

References m_ac, and NS_LOG_FUNCTION.

Referenced by AmpduAggregationTest::DoRun(), and TwoLevelAggregationTest::DoRun().

+ Here is the caller graph for this function:

◆ SetAmpduExist()

void ns3::QosTxop::SetAmpduExist ( Mac48Address  dest,
bool  enableAmpdu 
)

Set indication whether A-MPDU is used to transmit data to a peer station.

Parameters
destaddress of peer station.
enableAmpduflag whether A-MPDU is used or not.

Definition at line 1309 of file qos-txop.cc.

References m_aMpduEnabled, and NS_LOG_FUNCTION.

◆ SetBlockAckInactivityTimeout()

void ns3::QosTxop::SetBlockAckInactivityTimeout ( uint16_t  timeout)

Set the Block Ack inactivity timeout.

Parameters
timeoutthe Block Ack inactivity timeout.

Definition at line 1421 of file qos-txop.cc.

References m_blockAckInactivityTimeout, NS_LOG_FUNCTION, and timeout.

Referenced by ns3::RegularWifiMac::SetBeBlockAckInactivityTimeout(), ns3::RegularWifiMac::SetBkBlockAckInactivityTimeout(), ns3::RegularWifiMac::SetViBlockAckInactivityTimeout(), and ns3::RegularWifiMac::SetVoBlockAckInactivityTimeout().

+ Here is the caller graph for this function:

◆ SetBlockAckThreshold()

void ns3::QosTxop::SetBlockAckThreshold ( uint8_t  threshold)

Set threshold for block ACK mechanism.

If number of packets in the queue reaches the threshold, block ACK mechanism is used.

Parameters
thresholdblock ack threshold value.

Definition at line 1413 of file qos-txop.cc.

References m_baManager, m_blockAckThreshold, and NS_LOG_FUNCTION.

Referenced by ns3::RegularWifiMac::SetBeBlockAckThreshold(), ns3::RegularWifiMac::SetBkBlockAckThreshold(), ns3::RegularWifiMac::SetViBlockAckThreshold(), and ns3::RegularWifiMac::SetVoBlockAckThreshold().

+ Here is the caller graph for this function:

◆ SetMpduAggregator()

void ns3::QosTxop::SetMpduAggregator ( const Ptr< MpduAggregator aggr)

Set the aggregator used to construct A-MPDU subframes.

Parameters
aggrpointer to the MPDU aggregator.

Definition at line 1209 of file qos-txop.cc.

References m_mpduAggregator, and NS_LOG_FUNCTION.

Referenced by AmpduAggregationTest::DoRun(), and TwoLevelAggregationTest::DoRun().

+ Here is the caller graph for this function:

◆ SetMsduAggregator()

void ns3::QosTxop::SetMsduAggregator ( const Ptr< MsduAggregator aggr)

Set the aggregator used to construct A-MSDU subframes.

Parameters
aggrpointer to the MSDU aggregator.

Definition at line 1202 of file qos-txop.cc.

References m_msduAggregator, and NS_LOG_FUNCTION.

Referenced by TwoLevelAggregationTest::DoRun().

+ Here is the caller graph for this function:

◆ SetTypeOfStation()

void ns3::QosTxop::SetTypeOfStation ( TypeOfStation  type)

Set type of station with the given type.

Parameters
typethe type of station.

Definition at line 129 of file qos-txop.cc.

References m_typeOfStation, and NS_LOG_FUNCTION.

◆ SetupBlockAckIfNeeded()

bool ns3::QosTxop::SetupBlockAckIfNeeded ( )
private

If number of packets in the queue reaches m_blockAckThreshold value, an ADDBA Request frame is sent to destination in order to setup a block ack.

Returns
true if we tried to set up block ACK, false otherwise.

Definition at line 1342 of file qos-txop.cc.

References ns3::WifiMacHeader::GetAddr1(), GetBlockAckThreshold(), ns3::MpduAggregator::GetMaxAmpduSize(), ns3::MacTxMiddle::GetNextSeqNumberByTidAndAddress(), ns3::WifiMacHeader::GetQosTid(), ns3::WifiRemoteStationManager::HasHeSupported(), ns3::WifiRemoteStationManager::HasVhtSupported(), m_blockAckInactivityTimeout, ns3::Txop::m_currentHdr, m_mpduAggregator, ns3::Txop::m_queue, ns3::Txop::m_stationManager, ns3::Txop::m_txMiddle, NS_LOG_FUNCTION, and SendAddBaRequest().

Referenced by NotifyAccessGranted().

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

◆ SetWifiRemoteStationManager()

void ns3::QosTxop::SetWifiRemoteStationManager ( const Ptr< WifiRemoteStationManager remoteManager)
virtual

Set WifiRemoteStationsManager this QosTxop is associated to.

Parameters
remoteManagerWifiRemoteStationManager.

Reimplemented from ns3::Txop.

Definition at line 121 of file qos-txop.cc.

References m_baManager, ns3::Txop::m_stationManager, NS_LOG_FUNCTION, and ns3::Txop::SetWifiRemoteStationManager().

Referenced by AmpduAggregationTest::DoRun(), and TwoLevelAggregationTest::DoRun().

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

◆ StartAccessIfNeeded()

void ns3::QosTxop::StartAccessIfNeeded ( void  )
virtual

◆ StartNextPacket()

◆ VerifyBlockAck()

void ns3::QosTxop::VerifyBlockAck ( void  )
private

Verifies if dequeued packet has to be transmitted with ack policy Block Ack.

This happens if an established block ack agreement exists with the receiver.

Definition at line 1281 of file qos-txop.cc.

References ns3::WifiMacHeader::BLOCK_ACK, ns3::OriginatorBlockAckAgreement::ESTABLISHED, ns3::WifiMacHeader::GetAddr1(), ns3::MpduAggregator::GetMaxAmpduSize(), GetMpduAggregator(), ns3::WifiMacHeader::GetQosTid(), ns3::WifiMacHeader::GetSequenceNumber(), ns3::OriginatorBlockAckAgreement::INACTIVE, m_baManager, ns3::Txop::m_currentHdr, NS_LOG_FUNCTION, and ns3::WifiMacHeader::SetQosAckPolicy().

Referenced by NotifyAccessGranted(), and StartNextPacket().

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

Friends And Related Function Documentation

◆ ::AmpduAggregationTest

friend class ::AmpduAggregationTest
friend

Allow test cases to access private members.

Definition at line 94 of file qos-txop.h.

◆ AggregationCapableTransmissionListener

friend class AggregationCapableTransmissionListener
friend

allow AggregationCapableTransmissionListener class access

Definition at line 425 of file qos-txop.h.

Member Data Documentation

◆ m_ac

AcIndex ns3::QosTxop::m_ac
private

the access category

Definition at line 540 of file qos-txop.h.

Referenced by CompleteConfig(), and SetAccessCategory().

◆ m_aMpduEnabled

std::map<Mac48Address, bool> ns3::QosTxop::m_aMpduEnabled

list containing flags whether A-MPDU is enabled for a given destination address

Definition at line 96 of file qos-txop.h.

Referenced by GetAmpduExist(), and SetAmpduExist().

◆ m_backoffTrace

TracedValue<uint32_t> ns3::QosTxop::m_backoffTrace
private

◆ m_baManager

◆ m_blockAckInactivityTimeout

uint16_t ns3::QosTxop::m_blockAckInactivityTimeout
private

the Block ACK inactivity timeout

Definition at line 549 of file qos-txop.h.

Referenced by SetBlockAckInactivityTimeout(), and SetupBlockAckIfNeeded().

◆ m_blockAckThreshold

uint8_t ns3::QosTxop::m_blockAckThreshold
private

the Block ACK threshold

Definition at line 546 of file qos-txop.h.

Referenced by GetBlockAckThreshold(), and SetBlockAckThreshold().

◆ m_blockAckType

BlockAckType ns3::QosTxop::m_blockAckType
private

the Block ACK type

Definition at line 547 of file qos-txop.h.

Referenced by NotifyAccessGranted(), QosTxop(), and SendBlockAckRequest().

◆ m_currentBar

Bar ns3::QosTxop::m_currentBar
private

the current BAR

Definition at line 550 of file qos-txop.h.

Referenced by MissedAck(), MissedBlockAck(), MissedCts(), NotifyAccessGranted(), and StartNextPacket().

◆ m_currentIsFragmented

bool ns3::QosTxop::m_currentIsFragmented
private

flag whether current packet is fragmented

Definition at line 553 of file qos-txop.h.

Referenced by GotAck(), and NotifyAccessGranted().

◆ m_currentPacketTimestamp

Time ns3::QosTxop::m_currentPacketTimestamp
private

the current packet timestamp

Definition at line 548 of file qos-txop.h.

Referenced by CompleteTx(), NotifyAccessGranted(), RestartAccessIfNeeded(), and StartAccessIfNeeded().

◆ m_cwTrace

TracedValue<uint32_t> ns3::QosTxop::m_cwTrace
private

CW trace value.

Definition at line 556 of file qos-txop.h.

Referenced by DoInitialize(), EndTxNoAck(), GetTypeId(), GotAck(), GotBlockAck(), MissedAck(), MissedBlockAck(), and MissedCts().

◆ m_isAccessRequestedForRts

bool ns3::QosTxop::m_isAccessRequestedForRts
private

flag whether access is requested to transmit a RTS frame

Definition at line 552 of file qos-txop.h.

Referenced by NotifyAccessGranted(), NotifyInternalCollision(), RestartAccessIfNeeded(), and StartAccessIfNeeded().

◆ m_mpduAggregator

Ptr<MpduAggregator> ns3::QosTxop::m_mpduAggregator
private

A-MPDU aggregator.

Definition at line 542 of file qos-txop.h.

Referenced by DoDispose(), GetMpduAggregator(), SetMpduAggregator(), and SetupBlockAckIfNeeded().

◆ m_msduAggregator

Ptr<MsduAggregator> ns3::QosTxop::m_msduAggregator
private

A-MSDU aggregator.

Definition at line 541 of file qos-txop.h.

Referenced by DoDispose(), GetMsduAggregator(), NotifyAccessGranted(), and SetMsduAggregator().

◆ m_qosBlockedDestinations

Ptr<QosBlockedDestinations> ns3::QosTxop::m_qosBlockedDestinations
private

QOS blocked destinations.

Definition at line 544 of file qos-txop.h.

Referenced by DoDispose(), NotifyAccessGranted(), QosTxop(), RestartAccessIfNeeded(), and StartAccessIfNeeded().

◆ m_startTxop

Time ns3::QosTxop::m_startTxop
private

the start TXOP time

Definition at line 551 of file qos-txop.h.

Referenced by EndTxNoAck(), GetTxopRemaining(), GotAck(), GotBlockAck(), NotifyAccessGranted(), and StartNextPacket().

◆ m_txopTrace

TracedCallback<Time, Time> ns3::QosTxop::m_txopTrace
private

TXOP trace callback.

Definition at line 557 of file qos-txop.h.

Referenced by EndTxNoAck(), GetTypeId(), GotAck(), GotBlockAck(), and StartNextPacket().

◆ m_typeOfStation

TypeOfStation ns3::QosTxop::m_typeOfStation
private

the type of station

Definition at line 543 of file qos-txop.h.

Referenced by GetTypeOfStation(), and SetTypeOfStation().


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