A Discrete-Event Network Simulator
API
phy-entity.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Orange Labs
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation;
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16  *
17  * Authors: Rediet <getachew.redieteab@orange.com>
18  * Sébastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy and
19  * spectrum-wifi-phy) Mathieu Lacage <mathieu.lacage@sophia.inria.fr> (for logic ported from
20  * wifi-phy)
21  */
22 
23 #ifndef PHY_ENTITY_H
24 #define PHY_ENTITY_H
25 
26 #include "wifi-mpdu-type.h"
27 #include "wifi-phy-band.h"
28 #include "wifi-ppdu.h"
29 #include "wifi-tx-vector.h"
30 
31 #include "ns3/event-id.h"
32 #include "ns3/nstime.h"
33 #include "ns3/simple-ref-count.h"
34 
35 #include <list>
36 #include <map>
37 #include <optional>
38 #include <tuple>
39 #include <utility>
40 
50 namespace ns3
51 {
52 
55 {
56  double signal;
57  double noise;
58 };
59 
61 struct MpduInfo
62 {
64  uint32_t mpduRefNumber;
65 };
66 
69 {
70  double snr;
71  double rssi;
72 };
73 
77 using RxPowerWattPerChannelBand = std::map<WifiSpectrumBandInfo, double>;
78 
79 class WifiPsdu;
80 class WifiPhy;
81 class InterferenceHelper;
82 class Event;
83 class WifiPhyStateHelper;
84 class WifiPsdu;
85 class WifiPpdu;
86 
95 class PhyEntity : public SimpleRefCount<PhyEntity>
96 {
97  public:
102  {
103  DROP = 0,
105  IGNORE
106  };
107 
112  {
113  bool isSuccess{true};
116  DROP};
117 
124  : isSuccess(s)
125  {
126  }
127 
136  : isSuccess(s),
137  reason(r),
138  actionIfFailure(a)
139  {
140  }
141  };
142 
146  struct SnrPer
147  {
148  double snr{0.0};
149  double per{1.0};
150 
155  {
156  }
157 
164  SnrPer(double s, double p)
165  : snr(s),
166  per(p)
167  {
168  }
169  };
170 
174  virtual ~PhyEntity();
175 
181  void SetOwner(Ptr<WifiPhy> wifiPhy);
182 
190  virtual bool IsModeSupported(WifiMode mode) const;
194  virtual uint8_t GetNumModes() const;
195 
204  virtual WifiMode GetMcs(uint8_t index) const;
214  virtual bool IsMcsSupported(uint8_t index) const;
221  virtual bool HandlesMcsModes() const;
222 
231  virtual WifiMode GetSigMode(WifiPpduField field, const WifiTxVector& txVector) const;
232 
238  std::list<WifiMode>::const_iterator begin() const;
244  std::list<WifiMode>::const_iterator end() const;
245 
253  WifiPpduField GetNextField(WifiPpduField currentField, WifiPreamble preamble) const;
254 
264  virtual Time GetDuration(WifiPpduField field, const WifiTxVector& txVector) const;
271 
289  virtual Time GetPayloadDuration(uint32_t size,
290  const WifiTxVector& txVector,
291  WifiPhyBand band,
292  MpduType mpdutype,
293  bool incFlag,
294  uint32_t& totalAmpduSize,
295  double& totalAmpduNumSymbols,
296  uint16_t staId) const = 0;
297 
308  const WifiTxVector& txVector) const;
309 
315  virtual uint32_t GetMaxPsduSize() const = 0;
316 
321  typedef std::pair<std::pair<Time /* start */, Time /* stop */>, WifiMode> PhyHeaderChunkInfo;
326  typedef std::map<WifiPpduField, PhyHeaderChunkInfo> PhyHeaderSections;
338  PhyHeaderSections GetPhyHeaderSections(const WifiTxVector& txVector, Time ppduStart) const;
339 
349  virtual Ptr<WifiPpdu> BuildPpdu(const WifiConstPsduMap& psdus,
350  const WifiTxVector& txVector,
351  Time ppduDuration);
352 
360  Time GetDurationUpToField(WifiPpduField field, const WifiTxVector& txVector) const;
369 
377 
388  virtual void StartReceivePreamble(Ptr<const WifiPpdu> ppdu,
389  RxPowerWattPerChannelBand& rxPowersW,
390  Time rxDuration);
403  void StartReceiveField(WifiPpduField field, Ptr<Event> event);
415  void EndReceiveField(WifiPpduField field, Ptr<Event> event);
416 
422  void EndReceivePayload(Ptr<Event> event);
423 
429  void ResetReceive(Ptr<Event> event);
430 
434  virtual void CancelAllEvents();
438  bool NoEndPreambleDetectionEvents() const;
443 
451  virtual uint16_t GetStaId(const Ptr<const WifiPpdu> ppdu) const;
452 
461  virtual bool CanStartRx(Ptr<const WifiPpdu> ppdu) const;
462 
469  virtual void SwitchMaybeToCcaBusy(const Ptr<const WifiPpdu> ppdu);
477  virtual void NotifyCcaBusy(const Ptr<const WifiPpdu> ppdu,
478  Time duration,
479  WifiChannelListType channelType);
487  virtual void StartTx(Ptr<const WifiPpdu> ppdu);
488 
500  void Transmit(Time txDuration,
501  Ptr<const WifiPpdu> ppdu,
502  double txPowerDbm,
503  Ptr<SpectrumValue> txPowerSpectrum,
504  const std::string& type);
505 
513  virtual Time CalculateTxDuration(WifiConstPsduMap psduMap,
514  const WifiTxVector& txVector,
515  WifiPhyBand band) const;
524  virtual double GetCcaThreshold(const Ptr<const WifiPpdu> ppdu,
525  WifiChannelListType channelType) const;
526 
537 
545  virtual uint64_t ObtainNextUid(const WifiTxVector& txVector);
546 
554  virtual Time GetMaxDelayPpduSameUid(const WifiTxVector& txVector);
555 
556  protected:
561  typedef std::map<WifiPreamble, std::vector<WifiPpduField>> PpduFormats;
562 
566  typedef std::pair<WifiCodeRate, uint16_t> CodeRateConstellationSizePair;
567 
571  typedef std::map<std::string, CodeRateConstellationSizePair> ModulationLookupTable;
572 
578  virtual const PpduFormats& GetPpduFormats() const = 0;
579 
588  virtual bool DoStartReceiveField(WifiPpduField field, Ptr<Event> event);
598 
634 
640  void StartReceivePayload(Ptr<Event> event);
641 
649  virtual Time DoStartReceivePayload(Ptr<Event> event);
650 
657  virtual void DoResetReceive(Ptr<Event> event);
658 
665  virtual void DoAbortCurrentReception(WifiPhyRxfailureReason reason);
666 
674  virtual bool IsConfigSupported(Ptr<const WifiPpdu> ppdu) const;
675 
685 
693  void ErasePreambleEvent(Ptr<const WifiPpdu> ppdu, Time rxDuration);
694 
707  std::pair<bool, SignalNoiseDbm> GetReceptionStatus(Ptr<const WifiPsdu> psdu,
708  Ptr<Event> event,
709  uint16_t staId,
710  Time relativeMpduStart,
711  Time mpduDuration);
721  void EndOfMpdu(Ptr<Event> event,
722  Ptr<const WifiPsdu> psdu,
723  size_t mpduIndex,
724  Time relativeStart,
725  Time mpduDuration);
726 
732  void ScheduleEndOfMpdus(Ptr<Event> event);
733 
743  virtual void RxPayloadSucceeded(Ptr<const WifiPsdu> psdu,
744  RxSignalInfo rxSignalInfo,
745  const WifiTxVector& txVector,
746  uint16_t staId,
747  const std::vector<bool>& statusPerMpdu);
755  virtual void RxPayloadFailed(Ptr<const WifiPsdu> psdu,
756  double snr,
757  const WifiTxVector& txVector);
758 
765  virtual void DoEndReceivePayload(Ptr<const WifiPpdu> ppdu);
766 
774  virtual std::pair<uint16_t, WifiSpectrumBandInfo> GetChannelWidthAndBand(
775  const WifiTxVector& txVector,
776  uint16_t staId) const;
777 
784 
791  double GetRandomValue() const;
808  double GetRxPowerWForPpdu(Ptr<Event> event) const;
822  const std::map<std::pair<uint64_t, WifiPreamble>, Ptr<Event>>& GetCurrentPreambleEvents() const;
829  void AddPreambleEvent(Ptr<Event> event);
830 
842  Time duration,
843  RxPowerWattPerChannelBand& rxPower,
844  bool isStartHePortionRxing = false);
858  virtual void HandleRxPpduWithSameContent(Ptr<Event> event,
859  Ptr<const WifiPpdu> ppdu,
860  RxPowerWattPerChannelBand& rxPower);
861 
868  void NotifyInterferenceRxEndAndClear(bool reset);
869 
879  Ptr<const WifiPpdu> ppdu) const = 0;
880 
889  uint16_t GetCenterFrequencyForChannelWidth(const WifiTxVector& txVector) const;
890 
897  void NotifyPayloadBegin(const WifiTxVector& txVector, const Time& payloadDuration);
898 
910  WifiSpectrumBandInfo GetPrimaryBand(uint16_t bandWidth) const;
920  WifiSpectrumBandInfo GetSecondaryBand(uint16_t bandWidth) const;
921 
928  virtual uint16_t GetMeasurementChannelWidth(const Ptr<const WifiPpdu> ppdu) const = 0;
929 
936  virtual uint16_t GetRxChannelWidth(const WifiTxVector& txVector) const;
937 
946  Time GetDelayUntilCcaEnd(double thresholdDbm, const WifiSpectrumBandInfo& band);
947 
955  uint16_t GetGuardBandwidth(uint16_t currentChannelWidth) const;
964  std::tuple<double, double, double> GetTxMaskRejectionParams() const;
965 
967  std::optional<std::pair<Time, WifiChannelListType>>;
970 
980 
984 
985  std::list<WifiMode> m_modeList;
986 
987  std::vector<EventId> m_endPreambleDetectionEvents;
988  std::vector<EventId> m_endOfMpduEvents;
989 
990  std::vector<EventId>
992 
996  typedef std::pair<uint64_t /* UID */, uint16_t /* STA-ID */> UidStaIdPair;
997 
998  std::map<UidStaIdPair, std::vector<bool>>
1001  std::map<UidStaIdPair, SignalNoiseDbm>
1004 
1005  static uint64_t m_globalPpduUid;
1006 }; // class PhyEntity
1007 
1015 std::ostream& operator<<(std::ostream& os, const PhyEntity::PhyRxFailureAction& action);
1023 std::ostream& operator<<(std::ostream& os, const PhyEntity::PhyFieldRxStatus& status);
1024 
1025 } // namespace ns3
1026 
1027 #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:1303
virtual void HandleRxPpduWithSameContent(Ptr< Event > event, Ptr< const WifiPpdu > ppdu, RxPowerWattPerChannelBand &rxPower)
Handle reception of a PPDU that carries the same content of another PPDU.
Definition: phy-entity.cc:878
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:515
std::list< WifiMode >::const_iterator end() const
Return a const iterator to past-the-last WifiMode.
Definition: phy-entity.cc:144
virtual const PpduFormats & GetPpduFormats() const =0
Return the PPDU formats of the PHY.
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:753
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:927
Ptr< WifiPhyStateHelper > m_state
Pointer to WifiPhyStateHelper of the WifiPhy (to make it reachable for child classes)
Definition: phy-entity.h:982
virtual void RxPayloadFailed(Ptr< const WifiPsdu > psdu, double snr, const WifiTxVector &txVector)
Perform amendment-specific actions when the payload is unsuccessfuly received.
Definition: phy-entity.cc:764
void EndPreambleDetectionPeriod(Ptr< Event > event)
End the preamble detection period.
Definition: phy-entity.cc:951
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:1271
virtual Ptr< WifiPpdu > BuildPpdu(const WifiConstPsduMap &psdus, const WifiTxVector &txVector, Time ppduDuration)
Build amendment-specific PPDU.
Definition: phy-entity.cc:241
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:190
std::tuple< double, double, double > GetTxMaskRejectionParams() const
Definition: phy-entity.cc:1349
virtual uint64_t ObtainNextUid(const WifiTxVector &txVector)
Obtain the next UID for the PPDU to transmit.
Definition: phy-entity.cc:1281
virtual Time DoStartReceivePayload(Ptr< Event > event)
Start receiving the PSDU (i.e.
Definition: phy-entity.cc:570
Time GetDelayUntilCcaEnd(double thresholdDbm, const WifiSpectrumBandInfo &band)
Return the delay until CCA busy is ended for a given sensitivity threshold (in dBm) and a given band.
Definition: phy-entity.cc:1227
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:397
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
bool NoEndPreambleDetectionEvents() const
Definition: phy-entity.cc:1117
virtual Ptr< SpectrumValue > GetTxPowerSpectralDensity(double txPowerW, Ptr< const WifiPpdu > ppdu) const =0
virtual bool HandlesMcsModes() const
Check if the WifiModes handled by this PHY are MCSs.
Definition: phy-entity.cc:132
std::pair< WifiCodeRate, uint16_t > CodeRateConstellationSizePair
A pair to hold modulation information: code rate and constellation size.
Definition: phy-entity.h:566
const std::map< std::pair< uint64_t, WifiPreamble >, Ptr< Event > > & GetCurrentPreambleEvents() const
Get the map of current preamble events (stored in WifiPhy).
Definition: phy-entity.cc:834
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:1002
Ptr< WifiPhy > m_wifiPhy
Pointer to the owning WifiPhy.
Definition: phy-entity.h:981
void Transmit(Time txDuration, Ptr< const WifiPpdu > ppdu, double txPowerDbm, Ptr< SpectrumValue > txPowerSpectrum, const std::string &type)
This function prepares most of the WifiSpectrumSignalParameters parameters and invokes SpectrumWifiPh...
Definition: phy-entity.cc:1319
std::map< std::string, CodeRateConstellationSizePair > ModulationLookupTable
A modulation lookup table using unique name of modulation as key.
Definition: phy-entity.h:571
WifiSpectrumBandInfo GetSecondaryBand(uint16_t bandWidth) const
If the channel bonding is used, return the info corresponding to the secondary channel of the given b...
Definition: phy-entity.cc:1206
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:321
std::vector< EventId > m_endOfMpduEvents
the end of MPDU events (only used for A-MPDUs)
Definition: phy-entity.h:988
virtual uint16_t GetMeasurementChannelWidth(const Ptr< const WifiPpdu > ppdu) const =0
Return the channel width used to measure the RSSI.
virtual ~PhyEntity()
Destructor for PHY entity.
Definition: phy-entity.cc:81
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:1220
virtual uint8_t GetNumModes() const
Definition: phy-entity.cc:110
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:366
void SetOwner(Ptr< WifiPhy > wifiPhy)
Set the WifiPhy owning this PHY entity.
Definition: phy-entity.cc:89
std::list< WifiMode >::const_iterator begin() const
Return a const iterator to the first WifiMode.
Definition: phy-entity.cc:138
virtual void CancelAllEvents()
Cancel and clear all running events.
Definition: phy-entity.cc:1100
virtual uint32_t GetMaxPsduSize() const =0
Get the maximum PSDU size in bytes.
virtual void DoAbortCurrentReception(WifiPhyRxfailureReason reason)
Perform amendment-specific actions before aborting the current reception.
Definition: phy-entity.cc:1142
void AbortCurrentReception(WifiPhyRxfailureReason reason)
Abort the current reception.
Definition: phy-entity.cc:1134
void EndReceivePayload(Ptr< Event > event)
The last symbol of the PPDU has arrived.
Definition: phy-entity.cc:691
std::map< WifiPreamble, std::vector< WifiPpduField > > PpduFormats
A map of PPDU field elements per preamble type.
Definition: phy-entity.h:561
static uint64_t m_globalPpduUid
Global counter of the PPDU UID.
Definition: phy-entity.h:1005
PhyHeaderSections GetPhyHeaderSections(const WifiTxVector &txVector, Time ppduStart) const
Return a map of PHY header chunk information per PPDU field.
Definition: phy-entity.cc:223
virtual bool IsMcsSupported(uint8_t index) const
Check if the WifiMode corresponding to the given MCS index is supported.
Definition: phy-entity.cc:124
void StartReceivePayload(Ptr< Event > event)
Start receiving the PSDU (i.e.
Definition: phy-entity.cc:560
std::vector< EventId > m_endRxPayloadEvents
the end of receive events (only one unless UL MU reception)
Definition: phy-entity.h:991
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:1170
void EndReceiveField(WifiPpduField field, Ptr< Event > event)
End receiving a given field.
Definition: phy-entity.cc:306
virtual Ptr< Event > DoGetEvent(Ptr< const WifiPpdu > ppdu, RxPowerWattPerChannelBand &rxPowersW)
Get the event corresponding to the incoming PPDU.
Definition: phy-entity.cc:848
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:150
WifiPpduField GetNextField(WifiPpduField currentField, WifiPreamble preamble) const
Return the field following the provided one.
Definition: phy-entity.cc:159
void CancelRunningEndPreambleDetectionEvents()
Cancel all end preamble detection events.
Definition: phy-entity.cc:1123
std::map< WifiPpduField, PhyHeaderChunkInfo > PhyHeaderSections
A map of PhyHeaderChunkInfo elements per PPDU field.
Definition: phy-entity.h:326
double GetRxPowerWForPpdu(Ptr< Event > event) const
Obtain the received power (W) for a given band.
Definition: phy-entity.cc:1183
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:1233
Time CalculatePhyPreambleAndHeaderDuration(const WifiTxVector &txVector) const
Definition: phy-entity.cc:200
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:910
void StartPreambleDetectionPeriod(Ptr< Event > event)
Start the preamble detection period.
Definition: phy-entity.cc:937
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:252
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:999
virtual bool CanStartRx(Ptr< const WifiPpdu > ppdu) const
Determine whether the PHY shall issue a PHY-RXSTART.indication primitive in response to a given PPDU.
Definition: phy-entity.cc:1365
virtual void StartTx(Ptr< const WifiPpdu > ppdu)
This function is called by SpectrumWifiPhy to send the PPDU while performing amendment-specific actio...
Definition: phy-entity.cc:1309
virtual uint16_t GetRxChannelWidth(const WifiTxVector &txVector) const
Return the channel width used in the reception spectrum model.
Definition: phy-entity.cc:1214
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:358
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:554
virtual Time CalculateTxDuration(WifiConstPsduMap psduMap, const WifiTxVector &txVector, WifiPhyBand band) const
Definition: phy-entity.cc:1355
void StartReceiveField(WifiPpduField field, Ptr< Event > event)
Start receiving a given field.
Definition: phy-entity.cc:279
uint16_t GetGuardBandwidth(uint16_t currentChannelWidth) const
Definition: phy-entity.cc:1343
virtual bool IsModeSupported(WifiMode mode) const
Check if the WifiMode is supported.
Definition: phy-entity.cc:97
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:1156
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:969
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:1256
std::list< WifiMode > m_modeList
the list of supported modes
Definition: phy-entity.h:985
virtual Time GetMaxDelayPpduSameUid(const WifiTxVector &txVector)
Obtain the maximum time between two PPDUs with the same UID to consider they are identical and their ...
Definition: phy-entity.cc:1288
std::pair< uint64_t, uint16_t > UidStaIdPair
A pair of a UID and STA_ID.
Definition: phy-entity.h:996
Ptr< const Event > GetCurrentEvent() const
Get the pointer to the current event (stored in WifiPhy).
Definition: phy-entity.cc:1189
double GetRandomValue() const
Obtain a random value from the WifiPhy's generator.
Definition: phy-entity.cc:1177
std::vector< EventId > m_endPreambleDetectionEvents
the end of preamble detection events
Definition: phy-entity.h:987
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:217
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:268
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:533
virtual Ptr< const WifiPpdu > GetRxPpduFromTxPpdu(Ptr< const WifiPpdu > ppdu)
The WifiPpdu from the TX PHY is received by each RX PHY attached to the same channel.
Definition: phy-entity.cc:1386
virtual WifiMode GetMcs(uint8_t index) const
Get the WifiMode corresponding to the given MCS index.
Definition: phy-entity.cc:116
void AddPreambleEvent(Ptr< Event > event)
Add an entry to the map of current preamble events (stored in WifiPhy).
Definition: phy-entity.cc:840
virtual void DoEndReceivePayload(Ptr< const WifiPpdu > ppdu)
Perform amendment-specific actions at the end of the reception of the payload.
Definition: phy-entity.cc:771
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:1294
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:211
virtual std::pair< uint16_t, WifiSpectrumBandInfo > 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:827
virtual bool IsConfigSupported(Ptr< const WifiPpdu > ppdu) const
Checks if the signaled configuration (excluding bandwidth) is supported by the PHY.
Definition: phy-entity.cc:1087
Ptr< Event > CreateInterferenceEvent(Ptr< const WifiPpdu > ppdu, Time duration, RxPowerWattPerChannelBand &rxPower, bool isStartHePortionRxing=false)
Create an event using WifiPhy's InterferenceHelper class.
Definition: phy-entity.cc:869
PhyRxFailureAction
Action to perform in case of RX failure.
Definition: phy-entity.h:102
@ DROP
drop PPDU and set CCA_BUSY
Definition: phy-entity.h:103
@ IGNORE
ignore the reception
Definition: phy-entity.h:105
@ ABORT
abort reception of PPDU
Definition: phy-entity.h:104
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:783
WifiSpectrumBandInfo GetPrimaryBand(uint16_t bandWidth) const
If the operating channel width is a multiple of 20 MHz, return the info corresponding to the primary ...
Definition: phy-entity.cc:1195
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:654
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:385
void ScheduleEndOfMpdus(Ptr< Event > event)
Schedule end of MPDUs events.
Definition: phy-entity.cc:592
A template-based reference counting class.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:105
represent a single transmission mode
Definition: wifi-mode.h:51
802.11 PHY layer model
Definition: wifi-phy.h:53
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:57
WifiPsdu stores an MPDU, S-MPDU or A-MPDU, by keeping header(s) and payload(s) separate for each cons...
Definition: wifi-psdu.h:43
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
WifiPhyRxfailureReason
Enumeration of the possible reception failure reasons.
WifiPreamble
The type of preamble to be used by an IEEE 802.11 transmission.
WifiPhyBand
Identifies the PHY band.
Definition: wifi-phy-band.h:33
WifiChannelListType
Enumeration of the possible channel-list parameter elements defined in Table 8-5 of IEEE 802....
WifiPpduField
The type of PPDU field (grouped for convenience)
MpduType
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::map< WifiSpectrumBandInfo, double > RxPowerWattPerChannelBand
A map of the received power (Watts) for each band.
Definition: phy-entity.h:77
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:159
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:112
WifiPhyRxfailureReason reason
failure reason
Definition: phy-entity.h:114
PhyRxFailureAction actionIfFailure
action to perform in case of failure
Definition: phy-entity.h:115
PhyFieldRxStatus(bool s, WifiPhyRxfailureReason r, PhyRxFailureAction a)
Constructor.
Definition: phy-entity.h:135
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:113
A struct for both SNR and PER.
Definition: phy-entity.h:147
SnrPer(double s, double p)
Constructor for SnrPer.
Definition: phy-entity.h:164
double snr
SNR in linear scale.
Definition: phy-entity.h:148
SnrPer()
Default constructor.
Definition: phy-entity.h:154
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
WifiSpectrumBandInfo structure containing info about a spectrum band.
Declaration of ns3::WifiPpdu class and ns3::WifiConstPsduMap.