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 | UpdateFailedCw (uint8_t linkId) |
Update the value of the CW variable for the given link to take into account a transmission failure. | |
Public Member Functions inherited from ns3::Object | |
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. | |
Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter > | |
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. | |
Public Member Functions inherited from ns3::ObjectBase | |
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 Public Member Functions inherited from ns3::Object | |
static TypeId | GetTypeId () |
Register this type. | |
Static Public Member Functions inherited from ns3::ObjectBase | |
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. | |
uint8_t | GetNLinks () const |
Get the number of links. | |
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. | |
Protected Member Functions inherited from ns3::Object | |
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. | |
Protected Member Functions inherited from ns3::ObjectBase | |
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::vector< std::unique_ptr< LinkEntity > > | m_links |
vector of LinkEntity objects | |
Friends | |
class | ChannelAccessManager |
< ChannelAccessManager associated class | |
Additional Inherited Members | |
Related Functions inherited from ns3::ObjectBase | |
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 128 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 530 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 548 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 601 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 559 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 446 of file txop.cc.
References GetAifsn().
Referenced by WifiTxopTest::DoRun(), GetAifsn(), GetAifsns(), 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 463 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 452 of file txop.cc.
References GetAifsn(), and 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 308 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 314 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 281 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().
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 423 of file txop.cc.
References GetMaxCw().
Referenced by GetMaxCw(), GetMaxCws(), 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 440 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 429 of file txop.cc.
References GetMaxCw(), and 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 400 of file txop.cc.
References GetMinCw().
Referenced by WifiTxopTest::DoRun(), GetMinCw(), GetMinCws(), 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 417 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 406 of file txop.cc.
References GetMinCw(), and m_links.
Referenced by GetTypeId().
|
protected |
Get the number of links.
Definition at line 178 of file txop.cc.
References m_links.
Referenced by ns3::QosTxop::GotAddBaResponse(), and ns3::QosTxop::NotifyOriginatorAgreementNoReply().
Time ns3::Txop::GetTxopLimit | ( | ) | const |
Return the TXOP limit.
Definition at line 469 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(), GetTxopLimits(), 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 486 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 475 of file txop.cc.
References GetTxopLimit(), and 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 216 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 492 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 565 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 572 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 579 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 616 of file txop.cc.
References m_queue, and NS_LOG_FUNCTION.
|
virtual |
When on operation occurs, channel access will be started.
Definition at line 630 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 610 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 623 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 501 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 511 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 591 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 287 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 349 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 365 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 355 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 205 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 252 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 268 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 258 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 223 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 239 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 229 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 184 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 372 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 391 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 378 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 191 of file txop.cc.
References CreateLinkEntity(), ns3::WifiMac::GetNLinks(), 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 538 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 331 of file txop.cc.
References GetLink(), ns3::Simulator::Now(), NS_LOG_DEBUG, and NS_LOG_FUNCTION.
Referenced by GenerateBackoff().
|
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 320 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 296 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 525 of file txop.h.
Referenced by GenerateBackoff(), and GetTypeId().
|
protected |
CW trace value.
Definition at line 526 of file txop.h.
Referenced by GetTypeId(), ResetCw(), and UpdateFailedCw().
|
protected |
the dropped MPDU callback
Definition at line 514 of file txop.h.
Referenced by ns3::QosTxop::PeekNextMpdu(), and SetDroppedMpduCallback().
|
private |
vector of LinkEntity objects
Definition at line 536 of file txop.h.
Referenced by DoDispose(), DoInitialize(), GetAifsns(), GetLink(), GetMaxCws(), GetMinCws(), GetNLinks(), GetTxopLimits(), NotifyOn(), SetAifsns(), SetMaxCws(), SetMinCws(), SetTxopLimits(), and SetWifiMac().
the wifi MAC
Definition at line 517 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 515 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 518 of file txop.h.
Referenced by Txop(), AssignStreams(), DoDispose(), and GenerateBackoff().
|
protected |
the MacTxMiddle
Definition at line 516 of file txop.h.
Referenced by ns3::QosTxop::AssignSequenceNumber(), DoDispose(), ns3::QosTxop::GetNextSequenceNumberFor(), ns3::QosTxop::GotAddBaResponse(), ns3::QosTxop::PeekNextMpdu(), ns3::QosTxop::PeekNextSequenceNumberFor(), and SetTxMiddle().