A Discrete-Event Network Simulator
Go to the documentation of this file.
1/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
3 * Copyright (c) 2020 Orange Labs
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation;
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 *
18 * Authors: Rediet <getachew.redieteab@orange.com>
19 * S├ębastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy and spectrum-wifi-phy)
20 * Mathieu Lacage <mathieu.lacage@sophia.inria.fr> (for logic ported from wifi-phy)
21 */
23#ifndef PHY_ENTITY_H
24#define PHY_ENTITY_H
26#include <list>
27#include <map>
28#include <tuple>
29#include <optional>
30#include <utility>
31#include "wifi-mpdu-type.h"
32#include "wifi-tx-vector.h"
33#include "wifi-phy-band.h"
34#include "wifi-ppdu.h"
35#include "wifi-mpdu-type.h"
36#include "wifi-ppdu.h"
37#include "ns3/event-id.h"
38#include "ns3/simple-ref-count.h"
39#include "ns3/nstime.h"
40#include "ns3/wifi-spectrum-value-helper.h"
51namespace ns3 {
56 double signal;
57 double noise;
70 double snr;
71 double rssi;
77typedef std::map <WifiSpectrumBand, double> RxPowerWattPerChannelBand;
79class WifiPsdu;
80class WifiPhy;
82class Event;
84class WifiPsdu;
85class WifiPpdu;
95class PhyEntity : public SimpleRefCount<PhyEntity>
103 {
104 DROP = 0,
107 };
113 {
114 /* *NS_CHECK_STYLE_OFF* */
115 bool isSuccess {true};
123 PhyFieldRxStatus (bool s) : isSuccess (s) {};
132 /* *NS_CHECK_STYLE_ON* */
133 };
138 struct SnrPer
139 {
140 double snr {0.0};
141 double per {1.0};
145 SnrPer () {};
152 SnrPer (double s, double p) : snr (s), per (p) {};
153 };
158 virtual ~PhyEntity ();
165 void SetOwner (Ptr<WifiPhy> wifiPhy);
174 virtual bool IsModeSupported (WifiMode mode) const;
178 virtual uint8_t GetNumModes (void) const;
188 virtual WifiMode GetMcs (uint8_t index) const;
198 virtual bool IsMcsSupported (uint8_t index) const;
205 virtual bool HandlesMcsModes (void) const;
215 virtual WifiMode GetSigMode (WifiPpduField field, const WifiTxVector& txVector) const;
222 std::list<WifiMode>::const_iterator begin (void) const;
228 std::list<WifiMode>::const_iterator end (void) const;
237 WifiPpduField GetNextField (WifiPpduField currentField, WifiPreamble preamble) const;
248 virtual Time GetDuration (WifiPpduField field, const WifiTxVector& txVector) const;
272 virtual Time GetPayloadDuration (uint32_t size, const WifiTxVector& txVector, WifiPhyBand band, MpduType mpdutype,
273 bool incFlag, uint32_t &totalAmpduSize, double &totalAmpduNumSymbols,
274 uint16_t staId) const = 0;
285 virtual WifiConstPsduMap GetWifiConstPsduMap (Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) const;
292 virtual uint32_t GetMaxPsduSize (void) const = 0;
298 typedef std::pair<std::pair<Time /* start */, Time /* stop */>, WifiMode> PhyHeaderChunkInfo;
303 typedef std::map<WifiPpduField, PhyHeaderChunkInfo> PhyHeaderSections;
315 PhyHeaderSections GetPhyHeaderSections (const WifiTxVector& txVector, Time ppduStart) const;
326 virtual Ptr<WifiPpdu> BuildPpdu (const WifiConstPsduMap & psdus, const WifiTxVector& txVector, Time ppduDuration);
335 Time GetDurationUpToField (WifiPpduField field, const WifiTxVector& txVector) const;
364 Time rxDuration);
377 void StartReceiveField (WifiPpduField field, Ptr<Event> event);
389 void EndReceiveField (WifiPpduField field, Ptr<Event> event);
396 void EndReceivePayload (Ptr<Event> event);
403 void ResetReceive (Ptr<Event> event);
408 virtual void CancelAllEvents (void);
412 bool NoEndPreambleDetectionEvents (void) const;
418 void CancelRunningEndPreambleDetectionEvents (bool clear = false);
427 virtual uint16_t GetStaId (const Ptr<const WifiPpdu> ppdu) const;
435 virtual void SwitchMaybeToCcaBusy (const Ptr<const WifiPpdu> ppdu);
443 virtual void NotifyCcaBusy (const Ptr<const WifiPpdu> ppdu, Time duration, WifiChannelListType channelType);
452 virtual void StartTx (Ptr<const WifiPpdu> ppdu, const WifiTxVector& txVector);
464 void Transmit (Time txDuration, Ptr<const WifiPpdu> ppdu, const WifiTxVector& txVector, std::string type);
473 virtual Time CalculateTxDuration (WifiConstPsduMap psduMap, const WifiTxVector& txVector, WifiPhyBand band) const;
482 virtual double GetCcaThreshold (const Ptr<const WifiPpdu> ppdu, WifiChannelListType channelType) const;
489 typedef std::map<WifiPreamble, std::vector<WifiPpduField> > PpduFormats;
494 typedef std::pair<WifiCodeRate, uint16_t> CodeRateConstellationSizePair;
499 typedef std::map<std::string, CodeRateConstellationSizePair> ModulationLookupTable;
506 virtual const PpduFormats & GetPpduFormats (void) const = 0;
516 virtual bool DoStartReceiveField (WifiPpduField field, Ptr<Event> event);
568 void StartReceivePayload (Ptr<Event> event);
577 virtual Time DoStartReceivePayload (Ptr<Event> event);
585 virtual void DoResetReceive (Ptr<Event> event);
602 virtual bool IsConfigSupported (Ptr<const WifiPpdu> ppdu) const;
621 void ErasePreambleEvent (Ptr<const WifiPpdu> ppdu, Time rxDuration);
634 std::pair<bool, SignalNoiseDbm> GetReceptionStatus (Ptr<const WifiPsdu> psdu,
635 Ptr<Event> event, uint16_t staId,
636 Time relativeMpduStart,
637 Time mpduDuration);
647 void EndOfMpdu (Ptr<Event> event, Ptr<const WifiPsdu> psdu, size_t mpduIndex, Time relativeStart, Time mpduDuration);
654 void ScheduleEndOfMpdus (Ptr<Event> event);
665 virtual void RxPayloadSucceeded (Ptr<const WifiPsdu> psdu, RxSignalInfo rxSignalInfo,
666 const WifiTxVector& txVector, uint16_t staId,
667 const std::vector<bool>& statusPerMpdu);
675 virtual void RxPayloadFailed (Ptr<const WifiPsdu> psdu, double snr, const WifiTxVector& txVector);
683 virtual void DoEndReceivePayload (Ptr<const WifiPpdu> ppdu);
692 virtual std::pair<uint16_t, WifiSpectrumBand> GetChannelWidthAndBand (const WifiTxVector& txVector, uint16_t staId) const;
707 double GetRandomValue (void) const;
724 double GetRxPowerWForPpdu (Ptr<Event> event) const;
738 const std::map <std::pair<uint64_t, WifiPreamble>, Ptr<Event> > & GetCurrentPreambleEvents (void) const;
745 void AddPreambleEvent (Ptr<Event> event);
753 Ptr<Event> CreateInterferenceEvent (Ptr<const WifiPpdu> ppdu, const WifiTxVector& txVector, Time duration, RxPowerWattPerChannelBand& rxPower, bool isStartOfdmaRxing = false);
767 void NotifyInterferenceRxEndAndClear (bool reset);
776 virtual uint64_t ObtainNextUid (const WifiTxVector& txVector);
787 virtual Ptr<SpectrumValue> GetTxPowerSpectralDensity (double txPowerW, Ptr<const WifiPpdu> ppdu, const WifiTxVector& txVector) const = 0;
797 uint16_t GetCenterFrequencyForChannelWidth (const WifiTxVector& txVector) const;
805 void NotifyPayloadBegin (const WifiTxVector& txVector, const Time& payloadDuration);
818 WifiSpectrumBand GetPrimaryBand (uint16_t bandWidth) const;
828 WifiSpectrumBand GetSecondaryBand (uint16_t bandWidth) const;
836 virtual uint16_t GetMeasurementChannelWidth (const Ptr<const WifiPpdu> ppdu) const = 0;
844 virtual uint16_t GetRxChannelWidth (const WifiTxVector& txVector) const;
853 Time GetDelayUntilCcaEnd (double thresholdDbm, WifiSpectrumBand band);
862 uint16_t GetGuardBandwidth (uint16_t currentChannelWidth) const;
871 std::tuple<double, double, double> GetTxMaskRejectionParams (void) const;
873 using CcaIndication = std::optional<std::pair<Time, WifiChannelListType>>;
887 std::list<WifiMode> m_modeList;
889 std::vector <EventId> m_endPreambleDetectionEvents;
890 std::vector <EventId> m_endOfMpduEvents;
892 std::vector <EventId> m_endRxPayloadEvents;
897 typedef std::pair <uint64_t /* UID */, uint16_t /* STA-ID */> UidStaIdPair;
899 std::map<UidStaIdPair, std::vector<bool> > m_statusPerMpduMap;
900 std::map<UidStaIdPair, SignalNoiseDbm> m_signalNoiseMap;
902 static uint64_t m_globalPpduUid;
903}; //class PhyEntity
912std::ostream& operator<< (std::ostream& os, const PhyEntity::PhyRxFailureAction &action);
920std::ostream& operator<< (std::ostream& os, const PhyEntity::PhyFieldRxStatus &status);
922} //namespace ns3
924#endif /* PHY_ENTITY_H */
handles interference calculations
handles interference calculations
Abstract class for PHY entities.
Definition: phy-entity.h:96
void NotifyPayloadBegin(const WifiTxVector &txVector, const Time &payloadDuration)
Fire the trace indicating that the PHY is starting to receive the payload of a PPDU.
Definition: phy-entity.cc:1129
const std::map< std::pair< uint64_t, WifiPreamble >, Ptr< Event > > & GetCurrentPreambleEvents(void) const
Get the map of current preamble events (stored in WifiPhy).
Definition: phy-entity.cc:744
void DropPreambleEvent(Ptr< const WifiPpdu > ppdu, WifiPhyRxfailureReason reason, Time endRx)
Drop the PPDU and the corresponding preamble detection event, but keep CCA busy state after the compl...
Definition: phy-entity.cc:485
virtual void RxPayloadSucceeded(Ptr< const WifiPsdu > psdu, RxSignalInfo rxSignalInfo, const WifiTxVector &txVector, uint16_t staId, const std::vector< bool > &statusPerMpdu)
Perform amendment-specific actions when the payload is successfully received.
Definition: phy-entity.cc:673
virtual PhyFieldRxStatus DoEndReceivePreamble(Ptr< Event > event)
End receiving the preamble, perform amendment-specific actions, and provide the status of the recepti...
Definition: phy-entity.cc:799
Ptr< WifiPhyStateHelper > m_state
Pointer to WifiPhyStateHelper of the WifiPhy (to make it reachable for child classes)
Definition: phy-entity.h:885
virtual void RxPayloadFailed(Ptr< const WifiPsdu > psdu, double snr, const WifiTxVector &txVector)
Perform amendment-specific actions when the payload is unsuccessfully received.
Definition: phy-entity.cc:683
void EndPreambleDetectionPeriod(Ptr< Event > event)
End the preamble detection period.
Definition: phy-entity.cc:816
virtual void NotifyCcaBusy(const Ptr< const WifiPpdu > ppdu, Time duration, WifiChannelListType channelType)
Notify PHY state helper to switch to CCA busy state,.
Definition: phy-entity.cc:1106
virtual Ptr< WifiPpdu > BuildPpdu(const WifiConstPsduMap &psdus, const WifiTxVector &txVector, Time ppduDuration)
Build amendment-specific PPDU.
Definition: phy-entity.cc:230
virtual Time GetDuration(WifiPpduField field, const WifiTxVector &txVector) const
Get the duration of the PPDU field (or group of fields) used by this entity for the given transmissio...
Definition: phy-entity.cc:178
virtual uint64_t ObtainNextUid(const WifiTxVector &txVector)
Obtain the next UID for the PPDU to transmit.
Definition: phy-entity.cc:1114
virtual void CancelAllEvents(void)
Cancel and clear all running events.
Definition: phy-entity.cc:932
virtual Time DoStartReceivePayload(Ptr< Event > event)
Start receiving the PSDU (i.e.
Definition: phy-entity.cc:539
virtual void StartReceivePreamble(Ptr< const WifiPpdu > ppdu, RxPowerWattPerChannelBand &rxPowersW, Time rxDuration)
Start receiving the PHY preamble of a PPDU (i.e.
Definition: phy-entity.cc:365
virtual void StartTx(Ptr< const WifiPpdu > ppdu, const WifiTxVector &txVector)
This function is called by SpectrumWifiPhy to send the PPDU while performing amendment-specific actio...
Definition: phy-entity.cc:1135
virtual Time GetPayloadDuration(uint32_t size, const WifiTxVector &txVector, WifiPhyBand band, MpduType mpdutype, bool incFlag, uint32_t &totalAmpduSize, double &totalAmpduNumSymbols, uint16_t staId) const =0
Ptr< Event > CreateInterferenceEvent(Ptr< const WifiPpdu > ppdu, const WifiTxVector &txVector, Time duration, RxPowerWattPerChannelBand &rxPower, bool isStartOfdmaRxing=false)
Create an event using WifiPhy's InterferenceHelper class.
Definition: phy-entity.cc:770
std::pair< WifiCodeRate, uint16_t > CodeRateConstellationSizePair
A pair to hold modulation information: code rate and constellation size.
Definition: phy-entity.h:494
std::map< UidStaIdPair, SignalNoiseDbm > m_signalNoiseMap
Map of the latest signal power and noise power in dBm (noise power includes the noise figure)
Definition: phy-entity.h:900
Ptr< WifiPhy > m_wifiPhy
Pointer to the owning WifiPhy.
Definition: phy-entity.h:884
WifiSpectrumBand GetSecondaryBand(uint16_t bandWidth) const
If the channel bonding is used, return the start band index and the stop band index for the secondary...
Definition: phy-entity.cc:1047
std::map< std::string, CodeRateConstellationSizePair > ModulationLookupTable
A modulation lookup table using unique name of modulation as key.
Definition: phy-entity.h:499
std::pair< std::pair< Time, Time >, WifiMode > PhyHeaderChunkInfo
A pair containing information on the PHY header chunk, namely the start and stop times of the chunk a...
Definition: phy-entity.h:298
std::vector< EventId > m_endOfMpduEvents
the end of MPDU events (only used for A-MPDUs)
Definition: phy-entity.h:890
bool NoEndPreambleDetectionEvents(void) const
Definition: phy-entity.cc:953
virtual uint16_t GetMeasurementChannelWidth(const Ptr< const WifiPpdu > ppdu) const =0
Return the channel width used to measure the RSSI.
virtual std::pair< uint16_t, WifiSpectrumBand > GetChannelWidthAndBand(const WifiTxVector &txVector, uint16_t staId) const
Get the channel width and band to use (will be overloaded by child classes).
Definition: phy-entity.cc:737
std::list< WifiMode >::const_iterator end(void) const
Return a const iterator to past-the-last WifiMode.
Definition: phy-entity.cc:136
virtual ~PhyEntity()
Destructor for PHY entity.
Definition: phy-entity.cc:75
virtual double GetCcaThreshold(const Ptr< const WifiPpdu > ppdu, WifiChannelListType channelType) const
Return the CCA threshold in dBm for a given channel type.
Definition: phy-entity.cc:1060
double GetRandomValue(void) const
Obtain a random value from the WifiPhy's generator.
Definition: phy-entity.cc:1019
virtual bool DoStartReceiveField(WifiPpduField field, Ptr< Event > event)
Start receiving a given field, perform amendment-specific actions, and signify if it is supported.
Definition: phy-entity.cc:335
void SetOwner(Ptr< WifiPhy > wifiPhy)
Set the WifiPhy owning this PHY entity.
Definition: phy-entity.cc:83
virtual bool HandlesMcsModes(void) const
Check if the WifiModes handled by this PHY are MCSs.
Definition: phy-entity.cc:124
std::list< WifiMode >::const_iterator begin(void) const
Return a const iterator to the first WifiMode.
Definition: phy-entity.cc:130
std::tuple< double, double, double > GetTxMaskRejectionParams(void) const
Definition: phy-entity.cc:1167
virtual const PpduFormats & GetPpduFormats(void) const =0
Return the PPDU formats of the PHY.
virtual void DoAbortCurrentReception(WifiPhyRxfailureReason reason)
Perform amendment-specific actions before aborting the current reception.
Definition: phy-entity.cc:984
void AbortCurrentReception(WifiPhyRxfailureReason reason)
Abort the current reception.
Definition: phy-entity.cc:976
void EndReceivePayload(Ptr< Event > event)
The last symbol of the PPDU has arrived.
Definition: phy-entity.cc:634
std::map< WifiPreamble, std::vector< WifiPpduField > > PpduFormats
A map of PPDU field elements per preamble type.
Definition: phy-entity.h:489
static uint64_t m_globalPpduUid
Global counter of the PPDU UID.
Definition: phy-entity.h:902
PhyHeaderSections GetPhyHeaderSections(const WifiTxVector &txVector, Time ppduStart) const
Return a map of PHY header chunk information per PPDU field.
Definition: phy-entity.cc:211
virtual bool IsMcsSupported(uint8_t index) const
Check if the WifiMode corresponding to the given MCS index is supported.
Definition: phy-entity.cc:117
void StartReceivePayload(Ptr< Event > event)
Start receiving the PSDU (i.e.
Definition: phy-entity.cc:529
std::vector< EventId > m_endRxPayloadEvents
the end of receive events (only one unless UL MU reception)
Definition: phy-entity.h:892
virtual void DoResetReceive(Ptr< Event > event)
Perform amendment-specific actions before resetting PHY at the end of the PPDU under reception after ...
Definition: phy-entity.cc:1012
void EndReceiveField(WifiPpduField field, Ptr< Event > event)
End receiving a given field.
Definition: phy-entity.cc:282
virtual Ptr< Event > DoGetEvent(Ptr< const WifiPpdu > ppdu, RxPowerWattPerChannelBand &rxPowersW)
Get the event corresponding to the incoming PPDU.
Definition: phy-entity.cc:758
virtual WifiMode GetSigMode(WifiPpduField field, const WifiTxVector &txVector) const
Get the WifiMode for the SIG field specified by the PPDU field.
Definition: phy-entity.cc:142
WifiPpduField GetNextField(WifiPpduField currentField, WifiPreamble preamble) const
Return the field following the provided one.
Definition: phy-entity.cc:149
std::map< WifiPpduField, PhyHeaderChunkInfo > PhyHeaderSections
A map of PhyHeaderChunkInfo elements per PPDU field.
Definition: phy-entity.h:303
double GetRxPowerWForPpdu(Ptr< Event > event) const
Obtain the received power (W) for a given band.
Definition: phy-entity.cc:1025
virtual void SwitchMaybeToCcaBusy(const Ptr< const WifiPpdu > ppdu)
Check if PHY state should move to CCA busy state based on current state of interference tracker.
Definition: phy-entity.cc:1072
Time CalculatePhyPreambleAndHeaderDuration(const WifiTxVector &txVector) const
Definition: phy-entity.cc:188
void NotifyInterferenceRxEndAndClear(bool reset)
Notify WifiPhy's InterferenceHelper of the end of the reception, clear maps and end of MPDU event,...
Definition: phy-entity.cc:782
void StartPreambleDetectionPeriod(Ptr< Event > event)
Start the preamble detection period.
Definition: phy-entity.cc:807
Time GetDurationUpToField(WifiPpduField field, const WifiTxVector &txVector) const
Get the duration of the PPDU up to (but excluding) the given field.
Definition: phy-entity.cc:239
std::map< UidStaIdPair, std::vector< bool > > m_statusPerMpduMap
Map of the current reception status per MPDU that is filled in as long as MPDUs are being processed b...
Definition: phy-entity.h:899
virtual uint32_t GetMaxPsduSize(void) const =0
Get the maximum PSDU size in bytes.
virtual uint16_t GetRxChannelWidth(const WifiTxVector &txVector) const
Return the channel width used in the reception spectrum model.
Definition: phy-entity.cc:1054
Time GetDelayUntilCcaEnd(double thresholdDbm, WifiSpectrumBand band)
Return the delay until CCA busy is ended for a given sensitivity threshold (in dBm) and a given band.
Definition: phy-entity.cc:1066
void CancelRunningEndPreambleDetectionEvents(bool clear=false)
Cancel and eventually clear all end preamble detection events.
Definition: phy-entity.cc:959
Time GetRemainingDurationAfterField(Ptr< const WifiPpdu > ppdu, WifiPpduField field) const
Get the remaining duration of the PPDU after the end of the given field.
Definition: phy-entity.cc:328
virtual uint16_t GetStaId(const Ptr< const WifiPpdu > ppdu) const
Return the STA ID that has been assigned to the station this PHY belongs to.
Definition: phy-entity.cc:523
virtual Time CalculateTxDuration(WifiConstPsduMap psduMap, const WifiTxVector &txVector, WifiPhyBand band) const
Definition: phy-entity.cc:1173
void StartReceiveField(WifiPpduField field, Ptr< Event > event)
Start receiving a given field.
Definition: phy-entity.cc:261
void Transmit(Time txDuration, Ptr< const WifiPpdu > ppdu, const WifiTxVector &txVector, std::string type)
This function prepares most of the WifiSpectrumSignalParameters parameters and invokes SpectrumWifiPh...
Definition: phy-entity.cc:1142
uint16_t GetGuardBandwidth(uint16_t currentChannelWidth) const
Definition: phy-entity.cc:1161
virtual bool IsModeSupported(WifiMode mode) const
Check if the WifiMode is supported.
Definition: phy-entity.cc:91
void ResetReceive(Ptr< Event > event)
Reset PHY at the end of the PPDU under reception after it has failed the PHY header.
Definition: phy-entity.cc:998
std::optional< std::pair< Time, WifiChannelListType > > CcaIndication
CCA end time and its corresponding channel list type (can be std::nullopt if IDLE)
Definition: phy-entity.h:873
virtual CcaIndication GetCcaIndication(const Ptr< const WifiPpdu > ppdu)
Get CCA end time and its corresponding channel list type when a new signal has been received by the P...
Definition: phy-entity.cc:1092
std::list< WifiMode > m_modeList
the list of supported modes
Definition: phy-entity.h:887
std::pair< uint64_t, uint16_t > UidStaIdPair
A pair of a UID and STA_ID.
Definition: phy-entity.h:897
std::vector< EventId > m_endPreambleDetectionEvents
the end of preamble detection events
Definition: phy-entity.h:889
virtual Ptr< const WifiPsdu > GetAddressedPsduInPpdu(Ptr< const WifiPpdu > ppdu) const
Get the PSDU addressed to that PHY in a PPDU (useful for MU PPDU).
Definition: phy-entity.cc:205
SnrPer GetPhyHeaderSnrPer(WifiPpduField field, Ptr< Event > event) const
Obtain the SNR and PER of the PPDU field from the WifiPhy's InterferenceHelper class.
Definition: phy-entity.cc:253
void ErasePreambleEvent(Ptr< const WifiPpdu > ppdu, Time rxDuration)
Erase the event corresponding to the PPDU from the list of preamble events, but consider it as noise ...
Definition: phy-entity.cc:502
virtual Ptr< SpectrumValue > GetTxPowerSpectralDensity(double txPowerW, Ptr< const WifiPpdu > ppdu, const WifiTxVector &txVector) const =0
Ptr< const Event > GetCurrentEvent(void) const
Get the pointer to the current event (stored in WifiPhy).
Definition: phy-entity.cc:1031
virtual WifiMode GetMcs(uint8_t index) const
Get the WifiMode corresponding to the given MCS index.
Definition: phy-entity.cc:110
void AddPreambleEvent(Ptr< Event > event)
Add an entry to the map of current preamble events (stored in WifiPhy).
Definition: phy-entity.cc:750
virtual void DoEndReceivePayload(Ptr< const WifiPpdu > ppdu)
Perform amendment-specific actions at the end of the reception of the payload.
Definition: phy-entity.cc:691
uint16_t GetCenterFrequencyForChannelWidth(const WifiTxVector &txVector) const
Get the center frequency of the channel corresponding the current TxVector rather than that of the su...
Definition: phy-entity.cc:1121
virtual WifiConstPsduMap GetWifiConstPsduMap(Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector) const
Get a WifiConstPsduMap from a PSDU and the TXVECTOR to use to send the PSDU.
Definition: phy-entity.cc:199
virtual bool IsConfigSupported(Ptr< const WifiPpdu > ppdu) const
Checks if the signaled configuration (excluding bandwidth) is supported by the PHY.
Definition: phy-entity.cc:920
WifiSpectrumBand GetPrimaryBand(uint16_t bandWidth) const
If the operating channel width is a multiple of 20 MHz, return the start band index and the stop band...
Definition: phy-entity.cc:1037
Action to perform in case of RX failure.
Definition: phy-entity.h:103
drop PPDU and set CCA_BUSY
Definition: phy-entity.h:104
ignore the reception
Definition: phy-entity.h:106
abort reception of PPDU
Definition: phy-entity.h:105
void UpdateInterferenceEvent(Ptr< Event > event, const RxPowerWattPerChannelBand &rxPower)
Update an event in WifiPhy's InterferenceHelper class.
Definition: phy-entity.cc:776
std::pair< bool, SignalNoiseDbm > GetReceptionStatus(Ptr< const WifiPsdu > psdu, Ptr< Event > event, uint16_t staId, Time relativeMpduStart, Time mpduDuration)
Get the reception status for the provided MPDU and notify.
Definition: phy-entity.cc:703
void EndOfMpdu(Ptr< Event > event, Ptr< const WifiPsdu > psdu, size_t mpduIndex, Time relativeStart, Time mpduDuration)
The last symbol of an MPDU in an A-MPDU has arrived.
Definition: phy-entity.cc:603
virtual PhyFieldRxStatus DoEndReceiveField(WifiPpduField field, Ptr< Event > event)
End receiving a given field, perform amendment-specific actions, and provide the status of the recept...
Definition: phy-entity.cc:353
virtual uint8_t GetNumModes(void) const
Definition: phy-entity.cc:104
void ScheduleEndOfMpdus(Ptr< Event > event)
Schedule end of MPDUs events.
Definition: phy-entity.cc:557
A template-based reference counting class.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:104
represent a single transmission mode
Definition: wifi-mode.h:48
802.11 PHY layer model
Definition: wifi-phy.h:50
This objects implements the PHY state machine of the Wifi device.
WifiPpdu stores a preamble, a modulation class, PHY headers and a PSDU.
Definition: wifi-ppdu.h:52
WifiPsdu stores an MPDU, S-MPDU or A-MPDU, by keeping header(s) and payload(s) separate for each cons...
Definition: wifi-psdu.h:41
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
Enumeration of the possible reception failure reasons.
The type of preamble to be used by an IEEE 802.11 transmission.
Identifies the PHY band.
Definition: wifi-phy-band.h:33
Enumeration of the possible channel-list parameter elements defined in Table 8-5 of IEEE 802....
The type of PPDU field (grouped for convenience)
The type of an MPDU.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID.
std::pair< uint32_t, uint32_t > WifiSpectrumBand
typedef for a pair of start and stop sub-band indexes
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:139
std::map< WifiSpectrumBand, double > RxPowerWattPerChannelBand
A map of the received power (Watts) for each band.
Definition: phy-entity.h:77
MpduInfo structure.
Definition: phy-entity.h:62
MpduType type
type of MPDU
Definition: phy-entity.h:63
uint32_t mpduRefNumber
MPDU ref number.
Definition: phy-entity.h:64
Status of the reception of the PPDU field.
Definition: phy-entity.h:113
WifiPhyRxfailureReason reason
failure reason
Definition: phy-entity.h:116
PhyRxFailureAction actionIfFailure
action to perform in case of failure
Definition: phy-entity.h:117
PhyFieldRxStatus(bool s, WifiPhyRxfailureReason r, PhyRxFailureAction a)
Definition: phy-entity.h:131
PhyFieldRxStatus(bool s)
Constructor setting outcome of reception.
Definition: phy-entity.h:123
bool isSuccess
outcome (true if success) of the reception
Definition: phy-entity.h:115
A struct for both SNR and PER.
Definition: phy-entity.h:139
SnrPer(double s, double p)
Constructor for SnrPer.
Definition: phy-entity.h:152
double snr
SNR in linear scale.
Definition: phy-entity.h:140
Default constructor.
Definition: phy-entity.h:145
RxSignalInfo structure containing info on the received signal.
Definition: phy-entity.h:69
double rssi
RSSI in dBm.
Definition: phy-entity.h:71
double snr
SNR in linear scale.
Definition: phy-entity.h:70
SignalNoiseDbm structure.
Definition: phy-entity.h:55
double noise
noise power in dBm
Definition: phy-entity.h:57
double signal
signal strength in dBm
Definition: phy-entity.h:56
Declaration of ns3::WifiPpdu class and ns3::WifiConstPsduMap.