HE PPDU (11ax) More...
#include "he-ppdu.h"
Classes | |
class | HeSigHeader |
HE-SIG PHY header (HE-SIG-A1/A2/B) More... | |
Public Types | |
enum | TxPsdFlag { PSD_NON_HE_PORTION , PSD_HE_PORTION } |
The transmit power spectral density flag, namely used to correctly build PSDs for pre-HE and HE portions. More... | |
Public Member Functions | |
HePpdu (const WifiConstPsduMap &psdus, const WifiTxVector &txVector, uint16_t txCenterFreq, Time ppduDuration, WifiPhyBand band, uint64_t uid, TxPsdFlag flag) | |
Create an MU HE PPDU, storing a map of PSDUs. More... | |
HePpdu (Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector, uint16_t txCenterFreq, Time ppduDuration, WifiPhyBand band, uint64_t uid) | |
Create an SU HE PPDU, storing a PSDU. More... | |
Ptr< WifiPpdu > | Copy () const override |
Copy this instance. More... | |
Ptr< const WifiPsdu > | GetPsdu (uint8_t bssColor, uint16_t staId=SU_STA_ID) const |
Get the payload of the PPDU. More... | |
uint16_t | GetStaId () const override |
Get the ID of the STA that transmitted the PPDU for UL MU, SU_STA_ID otherwise. More... | |
uint16_t | GetTransmissionChannelWidth () const override |
Get the channel width over which the PPDU will effectively be transmitted. More... | |
Time | GetTxDuration () const override |
Get the total transmission duration of the PPDU. More... | |
TxPsdFlag | GetTxPsdFlag () const |
WifiPpduType | GetType () const override |
Return the PPDU type (. More... | |
bool | IsAllocated (uint16_t staId) const |
Check if STA ID is allocated. More... | |
bool | IsStaInContentChannel (uint16_t staId, size_t channelId) const |
Check if STA ID is in HE SIG-B Content Channel ID. More... | |
void | SetTxPsdFlag (TxPsdFlag flag) const |
void | UpdateTxVectorForUlMu (const std::optional< WifiTxVector > &trigVector) const |
Update the TXVECTOR for HE TB PPDUs, since the information to decode HE TB PPDUs is not available from the PHY headers but it requires information from the TRIGVECTOR of the AP expecting these HE TB PPDUs. More... | |
![]() | |
OfdmPpdu (Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector, uint16_t txCenterFreq, WifiPhyBand band, uint64_t uid, bool instantiateLSig=true) | |
Create an OFDM PPDU. More... | |
Ptr< WifiPpdu > | Copy () const override |
Copy this instance. More... | |
Time | GetTxDuration () const override |
Get the total transmission duration of the PPDU. More... | |
![]() | |
WifiPpdu (const WifiConstPsduMap &psdus, const WifiTxVector &txVector, uint16_t txCenterFreq, uint64_t uid) | |
Create a PPDU storing a map of PSDUs. More... | |
WifiPpdu (Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector, uint16_t txCenterFreq, uint64_t uid=UINT64_MAX) | |
Create a PPDU storing a PSDU. More... | |
virtual | ~WifiPpdu () |
Destructor for WifiPpdu. More... | |
bool | DoesOverlapChannel (uint16_t minFreq, uint16_t maxFreq) const |
Check whether the given PPDU overlaps a given channel. More... | |
WifiModulationClass | GetModulation () const |
Get the modulation used for the PPDU. More... | |
WifiPreamble | GetPreamble () const |
Get the preamble of the PPDU. More... | |
Ptr< const WifiPsdu > | GetPsdu () const |
Get the payload of the PPDU. More... | |
uint16_t | GetTxCenterFreq () const |
const WifiTxVector & | GetTxVector () const |
Get the TXVECTOR used to send the PPDU. More... | |
uint64_t | GetUid () const |
Get the UID of the PPDU. More... | |
bool | IsTruncatedTx () const |
void | Print (std::ostream &os) const |
Print the PPDU contents. More... | |
void | ResetTxVector () const |
Reset the TXVECTOR. More... | |
void | SetTruncatedTx () |
Indicate that the PPDU's transmission was aborted due to transmitter switch off. More... | |
void | UpdateTxVector (const WifiTxVector &updatedTxVector) const |
Update the TXVECTOR based on some information known at the receiver. More... | |
![]() | |
SimpleRefCount () | |
Default constructor. More... | |
SimpleRefCount (const SimpleRefCount &o[[maybe_unused]]) | |
Copy constructor. More... | |
uint32_t | GetReferenceCount () const |
Get the reference count of the object. More... | |
SimpleRefCount & | operator= (const SimpleRefCount &o[[maybe_unused]]) |
Assignment operator. More... | |
void | Ref () const |
Increment the reference count. More... | |
void | Unref () const |
Decrement the reference count. More... | |
Protected Member Functions | |
virtual void | SetTxVectorFromPhyHeaders (WifiTxVector &txVector, const LSigHeader &lSig, const HeSigHeader &heSig) const |
Fill in the TXVECTOR from PHY headers. More... | |
Protected Attributes | |
ContentChannelAllocation | m_contentChannelAlloc |
HE SIG-B Content Channel allocation (to be removed once HE-SIG-B headers are implemented) More... | |
WifiTxVector::HeMuUserInfoMap | m_muUserInfos |
HE MU specific per-user information (to be removed once HE-SIG-B headers are implemented) More... | |
RuAllocation | m_ruAllocation |
RU_ALLOCATION in SIG-B common field (to be removed once HE-SIG-B headers are implemented) More... | |
TxPsdFlag | m_txPsdFlag |
the transmit power spectral density flag More... | |
![]() | |
WifiPhyBand | m_band |
the WifiPhyBand used to transmit that PPDU More... | |
![]() | |
WifiModulationClass | m_modulation |
the modulation used for the transmission of this PPDU More... | |
Ptr< Packet > | m_phyHeaders |
the PHY headers contained in this PPDU More... | |
WifiPreamble | m_preamble |
the PHY preamble More... | |
WifiConstPsduMap | m_psdus |
the PSDUs contained in this PPDU More... | |
uint16_t | m_txCenterFreq |
the center frequency (MHz) used for the transmission of this PPDU More... | |
std::optional< WifiTxVector > | m_txVector |
the TXVECTOR at TX PHY or the reconstructed TXVECTOR at RX PHY (or std::nullopt if TXVECTOR has not been reconstructed yet) More... | |
uint64_t | m_uid |
the unique ID of this PPDU More... | |
Private Member Functions | |
WifiTxVector | DoGetTxVector () const override |
Get the TXVECTOR used to send the PPDU. More... | |
virtual bool | IsDlMu () const |
Return true if the PPDU is a DL MU PPDU. More... | |
virtual bool | IsMu () const |
Return true if the PPDU is a MU PPDU. More... | |
virtual bool | IsUlMu () const |
Return true if the PPDU is an UL MU PPDU. More... | |
std::string | PrintPayload () const override |
Print the payload of the PPDU. More... | |
void | SetHeSigHeader (HeSigHeader &heSig, const WifiTxVector &txVector) const |
Fill in the HE-SIG header. More... | |
virtual void | SetLSigHeader (LSigHeader &lSig, Time ppduDuration) const |
Fill in the L-SIG header. More... | |
virtual void | SetPhyHeaders (const WifiTxVector &txVector, Time ppduDuration) |
Fill in the PHY headers. More... | |
HE PPDU (11ax)
HePpdu stores a preamble, PHY headers and a map of PSDUs of a PPDU with HE header
ns3::HePpdu::HePpdu | ( | Ptr< const WifiPsdu > | psdu, |
const WifiTxVector & | txVector, | ||
uint16_t | txCenterFreq, | ||
Time | ppduDuration, | ||
WifiPhyBand | band, | ||
uint64_t | uid | ||
) |
Create an SU HE PPDU, storing a PSDU.
psdu | the PHY payload (PSDU) |
txVector | the TXVECTOR that was used for this PPDU |
txCenterFreq | the center frequency (MHz) that was used for this PPDU |
ppduDuration | the transmission duration of this PPDU |
band | the WifiPhyBand used for the transmission of this PPDU |
uid | the unique ID of this PPDU |
Definition at line 86 of file he-ppdu.cc.
References IsMu(), NS_ASSERT, NS_LOG_FUNCTION, PSD_NON_HE_PORTION, SetPhyHeaders(), and SetTxPsdFlag().
Referenced by Copy().
ns3::HePpdu::HePpdu | ( | const WifiConstPsduMap & | psdus, |
const WifiTxVector & | txVector, | ||
uint16_t | txCenterFreq, | ||
Time | ppduDuration, | ||
WifiPhyBand | band, | ||
uint64_t | uid, | ||
TxPsdFlag | flag | ||
) |
Create an MU HE PPDU, storing a map of PSDUs.
This PPDU can either be UL or DL.
psdus | the PHY payloads (PSDUs) |
txVector | the TXVECTOR that was used for this PPDU |
txCenterFreq | the center frequency (MHz) that was used for this PPDU |
ppduDuration | the transmission duration of this PPDU |
band | the WifiPhyBand used for the transmission of this PPDU |
uid | the unique ID of this PPDU or of the triggering PPDU if this is an HE TB PPDU |
flag | the flag indicating the type of Tx PSD to build |
Definition at line 51 of file he-ppdu.cc.
References ns3::WifiTxVector::GetContentChannelAllocation(), ns3::WifiTxVector::GetHeMuUserInfoMap(), ns3::WifiTxVector::GetRuAllocation(), ns3::WifiTxVector::IsMu(), m_contentChannelAlloc, m_muUserInfos, ns3::WifiPpdu::m_psdus, m_ruAllocation, NS_ABORT_MSG_IF, NS_LOG_FUNCTION, SetPhyHeaders(), and SetTxPsdFlag().
Copy this instance.
Reimplemented from ns3::WifiPpdu.
Definition at line 261 of file he-ppdu.cc.
References HePpdu().
|
overrideprivatevirtual |
Get the TXVECTOR used to send the PPDU.
Reimplemented from ns3::WifiPpdu.
Definition at line 165 of file he-ppdu.cc.
References ns3::Packet::Copy(), ns3::WifiPpdu::m_phyHeaders, ns3::WifiPpdu::m_preamble, NS_FATAL_ERROR, ns3::WifiTxVector::SetPreambleType(), and SetTxVectorFromPhyHeaders().
Get the payload of the PPDU.
bssColor | the BSS color of the PHY calling this function. |
staId | the STA-ID of the PHY calling this function. |
Definition at line 299 of file he-ppdu.cc.
References ns3::Packet::Copy(), ns3::HePpdu::HeSigHeader::GetBssColor(), IsMu(), IsUlMu(), ns3::WifiPpdu::m_phyHeaders, ns3::WifiPpdu::m_psdus, NS_ASSERT, and SU_STA_ID.
|
overridevirtual |
Get the ID of the STA that transmitted the PPDU for UL MU, SU_STA_ID otherwise.
Reimplemented from ns3::WifiPpdu.
Definition at line 342 of file he-ppdu.cc.
References IsUlMu(), ns3::WifiPpdu::m_psdus, and NS_ASSERT.
Referenced by GetTransmissionChannelWidth(), and UpdateTxVectorForUlMu().
|
overridevirtual |
Get the channel width over which the PPDU will effectively be transmitted.
Reimplemented from ns3::WifiPpdu.
Definition at line 349 of file he-ppdu.cc.
References ns3::HeRu::GetBandwidth(), ns3::WifiTxVector::GetRu(), GetStaId(), ns3::WifiPpdu::GetTransmissionChannelWidth(), GetTxPsdFlag(), ns3::WifiPpdu::GetTxVector(), ns3::WifiTxVector::IsUlMu(), NS_LOG_INFO, PSD_NON_HE_PORTION, and SU_STA_ID.
|
overridevirtual |
Get the total transmission duration of the PPDU.
Reimplemented from ns3::WifiPpdu.
Definition at line 226 of file he-ppdu.cc.
References ns3::WifiPhy::CalculatePhyPreambleAndHeaderDuration(), ns3::WifiTxVector::GetGuardInterval(), ns3::OfdmPpdu::LSigHeader::GetLength(), ns3::Time::GetNanoSeconds(), ns3::WifiPpdu::GetTxVector(), IsDlMu(), two-ray-to-three-gpp-ch-calibration::m, ns3::OfdmPpdu::m_band, ns3::WifiPpdu::m_phyHeaders, ns3::MicroSeconds(), ns3::NanoSeconds(), NS_ASSERT, ns3::Packet::PeekHeader(), ns3::Seconds(), and ns3::WIFI_PHY_BAND_2_4GHZ.
HePpdu::TxPsdFlag ns3::HePpdu::GetTxPsdFlag | ( | ) | const |
Definition at line 368 of file he-ppdu.cc.
References m_txPsdFlag.
Referenced by GetTransmissionChannelWidth().
|
overridevirtual |
Return the PPDU type (.
Reimplemented from ns3::WifiPpdu.
Definition at line 267 of file he-ppdu.cc.
References ns3::WifiPpdu::m_preamble, ns3::WIFI_PPDU_TYPE_DL_MU, ns3::WIFI_PPDU_TYPE_SU, ns3::WIFI_PPDU_TYPE_UL_MU, ns3::WIFI_PREAMBLE_HE_MU, and ns3::WIFI_PREAMBLE_HE_TB.
Referenced by UpdateTxVectorForUlMu().
bool ns3::HePpdu::IsAllocated | ( | uint16_t | staId | ) | const |
Check if STA ID is allocated.
staId | STA ID |
Definition at line 417 of file he-ppdu.cc.
References m_muUserInfos.
|
privatevirtual |
Return true if the PPDU is a DL MU PPDU.
Reimplemented in ns3::EhtPpdu.
Definition at line 287 of file he-ppdu.cc.
References ns3::WifiPpdu::m_preamble, and ns3::WIFI_PREAMBLE_HE_MU.
Referenced by GetTxDuration(), IsMu(), SetLSigHeader(), and SetTxVectorFromPhyHeaders().
|
privatevirtual |
Return true if the PPDU is a MU PPDU.
Definition at line 281 of file he-ppdu.cc.
References IsDlMu(), and IsUlMu().
Referenced by HePpdu(), GetPsdu(), PrintPayload(), and SetTxVectorFromPhyHeaders().
bool ns3::HePpdu::IsStaInContentChannel | ( | uint16_t | staId, |
size_t | channelId | ||
) | const |
Check if STA ID is in HE SIG-B Content Channel ID.
staId | STA ID |
channelId | Content Channel ID |
Definition at line 423 of file he-ppdu.cc.
References m_contentChannelAlloc, and NS_ASSERT_MSG.
|
privatevirtual |
Return true if the PPDU is an UL MU PPDU.
Reimplemented in ns3::EhtPpdu.
Definition at line 293 of file he-ppdu.cc.
References ns3::WifiPpdu::m_preamble, and ns3::WIFI_PREAMBLE_HE_TB.
Referenced by GetPsdu(), GetStaId(), IsMu(), and SetTxVectorFromPhyHeaders().
|
overrideprivatevirtual |
Print the payload of the PPDU.
Reimplemented from ns3::WifiPpdu.
Definition at line 432 of file he-ppdu.cc.
References IsMu(), ns3::WifiPpdu::m_psdus, m_txPsdFlag, and SU_STA_ID.
|
private |
Fill in the HE-SIG header.
heSig | the HE-SIG header to fill in |
txVector | the TXVECTOR that was used for this PPDU |
Definition at line 144 of file he-ppdu.cc.
References ns3::WifiTxVector::GetBssColor(), ns3::WifiTxVector::GetChannelWidth(), ns3::WifiTxVector::GetGuardInterval(), ns3::WifiMode::GetMcsValue(), ns3::WifiTxVector::GetMode(), ns3::WifiTxVector::GetNss(), ns3::WifiTxVector::GetSigBMode(), ns3::IsDlMu(), ns3::WifiTxVector::IsUlMu(), ns3::IsUlMu(), ns3::WifiPpdu::m_preamble, ns3::HePpdu::HeSigHeader::SetBssColor(), ns3::HePpdu::HeSigHeader::SetChannelWidth(), ns3::HePpdu::HeSigHeader::SetGuardIntervalAndLtfSize(), ns3::HePpdu::HeSigHeader::SetMcs(), ns3::HePpdu::HeSigHeader::SetMuFlag(), and ns3::HePpdu::HeSigHeader::SetNStreams().
Referenced by SetPhyHeaders().
|
privatevirtual |
Fill in the L-SIG header.
lSig | the L-SIG header to fill in |
ppduDuration | the transmission duration of this PPDU |
Definition at line 126 of file he-ppdu.cc.
References ns3::Time::GetNanoSeconds(), IsDlMu(), two-ray-to-three-gpp-ch-calibration::m, ns3::OfdmPpdu::m_band, ns3::OfdmPpdu::LSigHeader::SetLength(), and ns3::WIFI_PHY_BAND_2_4GHZ.
Referenced by SetPhyHeaders().
|
privatevirtual |
Fill in the PHY headers.
txVector | the TXVECTOR that was used for this PPDU |
ppduDuration | the transmission duration of this PPDU |
Definition at line 106 of file he-ppdu.cc.
References ns3::Packet::AddHeader(), ns3::WifiPpdu::m_phyHeaders, NS_LOG_FUNCTION, SetHeSigHeader(), and SetLSigHeader().
Referenced by HePpdu().
void ns3::HePpdu::SetTxPsdFlag | ( | TxPsdFlag | flag | ) | const |
flag | the transmit PSD flag set for this PPDU |
Definition at line 374 of file he-ppdu.cc.
References m_txPsdFlag, and NS_LOG_FUNCTION.
Referenced by HePpdu().
|
protectedvirtual |
Fill in the TXVECTOR from PHY headers.
txVector | the TXVECTOR to fill in |
lSig | the L-SIG header |
heSig | the HE-SIG header |
Reimplemented in ns3::EhtPpdu.
Definition at line 194 of file he-ppdu.cc.
References ns3::HePpdu::HeSigHeader::GetBssColor(), ns3::HePpdu::HeSigHeader::GetChannelWidth(), ns3::HePpdu::HeSigHeader::GetGuardInterval(), ns3::HePhy::GetHeMcs(), ns3::OfdmPpdu::LSigHeader::GetLength(), ns3::HePpdu::HeSigHeader::GetMcs(), ns3::HePpdu::HeSigHeader::GetNStreams(), ns3::VhtPhy::GetVhtMcs(), IsDlMu(), ns3::WifiTxVector::IsDlMu(), IsMu(), IsUlMu(), m_muUserInfos, ns3::WifiPpdu::m_psdus, m_ruAllocation, ns3::WifiTxVector::SetAggregation(), ns3::WifiTxVector::SetBssColor(), ns3::WifiTxVector::SetChannelWidth(), ns3::WifiTxVector::SetGuardInterval(), ns3::WifiTxVector::SetHeMuUserInfo(), ns3::WifiTxVector::SetLength(), ns3::WifiTxVector::SetMode(), ns3::WifiTxVector::SetNss(), ns3::WifiTxVector::SetRuAllocation(), and ns3::WifiTxVector::SetSigBMode().
Referenced by DoGetTxVector().
void ns3::HePpdu::UpdateTxVectorForUlMu | ( | const std::optional< WifiTxVector > & | trigVector | ) | const |
Update the TXVECTOR for HE TB PPDUs, since the information to decode HE TB PPDUs is not available from the PHY headers but it requires information from the TRIGVECTOR of the AP expecting these HE TB PPDUs.
trigVector | the TRIGVECTOR or std::nullopt if no TRIGVECTOR is available at the caller |
Definition at line 381 of file he-ppdu.cc.
References ns3::WifiPpdu::GetModulation(), ns3::HeRu::GetRuType(), GetStaId(), ns3::WifiPpdu::GetTxVector(), GetType(), ns3::WifiPpdu::m_txVector, NS_ASSERT, NS_LOG_FUNCTION, ns3::WIFI_MOD_CLASS_HE, and ns3::WIFI_PPDU_TYPE_UL_MU.
|
protected |
HE SIG-B Content Channel allocation (to be removed once HE-SIG-B headers are implemented)
Definition at line 271 of file he-ppdu.h.
Referenced by ns3::EhtPpdu::EhtPpdu(), HePpdu(), and IsStaInContentChannel().
|
protected |
HE MU specific per-user information (to be removed once HE-SIG-B headers are implemented)
Definition at line 268 of file he-ppdu.h.
Referenced by HePpdu(), ns3::EhtPpdu::GetType(), IsAllocated(), ns3::EhtPpdu::IsDlMu(), ns3::EhtPpdu::IsUlMu(), SetTxVectorFromPhyHeaders(), and ns3::EhtPpdu::SetTxVectorFromPhyHeaders().
|
protected |
RU_ALLOCATION in SIG-B common field (to be removed once HE-SIG-B headers are implemented)
Definition at line 273 of file he-ppdu.h.
Referenced by ns3::EhtPpdu::EhtPpdu(), HePpdu(), SetTxVectorFromPhyHeaders(), and ns3::EhtPpdu::SetTxVectorFromPhyHeaders().
|
mutableprotected |
the transmit power spectral density flag
Definition at line 266 of file he-ppdu.h.
Referenced by GetTxPsdFlag(), PrintPayload(), and SetTxPsdFlag().