A Discrete-Event Network Simulator
API
phy-entity.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
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
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
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  */
22 
23 #ifndef PHY_ENTITY_H
24 #define PHY_ENTITY_H
25 
26 #include "wifi-mpdu-type.h"
27 #include "wifi-tx-vector.h"
28 #include "wifi-phy-band.h"
29 #include "wifi-ppdu.h"
30 #include "wifi-mpdu-type.h"
31 #include "wifi-ppdu.h"
32 #include "ns3/event-id.h"
33 #include "ns3/simple-ref-count.h"
34 #include "ns3/nstime.h"
35 #include "ns3/wifi-spectrum-value-helper.h"
36 #include <list>
37 #include <map>
38 #include <tuple>
39 
49 namespace ns3 {
50 
53 {
54  double signal;
55  double noise;
56 };
57 
59 struct MpduInfo
60 {
62  uint32_t mpduRefNumber;
63 };
64 
67 {
68  double snr;
69  double rssi;
70 };
71 
75 typedef std::map <WifiSpectrumBand, double> RxPowerWattPerChannelBand;
76 
77 class WifiPsdu;
78 class WifiPhy;
79 class InterferenceHelper;
80 class Event;
81 class WifiPhyStateHelper;
82 class WifiPsdu;
83 class WifiPpdu;
84 
93 class PhyEntity : public SimpleRefCount<PhyEntity>
94 {
95 public:
96 
101  {
102  DROP = 0,
105  };
106 
111  {
112  /* *NS_CHECK_STYLE_OFF* */
113  bool isSuccess {true};
116 
121  PhyFieldRxStatus (bool s) : isSuccess (s) {};
130  /* *NS_CHECK_STYLE_ON* */
131  };
132 
136  struct SnrPer
137  {
138  double snr {0.0};
139  double per {1.0};
140 
143  SnrPer () {};
150  SnrPer (double s, double p) : snr (s), per (p) {};
151  };
152 
156  virtual ~PhyEntity ();
157 
163  void SetOwner (Ptr<WifiPhy> wifiPhy);
164 
172  virtual bool IsModeSupported (WifiMode mode) const;
176  virtual uint8_t GetNumModes (void) const;
177 
186  virtual WifiMode GetMcs (uint8_t index) const;
196  virtual bool IsMcsSupported (uint8_t index) const;
203  virtual bool HandlesMcsModes (void) const;
204 
215  virtual WifiMode GetSigMode (WifiPpduField field, const WifiTxVector& txVector) const;
216 
222  std::list<WifiMode>::const_iterator begin (void) const;
228  std::list<WifiMode>::const_iterator end (void) const;
229 
237  WifiPpduField GetNextField (WifiPpduField currentField, WifiPreamble preamble) const;
238 
250  virtual Time GetDuration (WifiPpduField field, const WifiTxVector& txVector) const;
257 
274  virtual Time GetPayloadDuration (uint32_t size, const WifiTxVector& txVector, WifiPhyBand band, MpduType mpdutype,
275  bool incFlag, uint32_t &totalAmpduSize, double &totalAmpduNumSymbols,
276  uint16_t staId) const = 0;
277 
287  virtual WifiConstPsduMap GetWifiConstPsduMap (Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) const;
288 
294  virtual uint32_t GetMaxPsduSize (void) const = 0;
295 
300  typedef std::pair<std::pair<Time /* start */, Time /* stop */>, WifiMode> PhyHeaderChunkInfo;
305  typedef std::map<WifiPpduField, PhyHeaderChunkInfo> PhyHeaderSections;
317  PhyHeaderSections GetPhyHeaderSections (const WifiTxVector& txVector, Time ppduStart) const;
318 
331  virtual Ptr<WifiPpdu> BuildPpdu (const WifiConstPsduMap & psdus, const WifiTxVector& txVector, Time ppduDuration);
332 
340  Time GetDurationUpToField (WifiPpduField field, const WifiTxVector& txVector) const;
349 
357 
368  virtual void StartReceivePreamble (Ptr<WifiPpdu> ppdu, RxPowerWattPerChannelBand rxPowersW,
369  Time rxDuration);
383  void StartReceiveField (WifiPpduField field, Ptr<Event> event);
396  void EndReceiveField (WifiPpduField field, Ptr<Event> event);
397 
403  void EndReceivePayload (Ptr<Event> event);
404 
410  void ResetReceive (Ptr<Event> event);
411 
415  virtual void CancelAllEvents (void);
419  bool NoEndPreambleDetectionEvents (void) const;
425  void CancelRunningEndPreambleDetectionEvents (bool clear = false);
426 
434  virtual uint16_t GetStaId (const Ptr<const WifiPpdu> ppdu) const;
435 
442  virtual uint16_t GetMeasurementChannelWidth (const Ptr<const WifiPpdu> ppdu) const;
443 
451  virtual void StartTx (Ptr<WifiPpdu> ppdu);
452 
462  void Transmit (Time txDuration, Ptr<WifiPpdu> ppdu, std::string type);
463 
471  virtual uint16_t GetTransmissionChannelWidth (Ptr<const WifiPpdu> ppdu) const;
472 
480  virtual Time CalculateTxDuration (WifiConstPsduMap psduMap, const WifiTxVector& txVector, WifiPhyBand band) const;
481 
492  virtual bool CanReceivePpdu (Ptr<WifiPpdu> ppdu, uint16_t txCenterFreq) const;
493 
494 protected:
499  typedef std::map<WifiPreamble, std::vector<WifiPpduField> > PpduFormats;
500 
504  typedef std::pair<WifiCodeRate, uint16_t> CodeRateConstellationSizePair;
505 
509  typedef std::map<std::string, CodeRateConstellationSizePair> ModulationLookupTable;
510 
519  virtual const PpduFormats & GetPpduFormats (void) const = 0;
520 
529  virtual bool DoStartReceiveField (WifiPpduField field, Ptr<Event> event);
539 
575 
581  void StartReceivePayload (Ptr<Event> event);
582 
589  virtual void DoStartReceivePayload (Ptr<Event> event);
590 
597  virtual void DoResetReceive (Ptr<Event> event);
598 
605  virtual void DoAbortCurrentReception (WifiPhyRxfailureReason reason);
606 
614  virtual bool IsConfigSupported (Ptr<const WifiPpdu> ppdu) const;
615 
625  void DropPreambleEvent (Ptr<const WifiPpdu> ppdu, WifiPhyRxfailureReason reason, Time endRx, uint16_t measurementChannelWidth);
626 
634  void ErasePreambleEvent (Ptr<const WifiPpdu> ppdu, Time rxDuration);
635 
647  std::pair<bool, SignalNoiseDbm> GetReceptionStatus (Ptr<const WifiPsdu> psdu,
648  Ptr<Event> event, uint16_t staId,
649  Time relativeMpduStart,
650  Time mpduDuration);
660  void EndOfMpdu (Ptr<Event> event, Ptr<const WifiPsdu> psdu, size_t mpduIndex, Time relativeStart, Time mpduDuration);
661 
667  void ScheduleEndOfMpdus (Ptr<Event> event);
668 
675  virtual void DoEndReceivePayload (Ptr<const WifiPpdu> ppdu);
676 
684  virtual std::pair<uint16_t, WifiSpectrumBand> GetChannelWidthAndBand (const WifiTxVector& txVector, uint16_t staId) const;
685 
692 
699  double GetRandomValue (void) const;
708  SnrPer GetPhyHeaderSnrPer (WifiPpduField field, Ptr<Event> event) const;
716  double GetRxPowerWForPpdu (Ptr<Event> event) const;
723  Ptr<const Event> GetCurrentEvent (void) const;
730  const std::map <std::pair<uint64_t, WifiPreamble>, Ptr<Event> > & GetCurrentPreambleEvents (void) const;
737  void AddPreambleEvent (Ptr<Event> event);
738 
745  Ptr<Event> CreateInterferenceEvent (Ptr<const WifiPpdu> ppdu, const WifiTxVector& txVector, Time duration, RxPowerWattPerChannelBand rxPower, bool isStartOfdmaRxing = false);
759  void NotifyInterferenceRxEndAndClear (bool reset);
760 
768  virtual uint64_t ObtainNextUid (const WifiTxVector& txVector);
769 
778  virtual Ptr<SpectrumValue> GetTxPowerSpectralDensity (double txPowerW, Ptr<const WifiPpdu> ppdu) const = 0;
779 
788  uint16_t GetCenterFrequencyForChannelWidth (const WifiTxVector& txVector) const;
789 
797  uint16_t GetGuardBandwidth (uint16_t currentChannelWidth) const;
806  std::tuple<double, double, double> GetTxMaskRejectionParams (void) const;
807 
810 
811  std::list<WifiMode> m_modeList;
812 
813  std::vector <EventId> m_endPreambleDetectionEvents;
814  std::vector <EventId> m_endOfMpduEvents;
815 
816  std::vector <EventId> m_endRxPayloadEvents;
817 
821  typedef std::pair <uint64_t /* UID */, uint16_t /* STA-ID */> UidStaIdPair;
822 
823  std::map<UidStaIdPair, std::vector<bool> > m_statusPerMpduMap;
824  std::map<UidStaIdPair, SignalNoiseDbm> m_signalNoiseMap;
825 
826  static uint64_t m_globalPpduUid;
827 }; //class PhyEntity
828 
836 std::ostream& operator<< (std::ostream& os, const PhyEntity::PhyRxFailureAction &action);
844 std::ostream& operator<< (std::ostream& os, const PhyEntity::PhyFieldRxStatus &status);
845 
846 } //namespace ns3
847 
848 #endif /* PHY_ENTITY_H */
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:684
MpduInfo structure.
Definition: phy-entity.h:59
double snr
SNR in linear scale.
Definition: phy-entity.h:138
PhyFieldRxStatus(bool s, WifiPhyRxfailureReason r, PhyRxFailureAction a)
Constructor.
Definition: phy-entity.h:129
Ptr< const Event > GetCurrentEvent(void) const
Get the pointer to the current event (stored in WifiPhy).
Definition: phy-entity.cc:1003
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:350
double signal
signal strength in dBm
Definition: phy-entity.h:54
Declaration of ns3::WifiPpdu class and ns3::WifiConstPsduMap.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:103
PhyFieldRxStatus(bool s)
Constructor setting outcome of reception.
Definition: phy-entity.h:121
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:824
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:325
void AbortCurrentReception(WifiPhyRxfailureReason reason)
Abort the current reception.
Definition: phy-entity.cc:952
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
PhyRxFailureAction actionIfFailure
action to perform in case of failure
Definition: phy-entity.h:115
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:974
std::vector< EventId > m_endOfMpduEvents
the end of MPDU events (only used for A-MPDUs)
Definition: phy-entity.h:814
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID.
Definition: wifi-ppdu.h:38
802.11 PHY layer model
Definition: wifi-phy.h:48
handles interference calculations
WifiPhyRxfailureReason reason
failure reason
Definition: phy-entity.h:114
virtual void DoAbortCurrentReception(WifiPhyRxfailureReason reason)
Perform amendment-specific actions before aborting the current reception.
Definition: phy-entity.cc:960
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
virtual Ptr< Event > DoGetEvent(Ptr< const WifiPpdu > ppdu, RxPowerWattPerChannelBand rxPowersW)
Get the event corresponding to the incoming PPDU.
Definition: phy-entity.cc:739
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:780
virtual bool CanReceivePpdu(Ptr< WifiPpdu > ppdu, uint16_t txCenterFreq) const
Check whether the given PPDU can be received by this PHY entity.
Definition: phy-entity.cc:1081
WifiPhyRxfailureReason
Enumeration of the possible reception failure reasons.
virtual void StartTx(Ptr< WifiPpdu > ppdu)
This function is called by SpectrumWifiPhy to send the PPDU while performing amendment-specific actio...
Definition: phy-entity.cc:1030
void StartPreambleDetectionPeriod(Ptr< Event > event)
Start the preamble detection period.
Definition: phy-entity.cc:788
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:519
virtual bool HandlesMcsModes(void) const
Check if the WifiModes handled by this PHY are MCSs.
Definition: phy-entity.cc:123
bool NoEndPreambleDetectionEvents(void) const
Definition: phy-entity.cc:929
std::list< WifiMode >::const_iterator begin(void) const
Return a const iterator to the first WifiMode.
Definition: phy-entity.cc:129
void StartReceivePayload(Ptr< Event > event)
Start receiving the PSDU (i.e.
Definition: phy-entity.cc:525
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
Definition: wifi-mode.h:47
std::map< std::string, CodeRateConstellationSizePair > ModulationLookupTable
A modulation lookup table using unique name of modulation as key.
Definition: phy-entity.h:509
virtual const PpduFormats & GetPpduFormats(void) const =0
Return the PPDU formats of the PHY.
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:725
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:300
std::map< WifiPpduField, PhyHeaderChunkInfo > PhyHeaderSections
A map of PhyHeaderChunkInfo elements per PPDU field.
Definition: phy-entity.h:305
SnrPer(double s, double p)
Constructor for SnrPer.
Definition: phy-entity.h:150
MpduType
The type of an MPDU.
PhyRxFailureAction
Action to perform in case of RX failure.
Definition: phy-entity.h:100
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:137
std::tuple< double, double, double > GetTxMaskRejectionParams(void) const
Definition: phy-entity.cc:1061
virtual ~PhyEntity()
Destructor for PHY entity.
Definition: phy-entity.cc:74
WifiPreamble
The type of preamble to be used by an IEEE 802.11 transmission.
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:203
RxSignalInfo structure containing info on the received signal.
Definition: phy-entity.h:66
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:600
SnrPer GetPhyHeaderSnrPer(WifiPpduField field, Ptr< Event > event) const
Obtain the SNR and PER of the PPDU field from the WifiPhy&#39;s InterferenceHelper class.
Definition: phy-entity.cc:250
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:718
Status of the reception of the PPDU field.
Definition: phy-entity.h:110
virtual bool IsConfigSupported(Ptr< const WifiPpdu > ppdu) const
Checks if the signaled configuration (excluding bandwidth) is supported by the PHY.
Definition: phy-entity.cc:901
double rssi
RSSI in dBm.
Definition: phy-entity.h:69
void DropPreambleEvent(Ptr< const WifiPpdu > ppdu, WifiPhyRxfailureReason reason, Time endRx, uint16_t measurementChannelWidth)
Drop the PPDU and the corresponding preamble detection event, but keep CCA busy state after the compl...
Definition: phy-entity.cc:481
virtual uint16_t GetTransmissionChannelWidth(Ptr< const WifiPpdu > ppdu) const
Get the channel width over which the PPDU will be effectively be transmitted.
Definition: phy-entity.cc:1067
WifiPpduField
The type of PPDU field (grouped for convenience)
void EndReceivePayload(Ptr< Event > event)
The last symbol of the PPDU has arrived.
Definition: phy-entity.cc:633
std::pair< WifiCodeRate, uint16_t > CodeRateConstellationSizePair
A pair to hold modulation information: code rate and constellation size.
Definition: phy-entity.h:504
virtual void StartReceivePreamble(Ptr< WifiPpdu > ppdu, RxPowerWattPerChannelBand rxPowersW, Time rxDuration)
Start receiving the PHY preamble of a PPDU (i.e.
Definition: phy-entity.cc:362
virtual bool IsMcsSupported(uint8_t index) const
Check if the WifiMode corresponding to the given MCS index is supported.
Definition: phy-entity.cc:116
std::vector< EventId > m_endPreambleDetectionEvents
the end of preamble detection events
Definition: phy-entity.h:813
virtual uint32_t GetMaxPsduSize(void) const =0
Get the maximum PSDU size in bytes.
Abstract class for PHY entitiesThis class enables to have a unique set of APIs to be used by each PHY...
Definition: phy-entity.h:93
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:176
virtual uint64_t ObtainNextUid(const WifiTxVector &txVector)
Obtain the next UID for the PPDU to transmit.
Definition: phy-entity.cc:1015
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:1022
bool isSuccess
outcome (true if success) of the reception
Definition: phy-entity.h:113
void ScheduleEndOfMpdus(Ptr< Event > event)
Schedule end of MPDUs events.
Definition: phy-entity.cc:554
A struct for both SNR and PER.
Definition: phy-entity.h:136
virtual Ptr< WifiPpdu > BuildPpdu(const WifiConstPsduMap &psdus, const WifiTxVector &txVector, Time ppduDuration)
Build amendment-specific PPDU.
Definition: phy-entity.cc:228
virtual uint8_t GetNumModes(void) const
Definition: phy-entity.cc:103
void SetOwner(Ptr< WifiPhy > wifiPhy)
Set the WifiPhy owning this PHY entity.
Definition: phy-entity.cc:82
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:498
WifiPpdu stores a preamble, a modulation class, PHY headers and a PSDU.
Definition: wifi-ppdu.h:51
WifiPsdu stores an MPDU, S-MPDU or A-MPDU, by keeping header(s) and payload(s) separate for each cons...
Definition: wifi-psdu.h:40
SnrPer()
Default constructor.
Definition: phy-entity.h:143
abort reception of PPDU
Definition: phy-entity.h:103
Time CalculatePhyPreambleAndHeaderDuration(const WifiTxVector &txVector) const
Definition: phy-entity.cc:186
Ptr< WifiPhyStateHelper > m_state
Pointer to WifiPhyStateHelper of the WifiPhy (to make it reachable for child classes) ...
Definition: phy-entity.h:809
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:141
std::vector< EventId > m_endRxPayloadEvents
the end of receive events (only one unless UL MU reception)
Definition: phy-entity.h:816
Every class exported by the ns3 library is enclosed in the ns3 namespace.
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:197
void Transmit(Time txDuration, Ptr< WifiPpdu > ppdu, std::string type)
This function prepares most of the WifiSpectrumSignalParameters parameters and invokes SpectrumWifiPh...
Definition: phy-entity.cc:1037
void UpdateInterferenceEvent(Ptr< Event > event, RxPowerWattPerChannelBand rxPower)
Update an event in WifiPhy&#39;s InterferenceHelper class.
Definition: phy-entity.cc:757
std::pair< uint64_t, uint16_t > UidStaIdPair
A pair of a UID and STA_ID.
Definition: phy-entity.h:821
static uint64_t m_globalPpduUid
Global counter of the PPDU UID.
Definition: phy-entity.h:826
virtual void DoEndReceivePayload(Ptr< const WifiPpdu > ppdu)
Perform amendment-specific actions at the end of the reception of the payload.
Definition: phy-entity.cc:672
virtual WifiMode GetMcs(uint8_t index) const
Get the WifiMode corresponding to the given MCS index.
Definition: phy-entity.cc:109
void AddPreambleEvent(Ptr< Event > event)
Add an entry to the map of current preamble events (stored in WifiPhy).
Definition: phy-entity.cc:731
virtual void DoStartReceivePayload(Ptr< Event > event)
Start receiving the PSDU (i.e.
Definition: phy-entity.cc:540
Ptr< Event > CreateInterferenceEvent(Ptr< const WifiPpdu > ppdu, const WifiTxVector &txVector, Time duration, RxPowerWattPerChannelBand rxPower, bool isStartOfdmaRxing=false)
Create an event using WifiPhy&#39;s InterferenceHelper class.
Definition: phy-entity.cc:751
drop PPDU and set CCA_BUSY
Definition: phy-entity.h:102
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:236
WifiPhyBand
Identifies the PHY band.
Definition: wifi-phy-band.h:32
This objects implements the PHY state machine of the Wifi device.
virtual Ptr< SpectrumValue > GetTxPowerSpectralDensity(double txPowerW, Ptr< const WifiPpdu > ppdu) const =0
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:823
WifiPpduField GetNextField(WifiPpduField currentField, WifiPreamble preamble) const
Return the field following the provided one.
Definition: phy-entity.cc:148
SignalNoiseDbm structure.
Definition: phy-entity.h:52
uint32_t mpduRefNumber
MPDU ref number.
Definition: phy-entity.h:62
void NotifyInterferenceRxEndAndClear(bool reset)
Notify WifiPhy&#39;s InterferenceHelper of the end of the reception, clear maps and end of MPDU event...
Definition: phy-entity.cc:763
double snr
SNR in linear scale.
Definition: phy-entity.h:68
virtual Time CalculateTxDuration(WifiConstPsduMap psduMap, const WifiTxVector &txVector, WifiPhyBand band) const
Definition: phy-entity.cc:1073
std::map< WifiPreamble, std::vector< WifiPpduField > > PpduFormats
A map of PPDU field elements per preamble type.
Definition: phy-entity.h:499
PhyHeaderSections GetPhyHeaderSections(const WifiTxVector &txVector, Time ppduStart) const
Return a map of PHY header chunk information per PPDU field.
Definition: phy-entity.cc:209
double GetRandomValue(void) const
Obtain a random value from the WifiPhy&#39;s generator.
Definition: phy-entity.cc:991
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:332
void EndPreambleDetectionPeriod(Ptr< Event > event)
End the preamble detection period.
Definition: phy-entity.cc:797
void StartReceiveField(WifiPpduField field, Ptr< Event > event)
Start receiving a given field.
Definition: phy-entity.cc:258
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:984
double noise
noise power in dBm
Definition: phy-entity.h:55
ignore the reception
Definition: phy-entity.h:104
handles interference calculations
std::list< WifiMode >::const_iterator end(void) const
Return a const iterator to past-the-last WifiMode.
Definition: phy-entity.cc:135
virtual void CancelAllEvents(void)
Cancel and clear all running events.
Definition: phy-entity.cc:913
MpduType type
type of MPDU
Definition: phy-entity.h:61
A template-based reference counting class.
void CancelRunningEndPreambleDetectionEvents(bool clear=false)
Cancel and eventually clear all end preamble detection events.
Definition: phy-entity.cc:935
virtual bool IsModeSupported(WifiMode mode) const
Check if the WifiMode is supported.
Definition: phy-entity.cc:90
double GetRxPowerWForPpdu(Ptr< Event > event) const
Obtain the received power (W) for a given band.
Definition: phy-entity.cc:997
std::map< WifiSpectrumBand, double > RxPowerWattPerChannelBand
A map of the received power (Watts) for each band.
Definition: phy-entity.h:75
void EndReceiveField(WifiPpduField field, Ptr< Event > event)
End receiving a given field.
Definition: phy-entity.cc:279
std::list< WifiMode > m_modeList
the list of supported modes
Definition: phy-entity.h:811
Ptr< WifiPhy > m_wifiPhy
Pointer to the owning WifiPhy.
Definition: phy-entity.h:808
virtual uint16_t GetMeasurementChannelWidth(const Ptr< const WifiPpdu > ppdu) const
Return the channel width used to measure the RSSI.
Definition: phy-entity.cc:1009
uint16_t GetGuardBandwidth(uint16_t currentChannelWidth) const
Definition: phy-entity.cc:1055