Handle packet fragmentation and retransmissions for data and management frames. More...
#include "txop.h"
Classes | |
struct | LinkEntity |
Structure holding information specific to a single link. More... | |
Public Types | |
enum | ChannelAccessStatus { NOT_REQUESTED = 0 , REQUESTED , GRANTED } |
Enumeration for channel access status. More... | |
typedef Callback< void, WifiMacDropReason, Ptr< const WifiMpdu > > | DroppedMpdu |
typedef for a callback to invoke when an MPDU is dropped. | |
Public Member Functions | |
Txop () | |
Txop (Ptr< WifiMacQueue > queue) | |
Constructor. | |
~Txop () override | |
int64_t | AssignStreams (int64_t stream) |
Assign a fixed random variable stream number to the random variables used by this model. | |
virtual ChannelAccessStatus | GetAccessStatus (uint8_t linkId) const |
uint8_t | GetAifsn () const |
Return the number of slots that make up an AIFS. | |
virtual uint8_t | GetAifsn (uint8_t linkId) const |
Return the number of slots that make up an AIFS for the given link. | |
std::vector< uint8_t > | GetAifsns () const |
Return the number of slots that make up an AIFS for each link. | |
uint32_t | GetMaxCw () const |
Return the maximum contention window size. | |
virtual uint32_t | GetMaxCw (uint8_t linkId) const |
Return the maximum contention window size for the given link. | |
std::vector< uint32_t > | GetMaxCws () const |
Return the maximum contention window size for each link. | |
uint32_t | GetMinCw () const |
Return the minimum contention window size. | |
virtual uint32_t | GetMinCw (uint8_t linkId) const |
Return the minimum contention window size for the given link. | |
std::vector< uint32_t > | GetMinCws () const |
Return the minimum contention window size for each link. | |
Time | GetTxopLimit () const |
Return the TXOP limit. | |
Time | GetTxopLimit (uint8_t linkId) const |
Return the TXOP limit for the given link. | |
std::vector< Time > | GetTxopLimits () const |
Return the TXOP limit for each link. | |
Ptr< WifiMacQueue > | GetWifiMacQueue () const |
Return the packet queue associated with this Txop. | |
virtual bool | HasFramesToTransmit (uint8_t linkId) |
Check if the Txop has frames to transmit over the given link. | |
virtual bool | IsQosTxop () const |
Check for QoS TXOP. | |
virtual void | NotifyChannelAccessed (uint8_t linkId, Time txopDuration=Seconds(0)) |
Called by the FrameExchangeManager to notify that channel access has been granted on the given link for the given amount of time. | |
virtual void | NotifyChannelReleased (uint8_t linkId) |
Called by the FrameExchangeManager to notify the completion of the transmissions. | |
virtual void | NotifyOff () |
When off operation occurs, the queue gets cleaned up. | |
virtual void | NotifyOn () |
When on operation occurs, channel access will be started. | |
virtual void | NotifySleep (uint8_t linkId) |
Notify that the given link switched to sleep mode. | |
virtual void | NotifyWakeUp (uint8_t linkId) |
When wake up operation occurs on a link, channel access on that link will be restarted. | |
virtual void | Queue (Ptr< Packet > packet, const WifiMacHeader &hdr) |
virtual void | Queue (Ptr< WifiMpdu > mpdu) |
void | ResetCw (uint8_t linkId) |
Update the value of the CW variable for the given link 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). | |
void | SetAifsn (uint8_t aifsn) |
Set the number of slots that make up an AIFS. | |
void | SetAifsn (uint8_t aifsn, uint8_t linkId) |
Set the number of slots that make up an AIFS for the given link. | |
void | SetAifsns (std::vector< uint8_t > aifsns) |
Set the number of slots that make up an AIFS for each link. | |
virtual void | SetDroppedMpduCallback (DroppedMpdu callback) |
void | SetMaxCw (uint32_t maxCw) |
Set the maximum contention window size. | |
void | SetMaxCw (uint32_t maxCw, uint8_t linkId) |
Set the maximum contention window size for the given link. | |
void | SetMaxCws (std::vector< uint32_t > maxCws) |
Set the maximum contention window size for each link. | |
void | SetMinCw (uint32_t minCw) |
Set the minimum contention window size. | |
void | SetMinCw (uint32_t minCw, uint8_t linkId) |
Set the minimum contention window size for the given link. | |
void | SetMinCws (std::vector< uint32_t > minCws) |
Set the minimum contention window size for each link. | |
void | SetTxMiddle (const Ptr< MacTxMiddle > txMiddle) |
Set MacTxMiddle this Txop is associated to. | |
void | SetTxopLimit (Time txopLimit) |
Set the TXOP limit. | |
void | SetTxopLimit (Time txopLimit, uint8_t linkId) |
Set the TXOP limit for the given link. | |
void | SetTxopLimits (const std::vector< Time > &txopLimits) |
Set the TXOP limit for each link. | |
virtual void | SetWifiMac (const Ptr< WifiMac > mac) |
Set the wifi MAC this Txop is associated to. | |
void | StartBackoffNow (uint32_t nSlots, uint8_t linkId) |
void | SwapLinks (std::map< uint8_t, uint8_t > links) |
Swap the links based on the information included in the given map. | |
void | UpdateFailedCw (uint8_t linkId) |
Update the value of the CW variable for the given link to take into account a transmission failure. | |
![]() | |
Object () | |
Constructor. | |
~Object () override | |
Destructor. | |
void | AggregateObject (Ptr< Object > other) |
Aggregate two Objects together. | |
void | Dispose () |
Dispose of this Object. | |
AggregateIterator | GetAggregateIterator () const |
Get an iterator to the Objects aggregated to this one. | |
TypeId | GetInstanceTypeId () const override |
Get the most derived TypeId for this Object. | |
template<typename T > | |
Ptr< T > | GetObject () const |
Get a pointer to the requested aggregated Object. | |
template<> | |
Ptr< Object > | GetObject () const |
Specialization of () for objects of type ns3::Object. | |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
Get a pointer to the requested aggregated Object by TypeId. | |
template<> | |
Ptr< Object > | GetObject (TypeId tid) const |
Specialization of (TypeId tid) for objects of type ns3::Object. | |
void | Initialize () |
Invoke DoInitialize on all Objects aggregated to this one. | |
bool | IsInitialized () const |
Check if the object has been initialized. | |
![]() | |
SimpleRefCount () | |
Default constructor. | |
SimpleRefCount (const SimpleRefCount &o) | |
Copy constructor. | |
uint32_t | GetReferenceCount () const |
Get the reference count of the object. | |
SimpleRefCount & | operator= (const SimpleRefCount &o) |
Assignment operator. | |
void | Ref () const |
Increment the reference count. | |
void | Unref () const |
Decrement the reference count. | |
![]() | |
virtual | ~ObjectBase () |
Virtual destructor. | |
void | GetAttribute (std::string name, AttributeValue &value) const |
Get the value of an attribute, raising fatal errors if unsuccessful. | |
bool | GetAttributeFailSafe (std::string name, AttributeValue &value) const |
Get the value of an attribute without raising errors. | |
virtual TypeId | GetInstanceTypeId () const =0 |
Get the most derived TypeId for this Object. | |
void | SetAttribute (std::string name, const AttributeValue &value) |
Set a single attribute, raising fatal errors if unsuccessful. | |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
Set a single attribute without raising errors. | |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
Connect a TraceSource to a Callback with a context. | |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
Connect a TraceSource to a Callback without a context. | |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected with a context. | |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected without a context. | |
Static Public Member Functions | |
static TypeId | GetTypeId () |
Get the type ID. | |
![]() | |
static TypeId | GetTypeId () |
Register this type. | |
![]() | |
static TypeId | GetTypeId () |
Get the type ID. | |
Protected Types | |
typedef TracedCallback< uint32_t, uint8_t > | BackoffValueTracedCallback |
TracedCallback for backoff trace value typedef. | |
typedef TracedCallback< uint32_t, uint8_t > | CwValueTracedCallback |
TracedCallback for CW trace value typedef. | |
Protected Member Functions | |
void | DoDispose () override |
Destructor implementation. | |
void | DoInitialize () override |
Initialize() implementation. | |
virtual void | GenerateBackoff (uint8_t linkId) |
Generate a new backoff for the given link now. | |
uint32_t | GetBackoffSlots (uint8_t linkId) const |
Return the current number of backoff slots on the given link. | |
Time | GetBackoffStart (uint8_t linkId) const |
Return the time when the backoff procedure started on the given link. | |
uint32_t | GetCw (uint8_t linkId) const |
Get the current value of the CW variable for the given link. | |
LinkEntity & | GetLink (uint8_t linkId) const |
Get a reference to the link associated with the given ID. | |
const std::map< uint8_t, std::unique_ptr< LinkEntity > > & | GetLinks () const |
virtual void | NotifyAccessRequested (uint8_t linkId) |
Notify that access request has been received for the given link. | |
void | RequestAccess (uint8_t linkId) |
Request access to the ChannelAccessManager associated with the given link. | |
virtual void | StartAccessIfNeeded (uint8_t linkId) |
Request access from Txop on the given link if needed. | |
void | UpdateBackoffSlotsNow (uint32_t nSlots, Time backoffUpdateBound, uint8_t linkId) |
Update backoff slots for the given link that nSlots has passed. | |
![]() | |
Object (const Object &o) | |
Copy an Object. | |
virtual void | DoDispose () |
Destructor implementation. | |
virtual void | DoInitialize () |
Initialize() implementation. | |
virtual void | NotifyNewAggregate () |
Notify all Objects aggregated to this one of a new Object being aggregated. | |
![]() | |
void | ConstructSelf (const AttributeConstructionList &attributes) |
Complete construction of ObjectBase; invoked by derived classes. | |
virtual void | NotifyConstructionCompleted () |
Notifier called once the ObjectBase is fully constructed. | |
Protected Attributes | |
BackoffValueTracedCallback | m_backoffTrace |
backoff trace value | |
CwValueTracedCallback | m_cwTrace |
CW trace value. | |
DroppedMpdu | m_droppedMpduCallback |
the dropped MPDU callback | |
Ptr< WifiMac > | m_mac |
the wifi MAC | |
Ptr< WifiMacQueue > | m_queue |
the wifi MAC queue | |
Ptr< UniformRandomVariable > | m_rng |
the random stream | |
Ptr< MacTxMiddle > | m_txMiddle |
the MacTxMiddle | |
Private Member Functions | |
virtual std::unique_ptr< LinkEntity > | CreateLinkEntity () const |
Create a LinkEntity object. | |
Private Attributes | |
std::map< uint8_t, std::unique_ptr< LinkEntity > > | m_links |
ID-indexed map of LinkEntity objects. | |
Friends | |
class | ChannelAccessManager |
< ChannelAccessManager associated class | |
Additional Inherited Members | |
![]() | |
static TypeId | GetObjectIid () |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. | |
Handle packet fragmentation and retransmissions for data and management frames.
This class implements the packet fragmentation and retransmission policy for data and management frames. It uses the ns3::ChannelAccessManager helper class to decide when to send a packet. Packets are stored in a ns3::WifiMacQueue until they can be sent.
The policy currently implemented uses a simple fragmentation 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.
ns3::Txop is accessible through the following paths with Config::Set and Config::Connect:
ns3::Ptr<N3ns313UintegerValueE>
ns3::Ptr<N3ns313UintegerValueE>
ns3::Ptr<N3ns313UintegerValueE>
Time
+9.22337e+18ns:+9.22337e+18ns ns3::Ptr<N3ns39TimeValueE>
Size of this type is 152 bytes (on a 64-bit architecture).
|
protected |
TracedCallback for backoff trace value typedef.
|
protected |
TracedCallback for CW trace value typedef.
typedef Callback<void, WifiMacDropReason, Ptr<const WifiMpdu> > ns3::Txop::DroppedMpdu |
ns3::Txop::Txop | ( | Ptr< WifiMacQueue > | queue | ) |
Constructor.
queue | the wifi MAC queue |
Definition at line 140 of file txop.cc.
References m_rng, and NS_LOG_FUNCTION.
|
override |
Definition at line 147 of file txop.cc.
References NS_LOG_FUNCTION.
int64_t ns3::Txop::AssignStreams | ( | int64_t | stream | ) |
Assign a fixed random variable stream number to the random variables used by this model.
Return the number of streams (possibly zero) that have been assigned.
stream | first stream index to use. |
Definition at line 553 of file txop.cc.
References m_rng, NS_LOG_FUNCTION, and ns3::RandomVariableStream::SetStream().
|
privatevirtual |
Create a LinkEntity object.
Reimplemented in ns3::QosTxop.
Definition at line 164 of file txop.cc.
Referenced by SetWifiMac().
|
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::Object.
Definition at line 153 of file txop.cc.
References m_links, m_mac, m_queue, m_rng, m_txMiddle, and NS_LOG_FUNCTION.
Referenced by ns3::QosTxop::DoDispose().
|
overrideprotectedvirtual |
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::Object.
Definition at line 571 of file txop.cc.
References GenerateBackoff(), m_links, NS_LOG_FUNCTION, and ResetCw().
|
protectedvirtual |
Generate a new backoff for the given link now.
linkId | the ID of the given link |
Definition at line 624 of file txop.cc.
References GetCw(), ns3::UniformRandomVariable::GetInteger(), m_backoffTrace, m_rng, NS_LOG_FUNCTION, and StartBackoffNow().
Referenced by DoInitialize(), NotifyChannelReleased(), and Queue().
|
virtual |
linkId | the ID of the given link |
Definition at line 582 of file txop.cc.
References ns3::Txop::LinkEntity::access, and GetLink().
uint8_t ns3::Txop::GetAifsn | ( | ) | const |
Return the number of slots that make up an AIFS.
For 11be multi-link devices, return the number of slots that make up an AIFS on the first link.
Definition at line 467 of file txop.cc.
References GetAifsn().
Referenced by WifiTxopTest::DoRun(), GetAifsn(), and GetTypeId().
|
virtual |
Return the number of slots that make up an AIFS for the given link.
linkId | the ID of the given link |
Reimplemented in ns3::QosTxop.
Definition at line 485 of file txop.cc.
References ns3::Txop::LinkEntity::aifsn, and GetLink().
std::vector< uint8_t > ns3::Txop::GetAifsns | ( | ) | const |
Return the number of slots that make up an AIFS for each link.
Definition at line 473 of file txop.cc.
References m_links.
Referenced by GetTypeId().
|
protected |
Return the current number of backoff slots on the given link.
linkId | the ID of the given link |
Definition at line 325 of file txop.cc.
References ns3::Txop::LinkEntity::backoffSlots, and GetLink().
|
protected |
Return the time when the backoff procedure started on the given link.
linkId | the ID of the given link |
Definition at line 331 of file txop.cc.
References ns3::Txop::LinkEntity::backoffStart, and GetLink().
|
protected |
Get the current value of the CW variable for the given link.
The initial value is minCw.
linkId | the ID of the given link |
Definition at line 298 of file txop.cc.
References ns3::Txop::LinkEntity::cw, and GetLink().
Referenced by GenerateBackoff().
|
protected |
Get a reference to the link associated with the given ID.
linkId | the given link ID |
Definition at line 170 of file txop.cc.
References m_links, and NS_ASSERT.
Referenced by GetAccessStatus(), GetAifsn(), GetBackoffSlots(), GetBackoffStart(), GetCw(), ns3::QosTxop::GetLink(), GetMaxCw(), GetMinCw(), GetTxopLimit(), NotifyAccessRequested(), NotifyChannelAccessed(), TxopTest< TxopType >::NotifyChannelAccessed(), NotifyChannelReleased(), RequestAccess(), ResetCw(), SetAifsn(), SetMaxCw(), SetMinCw(), SetTxopLimit(), StartAccessIfNeeded(), StartBackoffNow(), UpdateBackoffSlotsNow(), and UpdateFailedCw().
|
protected |
Definition at line 179 of file txop.cc.
References m_links.
Referenced by ns3::QosTxop::GotAddBaResponse(), and ns3::QosTxop::NotifyOriginatorAgreementNoReply().
uint32_t ns3::Txop::GetMaxCw | ( | ) | const |
Return the maximum contention window size.
For 11be multi-link devices, return the maximum contention window size on the first link.
Definition at line 443 of file txop.cc.
References GetMaxCw().
Referenced by GetMaxCw(), GetTypeId(), and UpdateFailedCw().
|
virtual |
Return the maximum contention window size for the given link.
linkId | the ID of the given link |
Reimplemented in ns3::QosTxop.
Definition at line 461 of file txop.cc.
References ns3::Txop::LinkEntity::cwMax, and GetLink().
std::vector< uint32_t > ns3::Txop::GetMaxCws | ( | ) | const |
Return the maximum contention window size for each link.
Definition at line 449 of file txop.cc.
References m_links.
Referenced by GetTypeId().
uint32_t ns3::Txop::GetMinCw | ( | ) | const |
Return the minimum contention window size.
For 11be multi-link devices, return the minimum contention window size on the first link.
Definition at line 419 of file txop.cc.
References GetMinCw().
Referenced by WifiTxopTest::DoRun(), GetMinCw(), GetTypeId(), ResetCw(), and UpdateFailedCw().
|
virtual |
Return the minimum contention window size for the given link.
linkId | the ID of the given link |
Reimplemented in ns3::QosTxop.
Definition at line 437 of file txop.cc.
References ns3::Txop::LinkEntity::cwMin, and GetLink().
std::vector< uint32_t > ns3::Txop::GetMinCws | ( | ) | const |
Return the minimum contention window size for each link.
Definition at line 425 of file txop.cc.
References m_links.
Referenced by GetTypeId().
Time ns3::Txop::GetTxopLimit | ( | ) | const |
Return the TXOP limit.
Definition at line 491 of file txop.cc.
References GetTxopLimit().
Referenced by TwoLevelAggregationTest::DoRun(), ns3::QosFrameExchangeManager::GetCtsToSelfDurationId(), ns3::QosFrameExchangeManager::GetFrameDurationId(), ns3::HeFrameExchangeManager::GetMuRtsDurationId(), ns3::HtFrameExchangeManager::GetPsduDurationId(), ns3::QosFrameExchangeManager::GetRtsDurationId(), GetTxopLimit(), GetTypeId(), ns3::QosFrameExchangeManager::SendCfEndIfNeeded(), ns3::QosFrameExchangeManager::StartTransmission(), ns3::QosFrameExchangeManager::TransmissionFailed(), ns3::HtFrameExchangeManager::TransmissionSucceeded(), and ns3::QosFrameExchangeManager::TransmissionSucceeded().
Time ns3::Txop::GetTxopLimit | ( | uint8_t | linkId | ) | const |
Return the TXOP limit for the given link.
linkId | the ID of the given link |
Definition at line 509 of file txop.cc.
References GetLink(), and ns3::Txop::LinkEntity::txopLimit.
std::vector< Time > ns3::Txop::GetTxopLimits | ( | ) | const |
Return the TXOP limit for each link.
Definition at line 497 of file txop.cc.
References m_links.
Referenced by GetTypeId().
|
static |
Get the type ID.
Definition at line 51 of file txop.cc.
References ns3::TypeId::ATTR_GET, ns3::TypeId::ATTR_SET, GetAifsn(), GetAifsns(), GetMaxCw(), GetMaxCws(), GetMinCw(), GetMinCws(), GetTxopLimit(), GetTxopLimits(), GetWifiMacQueue(), m_backoffTrace, m_cwTrace, ns3::MakePointerAccessor(), ns3::MakeTimeAccessor(), ns3::MakeTimeChecker(), ns3::MakeTraceSourceAccessor(), ns3::MakeUintegerAccessor(), ns3::MilliSeconds(), SetAifsn(), SetAifsns(), SetMaxCw(), SetMaxCws(), SetMinCw(), SetMinCws(), ns3::TypeId::SetParent(), SetTxopLimit(), and SetTxopLimits().
Ptr< WifiMacQueue > ns3::Txop::GetWifiMacQueue | ( | ) | const |
Return the packet queue associated with this Txop.
Definition at line 231 of file txop.cc.
References m_queue, and NS_LOG_FUNCTION.
Referenced by AmpduAggregationTest::DoRun(), TwoLevelAggregationTest::DoRun(), HeAggregationTest::DoRunSubTest(), ns3::ApWifiMac::GetTxopQueue(), GetTypeId(), ns3::FrameExchangeManager::ReceivedNormalAck(), ns3::HtFrameExchangeManager::SendAddBaRequest(), ns3::HtFrameExchangeManager::SendDelbaFrame(), and OfdmaAckSequenceTest::Transmit().
|
virtual |
Check if the Txop has frames to transmit over the given link.
linkId | the ID of the given link. |
Reimplemented in ns3::QosTxop.
Definition at line 515 of file txop.cc.
References m_queue, and NS_LOG_FUNCTION.
Referenced by ns3::WifiMac::HasFramesToTransmit(), NotifyChannelReleased(), and StartAccessIfNeeded().
|
virtual |
|
protectedvirtual |
Notify that access request has been received for the given link.
linkId | the ID of the given link |
Definition at line 588 of file txop.cc.
References ns3::Txop::LinkEntity::access, GetLink(), NS_LOG_FUNCTION, and REQUESTED.
Called by the FrameExchangeManager to notify that channel access has been granted on the given link for the given amount of time.
linkId | the ID of the given link |
txopDuration | the duration of the TXOP gained (zero for DCF) |
Reimplemented in ns3::QosTxop.
Definition at line 595 of file txop.cc.
References ns3::Txop::LinkEntity::access, GetLink(), GRANTED, and NS_LOG_FUNCTION.
Referenced by ns3::QosTxop::NotifyChannelAccessed(), and ns3::FrameExchangeManager::StartTransmission().
|
virtual |
Called by the FrameExchangeManager to notify the completion of the transmissions.
This method generates a new backoff and restarts access if needed.
linkId | the ID of the link the FrameExchangeManager is operating on |
Reimplemented in ns3::QosTxop.
Definition at line 602 of file txop.cc.
References ns3::Txop::LinkEntity::access, GenerateBackoff(), GetLink(), HasFramesToTransmit(), NOT_REQUESTED, NS_LOG_FUNCTION, RequestAccess(), and ns3::Simulator::ScheduleNow().
Referenced by ns3::QosTxop::NotifyChannelReleased().
|
virtual |
When off operation occurs, the queue gets cleaned up.
Definition at line 639 of file txop.cc.
References m_queue, and NS_LOG_FUNCTION.
|
virtual |
When on operation occurs, channel access will be started.
Definition at line 653 of file txop.cc.
References m_links, NS_LOG_FUNCTION, and StartAccessIfNeeded().
|
virtual |
Notify that the given link switched to sleep mode.
linkId | the ID of the given link |
Definition at line 633 of file txop.cc.
References NS_LOG_FUNCTION.
|
virtual |
When wake up operation occurs on a link, channel access on that link will be restarted.
linkId | the ID of the link |
Definition at line 646 of file txop.cc.
References NS_LOG_FUNCTION, and StartAccessIfNeeded().
|
virtual |
packet | packet to send. |
hdr | header of packet to send. |
Store the packet in the internal queue until it can be sent safely.
Definition at line 524 of file txop.cc.
References NS_LOG_FUNCTION.
Referenced by ns3::AdhocWifiMac::Enqueue(), ns3::StaWifiMac::Enqueue(), ns3::MeshWifiInterfaceMac::ForwardDown(), ns3::ApWifiMac::ForwardDown(), ns3::HtFrameExchangeManager::SendAddBaResponse(), ns3::StaWifiMac::SendAssociationRequest(), ns3::ApWifiMac::SendAssocResp(), ns3::MeshWifiInterfaceMac::SendBeacon(), ns3::MeshWifiInterfaceMac::SendManagementFrame(), ns3::ApWifiMac::SendOneBeacon(), ns3::StaWifiMac::SendProbeRequest(), ns3::ApWifiMac::SendProbeResp(), and ns3::StaWifiMac::SetPowerSaveMode().
mpdu | the given MPDU |
Store the given MPDU in the internal queue until it can be sent safely.
Definition at line 534 of file txop.cc.
References GenerateBackoff(), ns3::WifiMac::GetChannelAccessManager(), ns3::WifiMac::GetMacQueueScheduler(), m_mac, m_queue, ns3::ChannelAccessManager::NeedBackoffUponAccess(), NS_LOG_FUNCTION, and StartAccessIfNeeded().
|
protected |
Request access to the ChannelAccessManager associated with the given link.
linkId | the ID of the given link |
Definition at line 614 of file txop.cc.
References ns3::WifiMac::GetChannelAccessManager(), GetLink(), m_mac, NOT_REQUESTED, NS_LOG_FUNCTION, and ns3::ChannelAccessManager::RequestAccess().
Referenced by NotifyChannelReleased().
void ns3::Txop::ResetCw | ( | uint8_t | linkId | ) |
Update the value of the CW variable for the given link 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).
By default, this resets the CW variable to minCW.
linkId | the ID of the given link |
Definition at line 304 of file txop.cc.
References GetLink(), GetMinCw(), m_cwTrace, and NS_LOG_FUNCTION.
Referenced by ns3::HtFrameExchangeManager::BlockAckTimeout(), ns3::HeFrameExchangeManager::CtsAfterMuRtsTimeout(), ns3::FrameExchangeManager::DoCtsTimeout(), DoInitialize(), ns3::FrameExchangeManager::NormalAckTimeout(), ns3::FrameExchangeManager::ReceivedNormalAck(), ns3::HtFrameExchangeManager::ReceiveMpdu(), SetMaxCw(), and SetMinCw().
void ns3::Txop::SetAifsn | ( | uint8_t | aifsn | ) |
Set the number of slots that make up an AIFS.
For 11be multi-link devices, set the number of slots that make up an AIFS on the first link.
aifsn | the number of slots that make up an AIFS. |
Definition at line 366 of file txop.cc.
References SetAifsn().
Referenced by ns3::MeshWifiInterfaceMac::ConfigureContentionWindow(), GetTypeId(), SetAifsn(), and SetAifsns().
void ns3::Txop::SetAifsn | ( | uint8_t | aifsn, |
uint8_t | linkId | ||
) |
Set the number of slots that make up an AIFS for the given link.
aifsn | the number of slots that make up an AIFS. |
linkId | the ID of the given link |
Definition at line 383 of file txop.cc.
References ns3::Txop::LinkEntity::aifsn, GetLink(), and NS_LOG_FUNCTION.
void ns3::Txop::SetAifsns | ( | std::vector< uint8_t > | aifsns | ) |
Set the number of slots that make up an AIFS for each link.
Note that the size of aifsns must match the number of links.
aifsns | the number of slots that make up an AIFS for each link. |
Definition at line 372 of file txop.cc.
References m_links, NS_ABORT_IF, and SetAifsn().
Referenced by ns3::ApWifiMac::ConfigureStandard(), and GetTypeId().
|
virtual |
callback | the callback to invoke when an MPDU is dropped |
Reimplemented in ns3::QosTxop.
Definition at line 220 of file txop.cc.
References ns3::Callback< R, UArgs >::Bind(), m_droppedMpduCallback, m_queue, NS_LOG_FUNCTION, ns3::WIFI_MAC_DROP_EXPIRED_LIFETIME, and ns3::WIFI_MAC_DROP_FAILED_ENQUEUE.
Referenced by ns3::QosTxop::SetDroppedMpduCallback(), and ns3::WifiMac::SetQosSupported().
void ns3::Txop::SetMaxCw | ( | uint32_t | maxCw | ) |
Set the maximum contention window size.
For 11be multi-link devices, set the maximum contention window size on the first link.
maxCw | the maximum contention window size. |
Definition at line 268 of file txop.cc.
References SetMaxCw().
Referenced by ns3::MeshWifiInterfaceMac::ConfigureContentionWindow(), GetTypeId(), SetMaxCw(), and SetMaxCws().
void ns3::Txop::SetMaxCw | ( | uint32_t | maxCw, |
uint8_t | linkId | ||
) |
Set the maximum contention window size for the given link.
maxCw | the maximum contention window size. |
linkId | the ID of the given link |
Definition at line 285 of file txop.cc.
References GetLink(), NS_LOG_FUNCTION, and ResetCw().
void ns3::Txop::SetMaxCws | ( | std::vector< uint32_t > | maxCws | ) |
Set the maximum contention window size for each link.
Note that the size of maxCws must match the number of links.
maxCws | the maximum contention window size values. |
Definition at line 274 of file txop.cc.
References m_links, NS_ABORT_IF, and SetMaxCw().
Referenced by ns3::ApWifiMac::ConfigureStandard(), and GetTypeId().
void ns3::Txop::SetMinCw | ( | uint32_t | minCw | ) |
Set the minimum contention window size.
For 11be multi-link devices, set the minimum contention window size on the first link.
minCw | the minimum contention window size. |
Definition at line 238 of file txop.cc.
References SetMinCw().
Referenced by ns3::MeshWifiInterfaceMac::ConfigureContentionWindow(), GetTypeId(), SetMinCw(), and SetMinCws().
void ns3::Txop::SetMinCw | ( | uint32_t | minCw, |
uint8_t | linkId | ||
) |
Set the minimum contention window size for the given link.
minCw | the minimum contention window size. |
linkId | the ID of the given link |
Definition at line 255 of file txop.cc.
References GetLink(), NS_LOG_FUNCTION, and ResetCw().
void ns3::Txop::SetMinCws | ( | std::vector< uint32_t > | minCws | ) |
Set the minimum contention window size for each link.
Note that the size of minCws must match the number of links.
minCws | the minimum contention window size values. |
Definition at line 244 of file txop.cc.
References m_links, NS_ABORT_IF, and SetMinCw().
Referenced by ns3::ApWifiMac::ConfigureStandard(), and GetTypeId().
void ns3::Txop::SetTxMiddle | ( | const Ptr< MacTxMiddle > | txMiddle | ) |
Set MacTxMiddle this Txop is associated to.
txMiddle | MacTxMiddle to associate. |
Definition at line 202 of file txop.cc.
References m_txMiddle, and NS_LOG_FUNCTION.
Referenced by ns3::ApWifiMac::ApWifiMac(), ns3::MeshWifiInterfaceMac::ConfigureContentionWindow(), and ns3::WifiMac::SetQosSupported().
void ns3::Txop::SetTxopLimit | ( | Time | txopLimit | ) |
Set the TXOP limit.
txopLimit | the TXOP limit. Value zero corresponds to default Txop. |
Definition at line 390 of file txop.cc.
References SetTxopLimit().
Referenced by GetTypeId(), SetTxopLimit(), and SetTxopLimits().
void ns3::Txop::SetTxopLimit | ( | Time | txopLimit, |
uint8_t | linkId | ||
) |
Set the TXOP limit for the given link.
txopLimit | the TXOP limit. Value zero corresponds to default Txop. |
linkId | the ID of the given link |
Definition at line 410 of file txop.cc.
References GetLink(), ns3::Time::GetMicroSeconds(), NS_ASSERT_MSG, NS_LOG_FUNCTION, and ns3::Txop::LinkEntity::txopLimit.
void ns3::Txop::SetTxopLimits | ( | const std::vector< Time > & | txopLimits | ) |
Set the TXOP limit for each link.
Note that the size of txopLimits must match the number of links.
txopLimits | the TXOP limit for each link. |
Definition at line 396 of file txop.cc.
References m_links, NS_ABORT_MSG_IF, and SetTxopLimit().
Referenced by EmlsrDlTxopTest::DoSetup(), and GetTypeId().
Set the wifi MAC this Txop is associated to.
mac | associated wifi MAC |
Definition at line 209 of file txop.cc.
References CreateLinkEntity(), ns3::WifiMac::GetLinkIds(), m_links, m_mac, and NS_LOG_FUNCTION.
Referenced by ns3::MeshWifiInterfaceMac::ConfigureContentionWindow(), ns3::WifiMac::ConfigureStandard(), and ns3::ApWifiMac::ConfigureStandard().
|
protectedvirtual |
Request access from Txop on the given link if needed.
linkId | the ID of the given link |
Definition at line 561 of file txop.cc.
References ns3::WifiMac::GetChannelAccessManager(), GetLink(), HasFramesToTransmit(), m_mac, NOT_REQUESTED, NS_LOG_FUNCTION, and ns3::ChannelAccessManager::RequestAccess().
Referenced by ns3::QosTxop::GotAddBaResponse(), NotifyOn(), ns3::QosTxop::NotifyOriginatorAgreementNoReply(), NotifyWakeUp(), and Queue().
void ns3::Txop::StartBackoffNow | ( | uint32_t | nSlots, |
uint8_t | linkId | ||
) |
nSlots | the number of slots of the backoff. |
linkId | the ID of the given link |
Start a backoff for the given link by initializing the backoff counter to the number of slots specified.
Definition at line 348 of file txop.cc.
References GetLink(), ns3::Simulator::Now(), NS_LOG_DEBUG, and NS_LOG_FUNCTION.
Referenced by GenerateBackoff().
void ns3::Txop::SwapLinks | ( | std::map< uint8_t, uint8_t > | links | ) |
Swap the links based on the information included in the given map.
This method is normally called by the WifiMac of a non-AP MLD upon completing ML setup to have its link IDs match AP MLD's link IDs.
links | a set of pairs (from, to) each mapping a current link ID to the link ID it has to become (i.e., link 'from' becomes link 'to') |
Definition at line 185 of file txop.cc.
References m_links, and NS_LOG_FUNCTION.
Referenced by ns3::WifiMac::SwapLinks().
|
protected |
Update backoff slots for the given link that nSlots has passed.
nSlots | the number of slots to decrement |
backoffUpdateBound | the time at which backoff should start |
linkId | the ID of the given link |
Definition at line 337 of file txop.cc.
References GetLink(), NS_LOG_DEBUG, and NS_LOG_FUNCTION.
void ns3::Txop::UpdateFailedCw | ( | uint8_t | linkId | ) |
Update the value of the CW variable for the given link to take into account a transmission failure.
By default, this triggers a doubling of CW (capped by maxCW).
linkId | the ID of the given link |
Definition at line 313 of file txop.cc.
References GetLink(), GetMaxCw(), GetMinCw(), m_cwTrace, and NS_LOG_FUNCTION.
Referenced by ns3::HtFrameExchangeManager::BlockAckTimeout(), ns3::HeFrameExchangeManager::CtsAfterMuRtsTimeout(), ns3::FrameExchangeManager::DoCtsTimeout(), and ns3::FrameExchangeManager::NormalAckTimeout().
|
friend |
< ChannelAccessManager associated class
|
protected |
backoff trace value
Definition at line 534 of file txop.h.
Referenced by GenerateBackoff(), and GetTypeId().
|
protected |
CW trace value.
Definition at line 535 of file txop.h.
Referenced by GetTypeId(), ResetCw(), and UpdateFailedCw().
|
protected |
the dropped MPDU callback
Definition at line 523 of file txop.h.
Referenced by ns3::QosTxop::PeekNextMpdu(), and SetDroppedMpduCallback().
|
private |
ID-indexed map of LinkEntity objects.
Definition at line 546 of file txop.h.
Referenced by DoDispose(), DoInitialize(), GetAifsns(), GetLink(), GetLinks(), GetMaxCws(), GetMinCws(), GetTxopLimits(), NotifyOn(), SetAifsns(), SetMaxCws(), SetMinCws(), SetTxopLimits(), SetWifiMac(), and SwapLinks().
the wifi MAC
Definition at line 526 of file txop.h.
Referenced by ns3::QosTxop::QosTxop(), ns3::QosTxop::CompleteMpduTx(), DoDispose(), ns3::QosTxop::GetNextMpdu(), ns3::QosTxop::IsQosOldPacket(), ns3::QosTxop::PeekNextMpdu(), ns3::QosTxop::PrepareBlockAckRequest(), Queue(), RequestAccess(), SetWifiMac(), StartAccessIfNeeded(), and ns3::QosTxop::StartMuEdcaTimerNow().
|
protected |
the wifi MAC queue
Definition at line 524 of file txop.h.
Referenced by ns3::QosTxop::QosTxop(), ns3::QosTxop::AssignSequenceNumber(), ns3::QosTxop::CompleteMpduTx(), DoDispose(), ns3::QosTxop::GetQosQueueSize(), GetWifiMacQueue(), ns3::QosTxop::GotAddBaResponse(), HasFramesToTransmit(), ns3::QosTxop::HasFramesToTransmit(), NotifyOff(), ns3::QosTxop::PeekNextMpdu(), Queue(), and SetDroppedMpduCallback().
|
protected |
the random stream
Definition at line 527 of file txop.h.
Referenced by Txop(), AssignStreams(), DoDispose(), and GenerateBackoff().
|
protected |
the MacTxMiddle
Definition at line 525 of file txop.h.
Referenced by ns3::QosTxop::AssignSequenceNumber(), DoDispose(), ns3::QosTxop::GetNextSequenceNumberFor(), ns3::QosTxop::GotAddBaResponse(), ns3::QosTxop::PeekNextMpdu(), ns3::QosTxop::PeekNextSequenceNumberFor(), and SetTxMiddle().