22 #include "ns3/pointer.h"
23 #include "ns3/packet.h"
33 #include "ns3/ht-configuration.h"
34 #include "ns3/vht-configuration.h"
35 #include "ns3/he-configuration.h"
38 #include "ns3/he-frame-exchange-manager.h"
60 m_txop = CreateObject<Txop> ();
86 for (EdcaQueues::const_iterator i =
m_edca.begin (); i !=
m_edca.end (); ++i)
88 i->second->Initialize ();
111 for (EdcaQueues::iterator i =
m_edca.begin (); i !=
m_edca.end (); ++i)
130 m_feManager = CreateObject<HeFrameExchangeManager> ();
134 m_feManager = CreateObject<VhtFrameExchangeManager> ();
138 m_feManager = CreateObject<HtFrameExchangeManager> ();
142 m_feManager = CreateObject<QosFrameExchangeManager> ();
146 m_feManager = CreateObject<FrameExchangeManager> ();
154 m_feManager->GetWifiTxTimer ().SetMpduResponseTimeoutCallback (
MakeCallback (&MpduResponseTimeoutTracedCallback::operator(),
156 m_feManager->GetWifiTxTimer ().SetPsduResponseTimeoutCallback (
MakeCallback (&PsduResponseTimeoutTracedCallback::operator(),
158 m_feManager->GetWifiTxTimer ().SetPsduMapResponseTimeoutCallback (
MakeCallback (&PsduMapResponseTimeoutTracedCallback::operator(),
167 for (
const auto& pair :
m_edca)
169 pair.second->SetQosFrameExchangeManager (DynamicCast<QosFrameExchangeManager> (
m_feManager));
186 for (EdcaQueues::const_iterator i =
m_edca.begin (); i !=
m_edca.end (); ++i)
188 i->second->SetWifiRemoteStationManager (stationManager);
217 bool sgiSupported = htConfiguration->GetShortGuardIntervalSupported ();
219 capabilities.
SetLdpc (htConfiguration->GetLdpcSupported ());
226 if (maxAmsduSize <= 3839)
237 maxAmpduLength = (1ul <<
static_cast<uint32_t
> (std::ceil (std::log2 (maxAmpduLength + 1)))) - 1;
242 uint64_t maxSupportedRate = 0;
246 uint8_t nss = (mcs.GetMcsValue () / 8) + 1;
249 if (dataRate > maxSupportedRate)
251 maxSupportedRate = dataRate;
252 NS_LOG_DEBUG (
"Updating maxSupportedRate to " << maxSupportedRate);
274 bool sgiSupported = htConfiguration->GetShortGuardIntervalSupported ();
287 if (maxAmsduSize <= 3839)
291 else if (maxAmsduSize <= 7935)
302 maxAmpduLength = (1ul <<
static_cast<uint32_t
> (std::ceil (std::log2 (maxAmpduLength + 1)))) - 1;
306 capabilities.
SetRxLdpc (htConfiguration->GetLdpcSupported ());
312 if (mcs.GetMcsValue () > maxMcs)
314 maxMcs = mcs.GetMcsValue ();
326 uint64_t maxSupportedRateLGI = 0;
336 NS_LOG_DEBUG (
"Updating maxSupportedRateLGI to " << maxSupportedRateLGI);
358 uint8_t channelWidthSet = 0;
361 channelWidthSet |= 0x01;
365 channelWidthSet |= 0x02;
369 channelWidthSet |= 0x04;
374 if (heConfiguration->GetGuardInterval () <=
NanoSeconds (1600))
379 if (heConfiguration->GetGuardInterval () ==
NanoSeconds (800))
387 maxAmpduLength = (1ul <<
static_cast<uint32_t
> (std::ceil (std::log2 (maxAmpduLength + 1)))) - 1;
394 if (mcs.GetMcsValue () > maxMcs)
396 maxMcs = mcs.GetMcsValue ();
481 m_edca.insert (std::make_pair (ac, edca));
506 return m_edca.find (ac)->second;
739 <<
") does not support Enqueue() with from address");
803 htFem->SendAddBaResponse (&reqHdr, from);
820 m_edca[ac]->GotAddBaResponse (&respHdr, from);
839 htFem->DestroyBlockAckAgreement (from, delBaHdr.
GetTid ());
848 m_edca[ac]->GotDelBaFrame (&delBaHdr, from);
854 NS_FATAL_ERROR (
"Unsupported Action field in Block Ack Action frame");
871 ForwardUp (msduPair.first, msduPair.second.GetSourceAddr (),
872 msduPair.second.GetDestinationAddr ());
881 .SetGroupName (
"Wifi")
882 .AddAttribute (
"QosSupported",
883 "This Boolean attribute is set to enable 802.11e/WMM-style QoS support at this STA.",
888 .AddAttribute (
"CtsToSelfSupported",
889 "Use CTS to Self when using a rate that is not in the basic rate set.",
893 .AddAttribute (
"VO_MaxAmsduSize",
894 "Maximum length in bytes of an A-MSDU for AC_VO access class "
895 "(capped to 7935 for HT PPDUs and 11398 for VHT/HE PPDUs). "
896 "Value 0 means A-MSDU aggregation is disabled for that AC.",
899 MakeUintegerChecker<uint16_t> (0, 11398))
900 .AddAttribute (
"VI_MaxAmsduSize",
901 "Maximum length in bytes of an A-MSDU for AC_VI access class "
902 "(capped to 7935 for HT PPDUs and 11398 for VHT/HE PPDUs). "
903 "Value 0 means A-MSDU aggregation is disabled for that AC.",
906 MakeUintegerChecker<uint16_t> (0, 11398))
907 .AddAttribute (
"BE_MaxAmsduSize",
908 "Maximum length in bytes of an A-MSDU for AC_BE access class "
909 "(capped to 7935 for HT PPDUs and 11398 for VHT/HE PPDUs). "
910 "Value 0 means A-MSDU aggregation is disabled for that AC.",
913 MakeUintegerChecker<uint16_t> (0, 11398))
914 .AddAttribute (
"BK_MaxAmsduSize",
915 "Maximum length in bytes of an A-MSDU for AC_BK access class "
916 "(capped to 7935 for HT PPDUs and 11398 for VHT/HE PPDUs). "
917 "Value 0 means A-MSDU aggregation is disabled for that AC.",
920 MakeUintegerChecker<uint16_t> (0, 11398))
921 .AddAttribute (
"VO_MaxAmpduSize",
922 "Maximum length in bytes of an A-MPDU for AC_VO access class "
923 "(capped to 65535 for HT PPDUs, 1048575 for VHT PPDUs, and 6500631 for HE PPDUs). "
924 "Value 0 means A-MPDU aggregation is disabled for that AC.",
927 MakeUintegerChecker<uint32_t> (0, 6500631))
928 .AddAttribute (
"VI_MaxAmpduSize",
929 "Maximum length in bytes of an A-MPDU for AC_VI access class "
930 "(capped to 65535 for HT PPDUs, 1048575 for VHT PPDUs, and 6500631 for HE PPDUs). "
931 "Value 0 means A-MPDU aggregation is disabled for that AC.",
934 MakeUintegerChecker<uint32_t> (0, 6500631))
935 .AddAttribute (
"BE_MaxAmpduSize",
936 "Maximum length in bytes of an A-MPDU for AC_BE access class "
937 "(capped to 65535 for HT PPDUs, 1048575 for VHT PPDUs, and 6500631 for HE PPDUs). "
938 "Value 0 means A-MPDU aggregation is disabled for that AC.",
941 MakeUintegerChecker<uint32_t> (0, 6500631))
942 .AddAttribute (
"BK_MaxAmpduSize",
943 "Maximum length in bytes of an A-MPDU for AC_BK access class "
944 "(capped to 65535 for HT PPDUs, 1048575 for VHT PPDUs, and 6500631 for HE PPDUs). "
945 "Value 0 means A-MPDU aggregation is disabled for that AC.",
948 MakeUintegerChecker<uint32_t> (0, 6500631))
949 .AddAttribute (
"VO_BlockAckThreshold",
950 "If number of packets in VO queue reaches this value, "
951 "block ack mechanism is used. If this value is 0, block ack is never used."
952 "When A-MPDU is enabled, block ack mechanism is used regardless of this value.",
955 MakeUintegerChecker<uint8_t> (0, 64))
956 .AddAttribute (
"VI_BlockAckThreshold",
957 "If number of packets in VI queue reaches this value, "
958 "block ack mechanism is used. If this value is 0, block ack is never used."
959 "When A-MPDU is enabled, block ack mechanism is used regardless of this value.",
962 MakeUintegerChecker<uint8_t> (0, 64))
963 .AddAttribute (
"BE_BlockAckThreshold",
964 "If number of packets in BE queue reaches this value, "
965 "block ack mechanism is used. If this value is 0, block ack is never used."
966 "When A-MPDU is enabled, block ack mechanism is used regardless of this value.",
969 MakeUintegerChecker<uint8_t> (0, 64))
970 .AddAttribute (
"BK_BlockAckThreshold",
971 "If number of packets in BK queue reaches this value, "
972 "block ack mechanism is used. If this value is 0, block ack is never used."
973 "When A-MPDU is enabled, block ack mechanism is used regardless of this value.",
976 MakeUintegerChecker<uint8_t> (0, 64))
977 .AddAttribute (
"VO_BlockAckInactivityTimeout",
978 "Represents max time (blocks of 1024 microseconds) allowed for block ack"
979 "inactivity for AC_VO. If this value isn't equal to 0 a timer start after that a"
980 "block ack setup is completed and will be reset every time that a block ack"
981 "frame is received. If this value is 0, block ack inactivity timeout won't be used.",
984 MakeUintegerChecker<uint16_t> ())
985 .AddAttribute (
"VI_BlockAckInactivityTimeout",
986 "Represents max time (blocks of 1024 microseconds) allowed for block ack"
987 "inactivity for AC_VI. If this value isn't equal to 0 a timer start after that a"
988 "block ack setup is completed and will be reset every time that a block ack"
989 "frame is received. If this value is 0, block ack inactivity timeout won't be used.",
992 MakeUintegerChecker<uint16_t> ())
993 .AddAttribute (
"BE_BlockAckInactivityTimeout",
994 "Represents max time (blocks of 1024 microseconds) allowed for block ack"
995 "inactivity for AC_BE. If this value isn't equal to 0 a timer start after that a"
996 "block ack setup is completed and will be reset every time that a block ack"
997 "frame is received. If this value is 0, block ack inactivity timeout won't be used.",
1000 MakeUintegerChecker<uint16_t> ())
1001 .AddAttribute (
"BK_BlockAckInactivityTimeout",
1002 "Represents max time (blocks of 1024 microseconds) allowed for block ack"
1003 "inactivity for AC_BK. If this value isn't equal to 0 a timer start after that a"
1004 "block ack setup is completed and will be reset every time that a block ack"
1005 "frame is received. If this value is 0, block ack inactivity timeout won't be used.",
1008 MakeUintegerChecker<uint16_t> ())
1009 .AddAttribute (
"ShortSlotTimeSupported",
1010 "Whether or not short slot time is supported (only used by ERP APs or STAs).",
1015 .AddAttribute (
"Txop",
1019 MakePointerChecker<Txop> ())
1020 .AddAttribute (
"VO_Txop",
1021 "Queue that manages packets belonging to AC_VO access class.",
1024 MakePointerChecker<QosTxop> ())
1025 .AddAttribute (
"VI_Txop",
1026 "Queue that manages packets belonging to AC_VI access class.",
1029 MakePointerChecker<QosTxop> ())
1030 .AddAttribute (
"BE_Txop",
1031 "Queue that manages packets belonging to AC_BE access class.",
1034 MakePointerChecker<QosTxop> ())
1035 .AddAttribute (
"BK_Txop",
1036 "Queue that manages packets belonging to AC_BK access class.",
1039 MakePointerChecker<QosTxop> ())
1040 .AddTraceSource (
"TxOkHeader",
1041 "The header of successfully transmitted packet.",
1043 "ns3::WifiMacHeader::TracedCallback",
1045 "Use the AckedMpdu trace instead.")
1046 .AddTraceSource (
"TxErrHeader",
1047 "The header of unsuccessfully transmitted packet.",
1049 "ns3::WifiMacHeader::TracedCallback",
1051 "Depending on the failure type, use the NAckedMpdu trace, the "
1052 "DroppedMpdu trace or one of the traces associated with TX timeouts.")
1053 .AddTraceSource (
"AckedMpdu",
1054 "An MPDU that was successfully acknowledged, via either a "
1055 "Normal Ack or a Block Ack.",
1057 "ns3::WifiMacQueueItem::TracedCallback")
1058 .AddTraceSource (
"NAckedMpdu",
1059 "An MPDU that was negatively acknowledged via a Block Ack.",
1061 "ns3::WifiMacQueueItem::TracedCallback")
1062 .AddTraceSource (
"DroppedMpdu",
1063 "An MPDU that was dropped for the given reason (see WifiMacDropReason).",
1065 "ns3::RegularWifiMac::DroppedMpduCallback")
1066 .AddTraceSource (
"MpduResponseTimeout",
1067 "An MPDU whose response was not received before the timeout, along with "
1068 "an identifier of the type of timeout (see WifiTxTimer::Reason) and the "
1069 "TXVECTOR used to transmit the MPDU. This trace source is fired when a "
1070 "CTS is missing after an RTS or a Normal Ack is missing after an MPDU "
1071 "or after a DL MU PPDU acknowledged in SU format.",
1073 "ns3::RegularWifiMac::MpduResponseTimeoutCallback")
1074 .AddTraceSource (
"PsduResponseTimeout",
1075 "A PSDU whose response was not received before the timeout, along with "
1076 "an identifier of the type of timeout (see WifiTxTimer::Reason) and the "
1077 "TXVECTOR used to transmit the PSDU. This trace source is fired when a "
1078 "BlockAck is missing after an A-MPDU, a BlockAckReq (possibly in the "
1079 "context of the acknowledgment of a DL MU PPDU in SU format) or a TB PPDU "
1080 "(in the latter case the missing BlockAck is a Multi-STA BlockAck).",
1082 "ns3::RegularWifiMac::PsduResponseTimeoutCallback")
1083 .AddTraceSource (
"PsduMapResponseTimeout",
1084 "A PSDU map for which not all the responses were received before the timeout, "
1085 "along with an identifier of the type of timeout (see WifiTxTimer::Reason), "
1086 "the set of MAC addresses of the stations that did not respond and the total "
1087 "number of stations that had to respond. This trace source is fired when not "
1088 "all the addressed stations responded to an MU-BAR Trigger frame (either sent as "
1089 "a SU frame or aggregated to PSDUs in the DL MU PPDU), a Basic Trigger Frame or "
1090 "a BSRP Trigger Frame.",
1092 "ns3::RegularWifiMac::PsduMapResponseTimeoutCallback")
1133 NS_FATAL_ERROR (
"Unsupported WifiPhyStandard in RegularWifiMac::FinishConfigureStandard ()");
1149 for (EdcaQueues::const_iterator i =
m_edca.begin (); i !=
m_edca.end (); ++i)
1151 ConfigureDcf (i->second, cwMin, cwMax, isDsssOnly, i->first);
AttributeValue implementation for Boolean.
The Extended Capabilities Information Element.
void SetHtSupported(uint8_t htSupported)
Set the HT Supported flag.
void SetVhtSupported(uint8_t vhtSupported)
Set the VHT Supported flag.
The IEEE 802.11ax HE Capabilities.
void SetLdpcCodingInPayload(uint8_t ldpcCodingInPayload)
Set indication whether the transmission and reception of LDPC encoded packets is supported.
void SetHeSupported(uint8_t heSupported)
Set HE supported.
void SetHighestNssSupported(uint8_t nss)
Set highest NSS supported.
void SetMaxAmpduLength(uint32_t maxAmpduLength)
Set the maximum AMPDU length.
void SetChannelWidthSet(uint8_t channelWidthSet)
Set channel width set.
void SetHeLtfAndGiForHePpdus(uint8_t heLtfAndGiForHePpdus)
Set HE LTF and GI for HE PDPUs.
void SetHighestMcsSupported(uint8_t mcs)
Set highest MCS supported.
The HT Capabilities Information Element.
void SetLdpc(uint8_t ldpc)
Set the LDPC field.
void SetTxRxMcsSetUnequal(uint8_t txRxMcsSetUnequal)
Set the transmit / receive MCS set unequal.
void SetRxHighestSupportedDataRate(uint16_t maxSupportedRate)
Set the receive highest supported data rate.
void SetLSigProtectionSupport(uint8_t lSigProtection)
Set the LSIG protection support.
void SetMaxAmsduLength(uint16_t maxAmsduLength)
Set the maximum AMSDU length.
void SetTxMaxNSpatialStreams(uint8_t maxTxSpatialStreams)
Set the transmit maximum N spatial streams.
void SetShortGuardInterval20(uint8_t shortGuardInterval)
Set the short guard interval 20 field.
void SetTxUnequalModulation(uint8_t txUnequalModulation)
Set the transmit unequal modulation.
void SetTxMcsSetDefined(uint8_t txMcsSetDefined)
Set the transmit MCS set defined.
void SetHtSupported(uint8_t htSupported)
Set the HT supported field.
void SetRxMcsBitmask(uint8_t index)
Set the receive MCS bitmask.
void SetSupportedChannelWidth(uint8_t supportedChannelWidth)
Set the supported channel width field.
void SetMaxAmpduLength(uint32_t maxAmpduLength)
Set the maximum AMPDU length.
void SetShortGuardInterval40(uint8_t shortGuardInterval)
Set the short guard interval 40 field.
void Dispose(void)
Dispose of this Object.
void Initialize(void)
Invoke DoInitialize on all Objects aggregated to this one.
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
Ptr< Packet > Copy(void) const
performs a COW copy of the packet.
Hold objects of type Ptr<T>.
Smart pointer class similar to boost::intrusive_ptr.
void SetAccessCategory(AcIndex ac)
Set the access category of this EDCAF.
void SetDroppedMpduCallback(DroppedMpdu callback) override
Ptr< BlockAckManager > GetBaManager(void)
Get the Block Ack Manager associated with this QosTxop.
void SetBlockAckThreshold(uint8_t threshold)
Set threshold for block ack mechanism.
void SetBlockAckInactivityTimeout(uint16_t timeout)
Set the BlockAck inactivity timeout.
void SetViBlockAckThreshold(uint8_t threshold)
Set the block ack threshold for AC_VI.
VhtCapabilities GetVhtCapabilities(void) const
Return the VHT capabilities of the device.
virtual void SetQosSupported(bool enable)
Enable or disable QoS support for the device.
void SetCtsToSelfSupported(bool enable)
Enable or disable CTS-to-self feature.
uint16_t m_voMaxAmsduSize
maximum A-MSDU size for AC_VO (in bytes)
Mac48Address m_address
MAC address of this station.
Mac48Address m_bssid
the BSSID
uint32_t m_beMaxAmpduSize
maximum A-MPDU size for AC_BE (in bytes)
MpduTracedCallback m_ackedMpduCallback
ack'ed MPDU callback
uint32_t m_bkMaxAmpduSize
maximum A-MPDU size for AC_BK (in bytes)
Ptr< WifiPhy > m_phy
Wifi PHY.
PsduMapResponseTimeoutTracedCallback m_psduMapResponseTimeoutCallback
PSDU map response timeout traced callback.
Ptr< FrameExchangeManager > m_feManager
Frame Exchange Manager.
bool GetQosSupported() const
Return whether the device supports QoS.
ExtendedCapabilities GetExtendedCapabilities(void) const
Return the extended capabilities of the device.
void SetBssid(Mac48Address bssid)
void ConfigureStandard(WifiStandard standard) override
void SetLinkUpCallback(Callback< void > linkUp) override
MpduResponseTimeoutTracedCallback m_mpduResponseTimeoutCallback
MPDU response timeout traced callback.
Ptr< QosTxop > GetBEQueue(void) const
Accessor for the AC_BE channel access function.
Ptr< WifiRemoteStationManager > GetWifiRemoteStationManager(void) const override
void SetForwardUpCallback(ForwardUpCallback upCallback) override
void SetTypeOfStation(TypeOfStation type) override
This method is invoked by a subclass to specify what type of station it is implementing.
Ptr< WifiPhy > GetWifiPhy(void) const override
uint16_t m_beMaxAmsduSize
maximum A-MSDU size for AC_BE (in bytes)
void SetBeBlockAckInactivityTimeout(uint16_t timeout)
Set BE block ack inactivity timeout.
void SetViBlockAckInactivityTimeout(uint16_t timeout)
Set VI block ack inactivity timeout.
Callback< void > m_linkDown
Callback when a link is down.
void SetBkBlockAckInactivityTimeout(uint16_t timeout)
Set BK block ack inactivity timeout.
Mac48Address GetBssid(void) const override
void SetBkBlockAckThreshold(uint8_t threshold)
Set the block ack threshold for AC_BK.
void SetupEdcaQueue(AcIndex ac)
This method is a private utility invoked to configure the channel access function for the specified A...
void SetWifiRemoteStationManager(const Ptr< WifiRemoteStationManager > stationManager) override
Ptr< Txop > GetTxop(void) const
Accessor for the DCF object.
Ptr< QosTxop > GetBKQueue(void) const
Accessor for the AC_BK channel access function.
uint16_t m_viMaxAmsduSize
maximum A-MSDU size for AC_VI (in bytes)
void SetVoBlockAckThreshold(uint8_t threshold)
Set the block ack threshold for AC_VO.
TypeOfStation GetTypeOfStation(void) const override
Return the type of station.
void SetErpSupported(bool enable)
Enable or disable ERP support for the device.
bool m_ctsToSelfSupported
flag indicating whether CTS-To-Self is supported
bool GetErpSupported() const
Return whether the device supports ERP.
void SetShortSlotTimeSupported(bool enable) override
Enable or disable short slot time feature.
PsduResponseTimeoutTracedCallback m_psduResponseTimeoutCallback
PSDU response timeout traced callback.
bool GetHeSupported() const
Return whether the device supports HE.
Ptr< WifiRemoteStationManager > m_stationManager
Remote station manager (rate control, RTS/CTS/fragmentation thresholds etc.)
Ptr< MacRxMiddle > m_rxMiddle
RX middle (defragmentation etc.)
Mac48Address GetAddress(void) const override
void SetupFrameExchangeManager(void)
Create a Frame Exchange Manager depending on the supported version of the standard.
Ptr< MacTxMiddle > m_txMiddle
TX middle (aggregation etc.)
ForwardUpCallback m_forwardUp
Callback to forward packet up the stack.
static TypeId GetTypeId(void)
Get the type ID.
Ptr< FrameExchangeManager > GetFrameExchangeManager(void) const
Get the Frame Exchange Manager.
Ssid GetSsid(void) const override
virtual ~RegularWifiMac()
TypeOfStation m_typeOfStation
the type of station
bool GetHtSupported() const
Return whether the device supports HT.
virtual void Receive(Ptr< WifiMacQueueItem > mpdu)
This method acts as the MacRxMiddle receive callback and is invoked to notify us that a frame has bee...
bool SupportsSendFrom(void) const override
void Enqueue(Ptr< Packet > packet, Mac48Address to, Mac48Address from) override
TracedCallback< const WifiMacHeader & > m_txOkCallback
transmit OK callback
void ConfigureContentionWindow(uint32_t cwMin, uint32_t cwMax)
void SetSsid(Ssid ssid) override
Ptr< ChannelAccessManager > m_channelAccessManager
channel access manager
void SetBeBlockAckThreshold(uint8_t threshold)
Set the block ack threshold for AC_BE.
TracedCallback< const WifiMacHeader & > m_txErrCallback
transmit error callback
uint32_t m_voMaxAmpduSize
maximum A-MPDU size for AC_VO (in bytes)
bool GetDsssSupported() const
Return whether the device supports DSSS.
bool m_dsssSupported
This Boolean is set true iff this WifiMac is to model 802.11b.
virtual void DeaggregateAmsduAndForward(Ptr< WifiMacQueueItem > mpdu)
This method can be called to de-aggregate an A-MSDU and forward the constituent packets up the stack.
bool m_erpSupported
This Boolean is set true iff this WifiMac is to model 802.11g.
void SetAddress(Mac48Address address) override
Ptr< QosTxop > GetQosTxop(AcIndex ac) const
Accessor for a specified EDCA object.
void SetDsssSupported(bool enable)
Enable or disable DSSS support for the device.
EdcaQueues m_edca
This is a map from Access Category index to the corresponding channel access function.
void ResetWifiPhy(void) override
Remove currently attached WifiPhy device from this MAC.
DroppedMpduTracedCallback m_droppedMpduCallback
This trace indicates that an MPDU was dropped for the given reason.
bool m_shortSlotTimeSupported
flag whether short slot time is supported
void DoInitialize() override
Initialize() implementation.
void DoDispose() override
Destructor implementation.
Ptr< QosTxop > GetVIQueue(void) const
Accessor for the AC_VI channel access function.
HtCapabilities GetHtCapabilities(void) const
Return the HT capabilities of the device.
Ssid m_ssid
Service Set ID (SSID)
void SetLinkDownCallback(Callback< void > linkDown) override
Ptr< QosTxop > GetVOQueue(void) const
Accessor for the AC_VO channel access function.
HeCapabilities GetHeCapabilities(void) const
Return the HE capabilities of the device.
MpduTracedCallback m_nackedMpduCallback
nack'ed MPDU callback
uint16_t m_bkMaxAmsduSize
maximum A-MSDU size for AC_BK (in bytes)
bool GetVhtSupported() const
Return whether the device supports VHT.
Callback< void > m_linkUp
Callback when a link is up.
void SetWifiPhy(const Ptr< WifiPhy > phy) override
void ForwardUp(Ptr< const Packet > packet, Mac48Address from, Mac48Address to)
Forward the packet up to the device.
void SetVoBlockAckInactivityTimeout(uint16_t timeout)
Set VO block ack inactivity timeout.
bool m_qosSupported
This Boolean is set true iff this WifiMac is to model 802.11e/WMM style Quality of Service.
bool GetShortSlotTimeSupported(void) const override
Ptr< Txop > m_txop
This holds a pointer to the TXOP instance for this WifiMac - used for transmission of frames to non-Q...
void SetPromisc(void) override
Sets the interface in promiscuous mode.
uint32_t m_viMaxAmpduSize
maximum A-MPDU size for AC_VI (in bytes)
The IEEE 802.11 SSID Information Element.
void SetTxMiddle(const Ptr< MacTxMiddle > txMiddle)
Set MacTxMiddle this Txop is associated to.
virtual void SetDroppedMpduCallback(DroppedMpdu callback)
virtual void SetWifiRemoteStationManager(const Ptr< WifiRemoteStationManager > remoteManager)
Set WifiRemoteStationsManager this Txop is associated to.
void SetChannelAccessManager(const Ptr< ChannelAccessManager > manager)
Set ChannelAccessManager this Txop is associated to.
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
@ OBSOLETE
Attribute or trace source is not used anymore; simulation fails.
Hold an unsigned integer type.
The IEEE 802.11ac VHT Capabilities.
void SetRxHighestSupportedLgiDataRate(uint16_t supportedDatarate)
Set the receive highest supported LGI data rate.
void SetSupportedChannelWidthSet(uint8_t channelWidthSet)
Set the supported channel width set.
void SetMaxMpduLength(uint16_t length)
Set the maximum MPDU length.
void SetRxLdpc(uint8_t rxLdpc)
Set the receive LDPC.
void SetTxStbc(uint8_t txStbc)
Set the transmit STBC.
void SetTxMcsMap(uint8_t mcs, uint8_t nss)
void SetShortGuardIntervalFor80Mhz(uint8_t shortGuardInterval)
Set the short guard interval 80 MHz.
void SetTxHighestSupportedLgiDataRate(uint16_t supportedDatarate)
Set the transmit highest supported LGI data rate.
void SetShortGuardIntervalFor160Mhz(uint8_t shortGuardInterval)
Set the short guard interval 160 MHz.
void SetMaxAmpduLength(uint32_t maxAmpduLength)
Set the maximum AMPDU length.
void SetRxMcsMap(uint8_t mcs, uint8_t nss)
void SetRxStbc(uint8_t rxStbc)
Set the receive STBC.
void SetVhtSupported(uint8_t vhtSupported)
Set the VHT supported field.
base class for all MAC-level wifi objects.
Ptr< HtConfiguration > GetHtConfiguration(void) const
Ptr< HeConfiguration > GetHeConfiguration(void) const
void ConfigureDcf(Ptr< Txop > dcf, uint32_t cwmin, uint32_t cwmax, bool isDsss, AcIndex ac)
virtual void DoDispose()
Destructor implementation.
Ptr< VhtConfiguration > GetVhtConfiguration(void) const
Ptr< const Packet > GetPacket(void) const
Get the packet stored in this item.
const WifiMacHeader & GetHeader(void) const
Get the header stored in this item.
std::list< WifiMode > GetMcsList(void) const
The WifiPhy::GetMcsList() method is used (e.g., by a WifiRemoteStationManager) to determine the set o...
WifiPhyBand GetPhyBand(void) const
Get the configured Wi-Fi band.
uint8_t GetMaxSupportedRxSpatialStreams(void) const
uint8_t GetMaxSupportedTxSpatialStreams(void) const
uint16_t GetNMcs(void) const
uint16_t GetChannelWidth(void) const
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
Ptr< const AttributeChecker > MakeBooleanChecker(void)
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
Ptr< const AttributeAccessor > MakePointerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Time NanoSeconds(uint64_t value)
Construct a Time in the indicated unit.
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source.
WifiStandard
Identifies the allowed configurations that a Wifi device is configured to use.
AcIndex QosUtilsMapTidToAc(uint8_t tid)
Maps TID (Traffic ID) to Access classes.
AcIndex
This enumeration defines the Access Categories as an enumeration with values corresponding to the AC ...
@ WIFI_STANDARD_80211n_5GHZ
@ WIFI_STANDARD_80211ax_5GHZ
@ WIFI_STANDARD_80211n_2_4GHZ
@ WIFI_STANDARD_80211ax_2_4GHZ
@ WIFI_STANDARD_80211ax_6GHZ
@ WIFI_PHY_BAND_6GHZ
The 6 GHz band.
@ WIFI_PHY_BAND_2_4GHZ
The 2.4 GHz band.
@ WIFI_PHY_BAND_5GHZ
The 5 GHz band.
@ WIFI_MOD_CLASS_HT
HT (Clause 19)
@ WIFI_MOD_CLASS_VHT
VHT (Clause 22)
@ WIFI_MOD_CLASS_HE
HE (Clause 27)
@ AC_BE_NQOS
Total number of ACs.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
TypeOfStation
Enumeration for type of station.
Callback< R, Ts... > MakeCallback(R(T::*memPtr)(Ts...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
U * PeekPointer(const Ptr< U > &p)