EHT PPDU (11be) More...
#include "eht-ppdu.h"
Classes | |
struct | EhtMuPhyHeader |
PHY header for EHT MU PPDUs. More... | |
struct | EhtTbPhyHeader |
PHY header for EHT TB PPDUs. More... | |
Public Types | |
using | EhtPhyHeader = std::variant<std::monostate, EhtTbPhyHeader, EhtMuPhyHeader> |
type of the EHT PHY header | |
Public Types inherited from ns3::HePpdu | |
using | HeSigBContentChannels = std::vector<std::vector<HeSigBUserSpecificField>> |
HE SIG-B Content Channels. | |
using | HeSigHeader = std::variant<std::monostate, HeSuSigHeader, HeTbSigHeader, HeMuSigHeader> |
type of the HE-SIG PHY header | |
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 | |
EhtPpdu (const WifiConstPsduMap &psdus, const WifiTxVector &txVector, const WifiPhyOperatingChannel &channel, Time ppduDuration, uint64_t uid, TxPsdFlag flag) | |
Create an EHT PPDU, storing a map of PSDUs. | |
Ptr< WifiPpdu > | Copy () const override |
Copy this instance. | |
WifiPpduType | GetType () const override |
Return the PPDU type (. | |
Public Member Functions inherited from ns3::HePpdu | |
HePpdu (const WifiConstPsduMap &psdus, const WifiTxVector &txVector, const WifiPhyOperatingChannel &channel, Time ppduDuration, uint64_t uid, TxPsdFlag flag) | |
Create an MU HE PPDU, storing a map of PSDUs. | |
HePpdu (Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector, const WifiPhyOperatingChannel &channel, Time ppduDuration, uint64_t uid) | |
Create an SU HE PPDU, storing a PSDU. | |
Ptr< WifiPpdu > | Copy () const override |
Copy this instance. | |
Ptr< const WifiPsdu > | GetPsdu (uint8_t bssColor, uint16_t staId=SU_STA_ID) const |
Get the payload of the PPDU. | |
uint16_t | GetStaId () const override |
Get the ID of the STA that transmitted the PPDU for UL MU, SU_STA_ID otherwise. | |
MHz_u | GetTxChannelWidth () const override |
Get the channel width over which the PPDU will effectively be transmitted. | |
Time | GetTxDuration () const override |
Get the total transmission duration of the PPDU. | |
TxPsdFlag | GetTxPsdFlag () const |
WifiPpduType | GetType () const override |
Return the PPDU type (. | |
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. | |
Public Member Functions inherited from ns3::OfdmPpdu | |
OfdmPpdu (Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector, const WifiPhyOperatingChannel &channel, uint64_t uid, bool instantiateLSig=true) | |
Create an OFDM PPDU. | |
Ptr< WifiPpdu > | Copy () const override |
Copy this instance. | |
Time | GetTxDuration () const override |
Get the total transmission duration of the PPDU. | |
Public Member Functions inherited from ns3::WifiPpdu | |
WifiPpdu (const WifiConstPsduMap &psdus, const WifiTxVector &txVector, const WifiPhyOperatingChannel &channel, uint64_t uid) | |
Create a PPDU storing a map of PSDUs. | |
WifiPpdu (Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector, const WifiPhyOperatingChannel &channel, uint64_t uid=UINT64_MAX) | |
Create a PPDU storing a PSDU. | |
virtual | ~WifiPpdu ()=default |
Destructor for WifiPpdu. | |
bool | DoesOverlapChannel (MHz_u minFreq, MHz_u maxFreq) const |
Check whether the given PPDU overlaps a given channel. | |
WifiModulationClass | GetModulation () const |
Get the modulation used for the PPDU. | |
WifiPreamble | GetPreamble () const |
Get the preamble of the PPDU. | |
Ptr< const WifiPsdu > | GetPsdu () const |
Get the payload of the PPDU. | |
std::vector< MHz_u > | GetTxCenterFreqs () const |
const WifiTxVector & | GetTxVector () const |
Get the TXVECTOR used to send the PPDU. | |
uint64_t | GetUid () const |
Get the UID of the PPDU. | |
bool | IsTruncatedTx () const |
void | Print (std::ostream &os) const |
Print the PPDU contents. | |
void | ResetTxVector () const |
Reset the TXVECTOR. | |
void | SetTruncatedTx () |
Indicate that the PPDU's transmission was aborted due to transmitter switch off. | |
void | UpdateTxVector (const WifiTxVector &updatedTxVector) const |
Update the TXVECTOR based on some information known at the receiver. | |
Public Member Functions inherited from ns3::SimpleRefCount< WifiPpdu > | |
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. | |
Static Public Member Functions | |
static HeSigBContentChannels | GetEhtSigContentChannels (const WifiTxVector &txVector, uint8_t p20Index) |
Get the EHT-SIG content channels for a given PPDU IEEE 802.11be-D3.1 36.3.12.8.2 EHT-SIG content channels. | |
static uint32_t | GetEhtSigFieldSize (MHz_u channelWidth, const RuAllocation &ruAllocation, uint8_t ehtPpduType, bool compression, std::size_t numMuMimoUsers) |
Get variable length EHT-SIG field size. | |
static std::pair< std::size_t, std::size_t > | GetNumRusPerEhtSigBContentChannel (MHz_u channelWidth, uint8_t ehtPpduType, const RuAllocation &ruAllocation, bool compression, std::size_t numMuMimoUsers) |
Get the number of RUs per EHT-SIG-B content channel. | |
static uint8_t | GetPuncturedInfo (const std::vector< bool > &inactiveSubchannels, uint8_t ehtPpduType, std::optional< bool > isLow80MHz) |
Get the Punctured Channel Information field in the U-SIG. | |
Static Public Member Functions inherited from ns3::HePpdu | |
static HeSigBContentChannels | GetHeSigBContentChannels (const WifiTxVector &txVector, uint8_t p20Index) |
Get the HE SIG-B content channels for a given PPDU IEEE 802.11ax-2021 27.3.11.8.2 HE-SIG-B content channels. | |
static std::pair< std::size_t, std::size_t > | GetNumRusPerHeSigBContentChannel (MHz_u channelWidth, const RuAllocation &ruAllocation, bool sigBCompression, uint8_t numMuMimoUsers) |
Get the number of STAs per HE-SIG-B content channel. | |
static uint32_t | GetSigBFieldSize (MHz_u channelWidth, const RuAllocation &ruAllocation, bool sigBCompression, std::size_t numMuMimoUsers) |
Get variable length HE SIG-B field size. | |
Private Member Functions | |
bool | IsDlMu () const override |
Return true if the PPDU is a DL MU PPDU. | |
bool | IsUlMu () const override |
Return true if the PPDU is an UL MU PPDU. | |
void | SetEhtPhyHeader (const WifiTxVector &txVector) |
Fill in the EHT PHY header. | |
void | SetPhyHeaders (const WifiTxVector &txVector, Time ppduDuration) |
Fill in the PHY headers. | |
void | SetTxVectorFromPhyHeaders (WifiTxVector &txVector) const override |
Fill in the TXVECTOR from PHY headers. | |
Private Attributes | |
EhtPhyHeader | m_ehtPhyHeader |
the EHT PHY header | |
Additional Inherited Members | |
Protected Member Functions inherited from ns3::HePpdu | |
void | SetHeMuUserInfos (WifiTxVector &txVector, const RuAllocation &ruAllocation, const HeSigBContentChannels &contentChannels, bool sigBCompression, uint8_t numMuMimoUsers) const |
Reconstruct HeMuUserInfoMap from HE-SIG-B header. | |
Static Protected Member Functions inherited from ns3::HePpdu | |
static uint8_t | GetChannelWidthEncodingFromMhz (MHz_u channelWidth) |
Convert channel width expressed in MHz to bandwidth field encoding in HE-SIG-A. | |
static MHz_u | GetChannelWidthMhzFromEncoding (uint8_t bandwidth) |
Convert channel width expressed in MHz from bandwidth field encoding in HE-SIG-A. | |
static uint8_t | GetGuardIntervalAndNltfEncoding (Time guardInterval, uint8_t nltf) |
Convert guard interval and NLTF to its encoding in HE-SIG-A. | |
static Time | GetGuardIntervalFromEncoding (uint8_t giAndNltfSize) |
Convert guard interval from its encoding in HE-SIG-A. | |
static uint8_t | GetMuMimoUsersEncoding (uint8_t nUsers) |
Convert number of MU-MIMO users to its encoding in HE-SIG-A. | |
static uint8_t | GetMuMimoUsersFromEncoding (uint8_t encoding) |
Convert number of MU-MIMO users from its encoding in HE-SIG-A. | |
static uint8_t | GetNssFromNstsEncoding (uint8_t nsts) |
Convert number of spatial streams from NSTS field encoding in HE-SIG-A. | |
static uint8_t | GetNstsEncodingFromNss (uint8_t nss) |
Convert number of spatial streams to NSTS field encoding in HE-SIG-A. | |
Protected Attributes inherited from ns3::HePpdu | |
TxPsdFlag | m_txPsdFlag |
the transmit power spectral density flag | |
Protected Attributes inherited from ns3::OfdmPpdu | |
LSigHeader | m_lSig |
the L-SIG PHY header | |
Protected Attributes inherited from ns3::WifiPpdu | |
WifiModulationClass | m_modulation |
the modulation used for the transmission of this PPDU | |
const WifiPhyOperatingChannel & | m_operatingChannel |
the operating channel of the PHY | |
WifiPreamble | m_preamble |
the PHY preamble | |
WifiConstPsduMap | m_psdus |
the PSDUs contained in this PPDU | |
std::vector< MHz_u > | m_txCenterFreqs |
the center frequency per segment used for the transmission of this PPDU | |
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) | |
uint64_t | m_uid |
the unique ID of this PPDU | |
using ns3::EhtPpdu::EhtPhyHeader = std::variant<std::monostate, EhtTbPhyHeader, EhtMuPhyHeader> |
type of the EHT PHY header
Definition at line 71 of file eht-ppdu.h.
ns3::EhtPpdu::EhtPpdu | ( | const WifiConstPsduMap & | psdus, |
const WifiTxVector & | txVector, | ||
const WifiPhyOperatingChannel & | channel, | ||
Time | ppduDuration, | ||
uint64_t | uid, | ||
TxPsdFlag | flag ) |
Create an EHT 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 |
channel | the operating channel of the PHY used to transmit this PPDU |
ppduDuration | the transmission duration of this PPDU |
uid | the unique ID of this PPDU or of the triggering PPDU if this is an EHT TB PPDU |
flag | the flag indicating the type of Tx PSD to build |
Definition at line 25 of file eht-ppdu.cc.
References NS_LOG_FUNCTION, and SetPhyHeaders().
Referenced by Copy().
Copy this instance.
Reimplemented from ns3::WifiPpdu.
Definition at line 304 of file eht-ppdu.cc.
References EhtPpdu().
|
static |
Get the EHT-SIG content channels for a given PPDU IEEE 802.11be-D3.1 36.3.12.8.2 EHT-SIG content channels.
txVector | the TXVECTOR used for the PPDU |
p20Index | the index of the primary20 channel |
Definition at line 193 of file eht-ppdu.cc.
References ns3::WifiTxVector::GetEhtPpduType(), ns3::HePpdu::GetHeSigBContentChannels(), ns3::WifiMode::GetMcsValue(), ns3::WifiTxVector::GetMode(), and ns3::WifiTxVector::GetNss().
Referenced by SetEhtPhyHeader().
|
static |
Get variable length EHT-SIG field size.
channelWidth | the channel width occupied by the PPDU |
ruAllocation | 8 bit RU_ALLOCATION per 20 MHz |
ehtPpduType | the EHT_PPDU_TYPE used by the PPDU |
compression | flag whether compression mode is used by the PPDU |
numMuMimoUsers | the number of MU-MIMO users addressed by the PPDU |
Definition at line 205 of file eht-ppdu.cc.
References GetNumRusPerEhtSigBContentChannel().
Referenced by ns3::EhtPhy::GetSigBSize().
|
static |
Get the number of RUs per EHT-SIG-B content channel.
This function will be used once EHT PHY headers are implemented.
channelWidth | the channel width occupied by the PPDU |
ehtPpduType | the EHT_PPDU_TYPE used by the PPDU |
ruAllocation | 8 bit RU_ALLOCATION per 20 MHz |
compression | flag whether compression mode is used by the PPDU |
numMuMimoUsers | the number of MU-MIMO users addressed by the PPDU |
Definition at line 176 of file eht-ppdu.cc.
References ns3::HePpdu::GetNumRusPerHeSigBContentChannel().
Referenced by GetEhtSigFieldSize().
|
static |
Get the Punctured Channel Information field in the U-SIG.
inactiveSubchannels | the bitmap indexed by the 20 MHz subchannels in ascending order, where each bit indicates whether the corresponding 20 MHz subchannel is punctured or not within the transmission bandwidth |
ehtPpduType | the EHT_PPDU_TYPE used by the PPDU |
isLow80MHz | flag whether the 80 MHz frequency subblock where U-SIG processing is performed is the lowest in frequency (if OFDMA and if channel width is larger than 80 MHz) |
Definition at line 247 of file eht-ppdu.cc.
References NS_ASSERT, and NS_ASSERT_MSG.
Referenced by ns3::WifiPhyHelper::GetRadiotapHeader(), and SetEhtPhyHeader().
|
overridevirtual |
Return the PPDU type (.
Reimplemented from ns3::WifiPpdu.
Definition at line 87 of file eht-ppdu.cc.
References ns3::WifiPpdu::m_preamble, ns3::WifiPpdu::m_psdus, NS_ASSERT_MSG, ns3::SU_STA_ID, ns3::WIFI_PPDU_TYPE_DL_MU, ns3::WIFI_PPDU_TYPE_SU, ns3::WIFI_PPDU_TYPE_UL_MU, ns3::WIFI_PREAMBLE_EHT_MU, and ns3::WIFI_PREAMBLE_EHT_TB.
|
overrideprivatevirtual |
Return true if the PPDU is a DL MU PPDU.
Reimplemented from ns3::HePpdu.
Definition at line 106 of file eht-ppdu.cc.
References ns3::WifiPpdu::m_preamble, ns3::WifiPpdu::m_psdus, ns3::SU_STA_ID, and ns3::WIFI_PREAMBLE_EHT_MU.
|
overrideprivatevirtual |
Return true if the PPDU is an UL MU PPDU.
Reimplemented from ns3::HePpdu.
Definition at line 112 of file eht-ppdu.cc.
References ns3::WifiPpdu::m_preamble, ns3::WifiPpdu::m_psdus, ns3::SU_STA_ID, and ns3::WIFI_PREAMBLE_EHT_TB.
|
private |
Fill in the EHT PHY header.
txVector | the TXVECTOR that was used for this PPDU |
Definition at line 45 of file eht-ppdu.cc.
References ns3::WifiTxVector::GetBssColor(), ns3::WifiTxVector::GetChannelWidth(), ns3::HePpdu::GetChannelWidthEncodingFromMhz(), ns3::WifiTxVector::GetEhtPpduType(), GetEhtSigContentChannels(), ns3::WifiTxVector::GetGuardInterval(), ns3::HePpdu::GetGuardIntervalAndNltfEncoding(), ns3::WifiTxVector::GetInactiveSubchannels(), ns3::WifiMode::GetMcsValue(), ns3::WifiPhyOperatingChannel::GetPrimaryChannelIndex(), GetPuncturedInfo(), ns3::WifiTxVector::GetRuAllocation(), ns3::WifiTxVector::GetSigBMode(), ns3::IsDlMu(), ns3::WifiTxVector::IsDlMu(), ns3::WifiTxVector::IsMu(), ns3::IsUlMu(), ns3::EhtPpdu::EhtMuPhyHeader::m_bandwidth, ns3::EhtPpdu::EhtTbPhyHeader::m_bandwidth, m_ehtPhyHeader, ns3::WifiPpdu::m_operatingChannel, ns3::WifiPpdu::m_preamble, and NS_ASSERT.
Referenced by SetPhyHeaders().
|
private |
Fill in the PHY headers.
txVector | the TXVECTOR that was used for this PPDU |
ppduDuration | the transmission duration of this PPDU |
Definition at line 38 of file eht-ppdu.cc.
References NS_LOG_FUNCTION, and SetEhtPhyHeader().
Referenced by EhtPpdu().
|
overrideprivatevirtual |
Fill in the TXVECTOR from PHY headers.
txVector | the TXVECTOR to fill in |
Reimplemented from ns3::HePpdu.
Definition at line 118 of file eht-ppdu.cc.
References ns3::HePpdu::GetChannelWidthMhzFromEncoding(), ns3::EhtPhy::GetEhtMcs(), ns3::HePpdu::GetGuardIntervalFromEncoding(), ns3::OfdmPpdu::LSigHeader::GetLength(), ns3::WifiPhyOperatingChannel::GetPrimaryChannelIndex(), ns3::VhtPhy::GetVhtMcs(), ns3::IsDlMu(), ns3::IsUlMu(), m_ehtPhyHeader, ns3::OfdmPpdu::m_lSig, ns3::WifiPpdu::m_operatingChannel, ns3::WifiPpdu::m_preamble, ns3::WifiPpdu::m_psdus, NS_ASSERT, prev, ns3::WifiTxVector::SetAggregation(), ns3::WifiTxVector::SetBssColor(), ns3::WifiTxVector::SetChannelWidth(), ns3::WifiTxVector::SetEhtPpduType(), ns3::WifiTxVector::SetGuardInterval(), ns3::HePpdu::SetHeMuUserInfos(), ns3::WifiTxVector::SetLength(), ns3::WifiTxVector::SetMode(), ns3::WifiTxVector::SetNss(), ns3::WifiTxVector::SetRuAllocation(), and ns3::WifiTxVector::SetSigBMode().
|
private |
the EHT PHY header
Definition at line 173 of file eht-ppdu.h.
Referenced by SetEhtPhyHeader(), and SetTxVectorFromPhyHeaders().