11#include "ns3/ap-emlsr-manager.h"
12#include "ns3/boolean.h"
13#include "ns3/eht-configuration.h"
14#include "ns3/emlsr-manager.h"
16#include "ns3/frame-exchange-manager.h"
17#include "ns3/gcr-manager.h"
18#include "ns3/multi-user-scheduler.h"
19#include "ns3/pointer.h"
20#include "ns3/wifi-ack-manager.h"
21#include "ns3/wifi-assoc-manager.h"
22#include "ns3/wifi-mac-queue-scheduler.h"
23#include "ns3/wifi-net-device.h"
24#include "ns3/wifi-protection-manager.h"
37 m_dcf.SetTypeId(
"ns3::Txop");
40 auto [it, inserted] =
m_edca.try_emplace(aci);
41 it->second.SetTypeId(
"ns3::QosTxop");
80 for (
auto [aci, edca] :
m_edca)
85 auto s = ss.str().substr(3);
91 auto nLinks = std::max<uint8_t>(device->GetNPhys(), 1);
94 std::vector<Ptr<ChannelAccessManager>> caManagers;
95 caManagers.reserve(nLinks);
96 for (uint8_t linkId = 0; linkId < nLinks; ++linkId)
102 mac->SetDevice(device);
105 mac->SetChannelAccessManagers(caManagers);
108 std::vector<Ptr<FrameExchangeManager>> feManagers;
110 frameExchangeManager.SetTypeId(
112 for (uint8_t linkId = 0; linkId < nLinks; ++linkId)
115 feManagers.emplace_back(fem);
119 protectionManager->SetLinkId(linkId);
120 fem->SetProtectionManager(protectionManager);
124 ackManager->SetLinkId(linkId);
125 fem->SetAckManager(ackManager);
131 mac->SetFrameExchangeManagers(feManagers);
134 mac->SetMacQueueScheduler(queueScheduler);
149 staMac->SetAssocManager(assocManager);
155 device->GetEhtConfiguration()->m_emlsrActivated &&
159 staMac->SetEmlsrManager(emlsrManager);
164 device->GetEhtConfiguration()->m_emlsrActivated)
167 apMac->SetApEmlsrManager(apEmlsrManager);
171 if (apMac && apMac->GetRobustAVStreamingSupported() &&
m_gcrManager.IsTypeIdSet())
174 apMac->SetGcrManager(gcrManager);
ApEmlsrManager is an abstract base class defining the API that EHT AP MLDs with EMLSR activated can u...
Manage a set of ns3::Txop.
EmlsrManager is an abstract base class defining the API that EHT non-AP MLDs with EMLSR activated can...
Hold variables of type enum.
FrameExchangeManager is a base class handling the basic frame exchange sequences for non-QoS stations...
GcrManager is a base class defining the API to handle 802.11aa GCR.
static Mac48Address Allocate()
Allocate a new Mac48Address.
MultiUserScheduler is an abstract base class defining the API that APs supporting at least VHT can us...
Instantiate subclasses of ns3::Object.
Ptr< Object > Create() const
Create an Object instance of the configured TypeId.
void Set(const std::string &name, const AttributeValue &value, Args &&... args)
Set an attribute to be set during construction.
void AggregateObject(Ptr< Object > other)
Aggregate two Objects together.
AttributeValue implementation for Pointer.
Smart pointer class similar to boost::intrusive_ptr.
Handles the packet queue and stores DCF/EDCA access parameters (one Txop per AC).
Handles the packet queue and stores DCF/EDCA access parameters (one Txop per AC).
WifiAckManager is an abstract base class.
void SetWifiMac(Ptr< WifiMac > mac)
Set the MAC which is using this Acknowledgment Manager.
Abstract base class for the Association Manager, which manages scanning and association for single li...
ObjectFactory m_apEmlsrManager
AP EMLSR Manager object factory.
std::map< AcIndex, ObjectFactory, std::greater<> > m_edca
QosTxop (EDCA) object factories.
ObjectFactory m_mac
MAC object factory.
ObjectFactory m_queueScheduler
MAC queue scheduler.
virtual ~WifiMacHelper()
Destroy a WifiMacHelper.
virtual Ptr< WifiMac > Create(Ptr< WifiNetDevice > device, WifiStandard standard) const
ObjectFactory m_protectionManager
Factory to create a protection manager.
ObjectFactory m_muScheduler
Multi-user Scheduler object factory.
ObjectFactory m_assocManager
Association Manager.
WifiMacHelper()
Create a WifiMacHelper to make life easier for people who want to work with Wifi MAC layers.
ObjectFactory m_emlsrManager
EMLSR Manager object factory.
ObjectFactory m_dcf
Txop (DCF) object factory.
ObjectFactory m_ackManager
Factory to create an acknowledgment manager.
void SetType(std::string type, Args &&... args)
ObjectFactory m_frameExchangeManager
Frame Exchange Manager object factory.
ObjectFactory m_channelAccessManager
Channel Access Manager object factory.
ObjectFactory m_gcrManager
GCR Manager object factory.
base class for all MAC-level wifi objects.
WifiMacQueueScheduler is an abstract base class defining the public interface for a wifi MAC queue sc...
WifiProtectionManager is an abstract base class.
void SetWifiMac(Ptr< WifiMac > mac)
Set the MAC which is using this Protection Manager.
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message.
WifiStandard
Identifies the IEEE 802.11 specifications that a Wifi device can be configured to use.
@ WIFI_STANDARD_UNSPECIFIED
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::string GetFrameExchangeManagerTypeIdName(WifiStandard standard, bool qosSupported)
Get the TypeId name for the FrameExchangeManager corresponding to the given standard.
Ptr< T1 > DynamicCast(const Ptr< T2 > &p)
Cast a Ptr.
const std::map< AcIndex, WifiAc > wifiAcList
Map containing the four ACs in increasing order of priority (according to Table 10-1 "UP-to-AC Mappin...