A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
phy-entity.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2020 Orange Labs
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Authors: Rediet <getachew.redieteab@orange.com>
7 * Sébastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy and
8 * spectrum-wifi-phy)
9 * Mathieu Lacage <mathieu.lacage@sophia.inria.fr> (for logic ported from wifi-phy)
10 */
11
12#ifndef PHY_ENTITY_H
13#define PHY_ENTITY_H
14
15#include "wifi-phy-band.h"
16#include "wifi-ppdu.h"
17#include "wifi-tx-vector.h"
18#include "wifi-types.h"
19
20#include "ns3/event-id.h"
21#include "ns3/nstime.h"
22#include "ns3/simple-ref-count.h"
23
24#include <list>
25#include <map>
26#include <optional>
27#include <tuple>
28#include <utility>
29
30/**
31 * @file
32 * @ingroup wifi
33 * Declaration of:
34 * - ns3::PhyEntity class
35 * - ns3::SignalNoiseDbm, ns3::MpduInfo, and ns3::RxSignalInfo structs
36 * - ns3::RxPowerWattPerChannelBand typedef
37 */
38
39namespace ns3
40{
41
42/**
43 * A map of the received power for each band
44 */
45using RxPowerWattPerChannelBand = std::map<WifiSpectrumBandInfo, Watt_u>;
46
47class WifiMpdu;
48class WifiPhy;
50class Event;
52class WifiPsdu;
53class WifiPpdu;
54
55/**
56 * @brief Abstract class for PHY entities
57 * @ingroup wifi
58 *
59 * This class enables to have a unique set of APIs
60 * to be used by each PHY entity, corresponding to
61 * the different amendments of the IEEE 802.11 standard.
62 */
63class PhyEntity : public SimpleRefCount<PhyEntity>
64{
65 public:
66 /**
67 * Action to perform in case of RX failure.
68 */
70 {
71 DROP = 0, //!< drop PPDU and set CCA_BUSY
72 ABORT, //!< abort reception of PPDU
73 IGNORE //!< ignore the reception
74 };
75
76 /**
77 * Status of the reception of the PPDU field.
78 */
80 {
81 bool isSuccess{true}; //!< outcome (\c true if success) of the reception
84 DROP}; //!< action to perform in case of failure \see PhyRxFailureAction
85
86 /**
87 * Constructor setting outcome of reception.
88 *
89 * @param s \c true if success
90 */
92 : isSuccess(s)
93 {
94 }
95
96 /**
97 * Constructor.
98 *
99 * @param s \c true if success
100 * @param r reason of failure
101 * @param a action to perform in case of failure
102 */
109 };
110
111 /**
112 * A struct for both SNR and PER
113 */
114 struct SnrPer
115 {
116 double snr{0.0}; ///< SNR in linear scale
117 double per{1.0}; ///< PER
118
119 /**
120 * Default constructor.
121 */
123 {
124 }
125
126 /**
127 * Constructor for SnrPer.
128 *
129 * @param s the SNR in linear scale
130 * @param p the PER
131 */
132 SnrPer(double s, double p)
133 : snr(s),
134 per(p)
135 {
136 }
137 };
138
139 /**
140 * Destructor for PHY entity
141 */
142 virtual ~PhyEntity();
143
144 /**
145 * Set the WifiPhy owning this PHY entity.
146 *
147 * @param wifiPhy the WifiPhy owning this PHY entity
148 */
149 void SetOwner(Ptr<WifiPhy> wifiPhy);
150
151 /**
152 * Check if the WifiMode is supported.
153 *
154 * @param mode the WifiMode to check
155 * @return true if the WifiMode is supported,
156 * false otherwise
157 */
158 virtual bool IsModeSupported(WifiMode mode) const;
159 /**
160 * @return the number of WifiModes supported by this entity
161 */
162 virtual uint8_t GetNumModes() const;
163
164 /**
165 * Get the WifiMode corresponding to the given MCS index.
166 *
167 * @param index the index of the MCS
168 * @return the WifiMode corresponding to the MCS index
169 *
170 * This method should be used only for HtPhy and child classes.
171 */
172 virtual WifiMode GetMcs(uint8_t index) const;
173 /**
174 * Check if the WifiMode corresponding to the given MCS index is supported.
175 *
176 * @param index the index of the MCS
177 * @return true if the WifiMode corresponding to the MCS index is supported,
178 * false otherwise
179 *
180 * Will return false for non-MCS modes.
181 */
182 virtual bool IsMcsSupported(uint8_t index) const;
183 /**
184 * Check if the WifiModes handled by this PHY are MCSs.
185 *
186 * @return true if the handled WifiModes are MCSs,
187 * false if they are non-MCS modes
188 */
189 virtual bool HandlesMcsModes() const;
190
191 /**
192 * Get the WifiMode for the SIG field specified by the PPDU field.
193 *
194 * @param field the PPDU field
195 * @param txVector the transmission parameters
196 *
197 * @return the WifiMode used for the SIG field
198 */
199 virtual WifiMode GetSigMode(WifiPpduField field, const WifiTxVector& txVector) const;
200
201 /**
202 * @brief Return a const iterator to the first WifiMode
203 *
204 * @return a const iterator to the first WifiMode.
205 */
206 std::list<WifiMode>::const_iterator begin() const;
207 /**
208 * @brief Return a const iterator to past-the-last WifiMode
209 *
210 * @return a const iterator to past-the-last WifiMode.
211 */
212 std::list<WifiMode>::const_iterator end() const;
213
214 /**
215 * Return the field following the provided one.
216 *
217 * @param currentField the considered PPDU field
218 * @param preamble the preamble indicating the PPDU format
219 * @return the PPDU field following the reference one
220 */
221 WifiPpduField GetNextField(WifiPpduField currentField, WifiPreamble preamble) const;
222
223 /**
224 * Get the duration of the PPDU field (or group of fields)
225 * used by this entity for the given transmission parameters.
226 *
227 * @param field the PPDU field (or group of fields)
228 * @param txVector the transmission parameters
229 *
230 * @return the duration of the PPDU field
231 */
232 virtual Time GetDuration(WifiPpduField field, const WifiTxVector& txVector) const;
233 /**
234 * @param txVector the transmission parameters
235 *
236 * @return the total duration of the PHY preamble and PHY header.
237 */
239
240 /**
241 * @param size the number of bytes in the packet to send
242 * @param txVector the TXVECTOR used for the transmission of this packet
243 * @param band the frequency band
244 * @param mpdutype the type of the MPDU as defined in WifiPhy::MpduType.
245 * @param incFlag this flag is used to indicate that the variables need to be update or not
246 * This function is called a couple of times for the same packet so variables should not be
247 * increased each time.
248 * @param totalAmpduSize the total size of the previously transmitted MPDUs for the concerned
249 * A-MPDU. If incFlag is set, this parameter will be updated.
250 * @param totalAmpduNumSymbols the number of symbols previously transmitted for the MPDUs in the
251 * concerned A-MPDU, used for the computation of the number of symbols needed for the last MPDU.
252 * If incFlag is set, this parameter will be updated.
253 * @param staId the STA-ID of the PSDU (only used for MU PPDUs)
254 *
255 * @return the duration of the PSDU
256 */
258 const WifiTxVector& txVector,
259 WifiPhyBand band,
260 MpduType mpdutype,
261 bool incFlag,
262 uint32_t& totalAmpduSize,
263 double& totalAmpduNumSymbols,
264 uint16_t staId) const = 0;
265
266 /**
267 * Get a WifiConstPsduMap from a PSDU and the TXVECTOR to use to send the PSDU.
268 * The STA-ID value is properly determined based on whether the given PSDU has
269 * to be transmitted as a DL or UL frame.
270 *
271 * @param psdu the given PSDU
272 * @param txVector the TXVECTOR to use to send the PSDU
273 * @return a WifiConstPsduMap built from the given PSDU and the given TXVECTOR
274 */
276 const WifiTxVector& txVector) const;
277
278 /**
279 * Get the maximum PSDU size in bytes.
280 *
281 * @return the maximum PSDU size in bytes
282 */
283 virtual uint32_t GetMaxPsduSize() const = 0;
284
285 /**
286 * A pair containing information on the PHY header chunk, namely
287 * the start and stop times of the chunk and the WifiMode used.
288 */
289 typedef std::pair<std::pair<Time /* start */, Time /* stop */>, WifiMode> PhyHeaderChunkInfo;
290 /**
291 * A map of PhyHeaderChunkInfo elements per PPDU field.
292 * @see PhyHeaderChunkInfo
293 */
294 typedef std::map<WifiPpduField, PhyHeaderChunkInfo> PhyHeaderSections;
295 /**
296 * Return a map of PHY header chunk information per PPDU field.
297 * This map will contain the PPDU fields that are actually present based
298 * on the \p txVector information.
299 *
300 * @param txVector the transmission parameters
301 * @param ppduStart the time at which the PPDU started
302 * @return the list of preamble sections
303 *
304 * @see PhyHeaderSections
305 */
306 PhyHeaderSections GetPhyHeaderSections(const WifiTxVector& txVector, Time ppduStart) const;
307
308 /**
309 * Build amendment-specific PPDU.
310 *
311 * @param psdus the PHY payloads (PSDUs)
312 * @param txVector the TXVECTOR that was used for the PPDU
313 * @param ppduDuration the transmission duration of the PPDU
314 *
315 * @return the amendment-specific WifiPpdu
316 */
317 virtual Ptr<WifiPpdu> BuildPpdu(const WifiConstPsduMap& psdus,
318 const WifiTxVector& txVector,
319 Time ppduDuration);
320
321 /**
322 * Get the duration of the PPDU up to (but excluding) the given field.
323 *
324 * @param field the considered PPDU field
325 * @param txVector the transmission parameters
326 * @return the duration from the beginning of the PPDU up to the field
327 */
328 Time GetDurationUpToField(WifiPpduField field, const WifiTxVector& txVector) const;
329 /**
330 * Get the remaining duration of the PPDU after the end of the given field.
331 *
332 * @param field the considered PPDU field
333 * @param ppdu the received PPDU
334 * @return the remaining duration of the PPDU after the end of to the field
335 */
337
338 /**
339 * Get the PSDU addressed to that PHY in a PPDU (useful for MU PPDU).
340 *
341 * @param ppdu the PPDU to extract the PSDU from
342 * @return the PSDU addressed to that PHY
343 */
345
346 /**
347 * Start receiving the PHY preamble of a PPDU (i.e. the first bit of the preamble has arrived).
348 *
349 * This method triggers the start of the preamble detection period (\see
350 * StartPreambleDetectionPeriod) if the PHY can process the PPDU.
351 *
352 * @param ppdu the arriving PPDU
353 * @param rxPowersW the receive power in W per band
354 * @param rxDuration the duration of the PPDU
355 */
357 RxPowerWattPerChannelBand& rxPowersW,
358 Time rxDuration);
359 /**
360 * Start receiving a given field.
361 *
362 * This method will call the DoStartReceiveField.
363 * EndReceiveField is also scheduled after the duration of the field
364 * (except for the special case of preambles \see DoStartReceivePreamble).
365 * The PHY is kept in CCA busy during the reception of the field (except for
366 * data field which should be in RX).
367 *
368 * @param field the starting PPDU field
369 * @param event the event holding incoming PPDU's information
370 */
371 void StartReceiveField(WifiPpduField field, Ptr<Event> event);
372 /**
373 * End receiving a given field.
374 *
375 * This method will call the DoEndReceiveField to obtain the outcome of the reception.
376 * In case of success, reception of the next field is triggered.
377 * In case of failure, the indications in the returned \see PhyFieldRxStatus
378 * are performed.
379 *
380 * @param field the ending PPDU field
381 * @param event the event holding incoming PPDU's information
382 */
383 void EndReceiveField(WifiPpduField field, Ptr<Event> event);
384
385 /**
386 * The last symbol of the PPDU has arrived.
387 *
388 * @param event the event holding incoming PPDU's information
389 */
390 void EndReceivePayload(Ptr<Event> event);
391
392 /**
393 * Reset PHY at the end of the PPDU under reception after it has failed the PHY header.
394 *
395 * @param event the event holding incoming PPDU's information
396 */
397 void ResetReceive(Ptr<Event> event);
398
399 /**
400 * Cancel and clear all running events.
401 */
402 virtual void CancelAllEvents();
403 /**
404 * @return \c true if there is no end preamble detection event running, \c false otherwise
405 */
406 bool NoEndPreambleDetectionEvents() const;
407 /**
408 * Cancel all end preamble detection events.
409 */
411
412 /**
413 * Get the remaining time to the end of the MAC header reception of the next MPDU being
414 * received from the given STA, if any.
415 *
416 * @param staId the STA-ID of the transmitter; equals SU_STA_ID for SU PPDUs
417 * @return the remaining time to the end of the MAC header reception of the next MPDU, if any
418 */
419 virtual std::optional<Time> GetTimeToMacHdrEnd(uint16_t staId) const;
420
421 /**
422 * Return the STA ID that has been assigned to the station this PHY belongs to.
423 * This is typically called for MU PPDUs, in order to pick the correct PSDU.
424 *
425 * @param ppdu the PPDU for which the STA ID is requested
426 * @return the STA ID
427 */
428 virtual uint16_t GetStaId(const Ptr<const WifiPpdu> ppdu) const;
429
430 /**
431 * Determine whether the PHY shall issue a PHY-RXSTART.indication primitive in response to a
432 * given PPDU.
433 *
434 * @param ppdu the PPDU
435 * @return true if the PHY shall issue a PHY-RXSTART.indication primitive in response to a PPDU,
436 * false otherwise
437 */
438 virtual bool CanStartRx(Ptr<const WifiPpdu> ppdu) const;
439
440 /**
441 * Check if PHY state should move to CCA busy state based on current
442 * state of interference tracker.
443 *
444 * @param ppdu the incoming PPDU or nullptr for any signal
445 */
446 virtual void SwitchMaybeToCcaBusy(const Ptr<const WifiPpdu> ppdu);
447 /**
448 * Notify PHY state helper to switch to CCA busy state,
449 *
450 * @param ppdu the incoming PPDU or nullptr for any signal
451 * @param duration the duration of the CCA state
452 * @param channelType the channel type for which the CCA busy state is reported.
453 */
454 virtual void NotifyCcaBusy(const Ptr<const WifiPpdu> ppdu,
455 Time duration,
456 WifiChannelListType channelType);
457 /**
458 * This function is called by SpectrumWifiPhy to send
459 * the PPDU while performing amendment-specific actions.
460 * @see SpectrumWifiPhy::StartTx
461 *
462 * @param ppdu the PPDU to send
463 */
464 virtual void StartTx(Ptr<const WifiPpdu> ppdu);
465
466 /**
467 * This function prepares most of the WifiSpectrumSignalParameters
468 * parameters and invokes SpectrumWifiPhy's Transmit method.
469 * @see SpectrumWifiPhy::Transmit
470 *
471 * @param txDuration the duration of the transmission
472 * @param ppdu the PPDU to send
473 * @param txPower the total TX power
474 * @param txPowerSpectrum the TX PSD
475 * @param type the type of transmission (for logging)
476 */
477 void Transmit(Time txDuration,
479 dBm_u txPower,
480 Ptr<SpectrumValue> txPowerSpectrum,
481 const std::string& type);
482
483 /**
484 * @param psduMap the PSDU(s) to transmit indexed by STA-ID
485 * @param txVector the TXVECTOR used for the transmission of the PPDU
486 * @param band the frequency band being used
487 *
488 * @return the total amount of time this PHY will stay busy for the transmission of the PPDU
489 */
490 virtual Time CalculateTxDuration(const WifiConstPsduMap& psduMap,
491 const WifiTxVector& txVector,
492 WifiPhyBand band) const;
493 /**
494 * Return the CCA threshold for a given channel type.
495 * If the channel type is not provided, the default CCA threshold is returned.
496 *
497 * @param ppdu the PPDU that is being received
498 * @param channelType the channel type
499 * @return the CCA threshold
500 */
501 virtual dBm_u GetCcaThreshold(const Ptr<const WifiPpdu> ppdu,
502 WifiChannelListType channelType) const;
503
504 /**
505 * The WifiPpdu from the TX PHY is received by each RX PHY attached to the same channel.
506 * By default and for performance reasons, all RX PHYs will work on the same WifiPpdu instance
507 * from TX instead of a copy of it. Child classes can change that behavior and do a copy and/or
508 * change the content of the parameters stored in WifiPpdu.
509 *
510 * @param ppdu the WifiPpdu transmitted by the TX PHY
511 * @return the WifiPpdu to be used by the RX PHY
512 */
514
515 /**
516 * Obtain the next UID for the PPDU to transmit.
517 * Note that the global UID counter could be incremented.
518 *
519 * @param txVector the transmission parameters
520 * @return the UID to use for the PPDU to transmit
521 */
522 virtual uint64_t ObtainNextUid(const WifiTxVector& txVector);
523
524 /**
525 * Obtain the maximum time between two PPDUs with the same UID to consider they are identical
526 * and their power can be added construtively.
527 *
528 * @param txVector the TXVECTOR used for the transmission of the PPDUs
529 * @return the maximum time between two PPDUs with the same UID to decode them
530 */
531 virtual Time GetMaxDelayPpduSameUid(const WifiTxVector& txVector);
532
533 protected:
534 /**
535 * A map of PPDU field elements per preamble type.
536 * This corresponds to the different PPDU formats introduced by each amendment.
537 */
538 typedef std::map<WifiPreamble, std::vector<WifiPpduField>> PpduFormats;
539
540 /**
541 * A pair to hold modulation information: code rate and constellation size.
542 */
543 typedef std::pair<WifiCodeRate, uint16_t> CodeRateConstellationSizePair;
544
545 /**
546 * A modulation lookup table using unique name of modulation as key.
547 */
548 typedef std::map<std::string, CodeRateConstellationSizePair> ModulationLookupTable;
549
550 /**
551 * Return the PPDU formats of the PHY.
552 *
553 * @return the PPDU formats of the PHY
554 */
555 virtual const PpduFormats& GetPpduFormats() const = 0;
556
557 /**
558 * Start receiving a given field, perform amendment-specific actions, and
559 * signify if it is supported.
560 *
561 * @param field the starting PPDU field
562 * @param event the event holding incoming PPDU's information
563 * @return \c true if the field is supported, \c false otherwise
564 */
565 virtual bool DoStartReceiveField(WifiPpduField field, Ptr<Event> event);
566 /**
567 * End receiving a given field, perform amendment-specific actions, and
568 * provide the status of the reception.
569 *
570 * @param field the ending PPDU field
571 * @param event the event holding incoming PPDU's information
572 * @return status of the reception of the PPDU field
573 */
575
576 /**
577 * Get the event corresponding to the incoming PPDU.
578 *
579 * We store all incoming preamble events, perform amendment-specific actions,
580 * and a decision is made at the end of the preamble detection window.
581 *
582 * @param ppdu the incoming PPDU
583 * @param rxPowersW the receive power in W per band
584 * @return the event holding the incoming PPDU's information
585 */
587 /**
588 * End receiving the preamble, perform amendment-specific actions, and
589 * provide the status of the reception.
590 *
591 * @param event the event holding incoming PPDU's information
592 * @return status of the reception of the preamble
593 */
595 /**
596 * Start the preamble detection period.
597 *
598 * @param event the event holding incoming PPDU's information
599 */
601 /**
602 * End the preamble detection period.
603 *
604 * The PHY will focus on the strongest PPDU and drop others.
605 * In addition, in case of successful detection, the end of the
606 * preamble reception is triggered (\see DoEndReceivePreamble).
607 *
608 * @param event the event holding incoming PPDU's information
609 */
611
612 /**
613 * Start receiving the PSDU (i.e. the first symbol of the PSDU has arrived).
614 *
615 * @param event the event holding incoming PPDU's information
616 */
618
619 /**
620 * Start receiving the PSDU (i.e. the first symbol of the PSDU has arrived)
621 * and perform amendment-specific actions.
622 *
623 * @param event the event holding incoming PPDU's information
624 * @return the payload duration
625 */
627
628 /**
629 * Perform amendment-specific actions before resetting PHY at
630 * the end of the PPDU under reception after it has failed the PHY header.
631 *
632 * @param event the event holding incoming PPDU's information
633 */
634 virtual void DoResetReceive(Ptr<Event> event);
635
636 /**
637 * Perform amendment-specific actions before aborting the
638 * current reception.
639 *
640 * @param reason the reason the reception is aborted
641 */
643
644 /**
645 * Checks if the signaled configuration (excluding bandwidth)
646 * is supported by the PHY.
647 *
648 * @param ppdu the received PPDU
649 * @return \c true if supported, \c false otherwise
650 */
651 virtual bool IsConfigSupported(Ptr<const WifiPpdu> ppdu) const;
652
653 /**
654 * Drop the PPDU and the corresponding preamble detection event, but keep CCA busy
655 * state after the completion of the currently processed event.
656 *
657 * @param ppdu the incoming PPDU
658 * @param reason the reason the PPDU is dropped
659 * @param endRx the end of the incoming PPDU's reception
660 */
662
663 /**
664 * Erase the event corresponding to the PPDU from the list of preamble events,
665 * but consider it as noise after the completion of the current event.
666 *
667 * @param ppdu the incoming PPDU
668 * @param rxDuration the duration of the PPDU
669 */
670 void ErasePreambleEvent(Ptr<const WifiPpdu> ppdu, Time rxDuration);
671
672 /**
673 * Get the reception status for the provided MPDU and notify.
674 *
675 * @param mpdu the arriving MPDU
676 * @param event the event holding incoming PPDU's information
677 * @param staId the station ID of the PSDU (only used for MU)
678 * @param relativeMpduStart the relative start time of the MPDU within the A-MPDU.
679 * 0 for normal MPDUs
680 * @param mpduDuration the duration of the MPDU
681 *
682 * @return information on MPDU reception: status, signal power (dBm), and noise power (in dBm)
683 */
684 std::pair<bool, SignalNoiseDbm> GetReceptionStatus(Ptr<WifiMpdu> mpdu,
685 Ptr<Event> event,
686 uint16_t staId,
687 Time relativeMpduStart,
688 Time mpduDuration);
689 /**
690 * The last symbol of an MPDU in an A-MPDU has arrived.
691 *
692 * @param event the event holding incoming PPDU's information
693 * @param mpdu the arriving MPDU
694 * @param mpduIndex the index of the MPDU within the A-MPDU
695 * @param relativeStart the relative start time of the MPDU within the A-MPDU.
696 * @param mpduDuration the duration of the MPDU
697 */
698 void EndOfMpdu(Ptr<Event> event,
699 Ptr<WifiMpdu> mpdu,
700 size_t mpduIndex,
701 Time relativeStart,
702 Time mpduDuration);
703
704 /**
705 * Schedule end of MPDUs events.
706 *
707 * @param event the event holding incoming PPDU's information
708 */
709 void ScheduleEndOfMpdus(Ptr<Event> event);
710
711 /**
712 * Perform amendment-specific actions when the payload is successfully received.
713 *
714 * @param psdu the successfully received PSDU
715 * @param rxSignalInfo the info on the received signal (\see RxSignalInfo)
716 * @param txVector TXVECTOR of the PSDU
717 * @param staId the station ID of the PSDU (only used for MU)
718 * @param statusPerMpdu reception status per MPDU
719 */
720 virtual void RxPayloadSucceeded(Ptr<const WifiPsdu> psdu,
721 RxSignalInfo rxSignalInfo,
722 const WifiTxVector& txVector,
723 uint16_t staId,
724 const std::vector<bool>& statusPerMpdu);
725 /**
726 * Perform amendment-specific actions when the payload is unsuccessfuly received.
727 *
728 * @param psdu the PSDU that we failed to received
729 * @param snr the SNR of the received PSDU in linear scale
730 * @param txVector TXVECTOR of the PSDU
731 */
732 virtual void RxPayloadFailed(Ptr<const WifiPsdu> psdu,
733 double snr,
734 const WifiTxVector& txVector);
735
736 /**
737 * Perform amendment-specific actions at the end of the reception of
738 * the payload.
739 *
740 * @param ppdu the incoming PPDU
741 */
742 virtual void DoEndReceivePayload(Ptr<const WifiPpdu> ppdu);
743
744 /**
745 * Get the channel width and band to use (will be overloaded by child classes).
746 *
747 * @param txVector the transmission parameters
748 * @param staId the station ID of the PSDU
749 * @return a pair of channel width and band
750 */
751 virtual std::pair<MHz_u, WifiSpectrumBandInfo> GetChannelWidthAndBand(
752 const WifiTxVector& txVector,
753 uint16_t staId) const;
754
755 /**
756 * Abort the current reception.
757 *
758 * @param reason the reason the reception is aborted
759 */
761
762 /**
763 * Obtain a random value from the WifiPhy's generator.
764 * Wrapper used by child classes.
765 *
766 * @return a uniform random value
767 */
768 double GetRandomValue() const;
769 /**
770 * Obtain the SNR and PER of the PPDU field from the WifiPhy's InterferenceHelper class.
771 * Wrapper used by child classes.
772 *
773 * @param field the PPDU field
774 * @param event the event holding incoming PPDU's information
775 * @return the SNR and PER
776 */
778 /**
779 * Obtain the received power for a given band.
780 * Wrapper used by child classes.
781 *
782 * @param event the event holding incoming PPDU's information
783 * @return the received power for the event over a given band
784 */
786 /**
787 * Get the pointer to the current event (stored in WifiPhy).
788 * Wrapper used by child classes.
789 *
790 * @return the pointer to the current event
791 */
793 /**
794 * Get the map of current preamble events (stored in WifiPhy).
795 * Wrapper used by child classes.
796 *
797 * @return the reference to the map of current preamble events
798 */
799 const std::map<std::pair<uint64_t, WifiPreamble>, Ptr<Event>>& GetCurrentPreambleEvents() const;
800 /**
801 * Add an entry to the map of current preamble events (stored in WifiPhy).
802 * Wrapper used by child classes.
803 *
804 * @param event the event holding incoming PPDU's information
805 */
806 void AddPreambleEvent(Ptr<Event> event);
807
808 /**
809 * Create an event using WifiPhy's InterferenceHelper class.
810 * Wrapper used by child classes.
811 *
812 * @param ppdu the PPDU
813 * @param duration the PPDU duration
814 * @param rxPower received power per band (W)
815 * @param isStartHePortionRxing flag whether the event corresponds to the start of the OFDMA
816 * payload reception (only used for UL-OFDMA)
817 * @return the created event
818 */
820 Time duration,
822 bool isStartHePortionRxing = false);
823 /**
824 * Handle reception of a PPDU that carries the same content of another PPDU.
825 * This is typically called upon reception of preambles of HE MU PPDUs or reception
826 * of non-HT duplicate control frames that carries the exact same content sent from different
827 * STAs. If the delay between the PPDU and the first PPDU carrying the same content is small
828 * enough, PPDU can be decoded and its power is added constructively, and the TXVECTOR is
829 * updated accordingly. Otherwise, a new interference event is created and PPDU is dropped by
830 * the PHY.
831 *
832 * @param event the event of the ongoing reception
833 * @param ppdu the newly received PPDU (UL MU or non-HT duplicate)
834 * @param rxPower the received power (W) per band of the newly received PPDU
835 */
836 virtual void HandleRxPpduWithSameContent(Ptr<Event> event,
839
840 /**
841 * Notify WifiPhy's InterferenceHelper of the end of the reception,
842 * clear maps and end of MPDU event, and eventually reset WifiPhy.
843 *
844 * @param reset whether to reset WifiPhy
845 */
846 void NotifyInterferenceRxEndAndClear(bool reset);
847
848 /**
849 * @param txPower power to spread across the bands
850 * @param ppdu the PPDU that will be transmitted
851 * @return Pointer to SpectrumValue
852 *
853 * This is a helper function to create the right TX PSD corresponding
854 * to the amendment of this PHY.
855 */
857 Ptr<const WifiPpdu> ppdu) const = 0;
858
859 /**
860 * Fire the trace indicating that the PHY is starting to receive the payload of a PPDU.
861 *
862 * @param txVector the TXVECTOR used to transmit the PPDU
863 * @param payloadDuration the TX duration of the PPDU payload
864 */
865 void NotifyPayloadBegin(const WifiTxVector& txVector, const Time& payloadDuration);
866
867 /**
868 * If the operating channel width is a multiple of 20 MHz, return the info
869 * corresponding to the primary channel of the given
870 * bandwidth (which must be a multiple of 20 MHz and not exceed the operating
871 * channel width). Otherwise, this call is equivalent to GetBand with
872 * <i>bandIndex</i> equal to zero.
873 *
874 * @param bandWidth the width of the band to be returned
875 *
876 * @return the info corresponding to the band
877 */
879 /**
880 * If the channel bonding is used, return the info corresponding to
881 * the secondary channel of the given bandwidth (which must be a multiple of 20 MHz
882 * and not exceed the operating channel width).
883 *
884 * @param bandWidth the width of the band to be returned
885 *
886 * @return the info corresponding to the band
887 */
889
890 /**
891 * Return the channel width used to measure the RSSI.
892 *
893 * @param ppdu the PPDU that is being received
894 * @return the channel width used for RSSI measurement
895 */
897
898 /**
899 * Return the channel width used in the reception spectrum model.
900 *
901 * @param txVector the TXVECTOR of the PPDU that is being received
902 * @return the channel width used for RxSpectrumModel
903 */
904 virtual MHz_u GetRxChannelWidth(const WifiTxVector& txVector) const;
905
906 /**
907 * Return the delay until CCA busy is ended for a given sensitivity threshold and a given band.
908 *
909 * @param threshold the CCA sensitivity threshold
910 * @param band identify the requested band
911 * @return the delay until CCA busy is ended
912 */
913 Time GetDelayUntilCcaEnd(dBm_u threshold, const WifiSpectrumBandInfo& band);
914
915 /**
916 * @param currentChannelWidth channel width of the current transmission
917 * @return the width of the guard band
918 *
919 * Wrapper method used by child classes for PSD generation.
920 * Note that this method is necessary for testing UL OFDMA.
921 */
922 MHz_u GetGuardBandwidth(MHz_u currentChannelWidth) const;
923 /**
924 * @return a tuple containing the minimum rejection for the inner band,
925 * the minimum rejection for the outer band, and
926 * the maximum rejection for the outer band
927 * for the transmit spectrum mask.
928 *
929 * Wrapper method used by child classes for PSD generation.
930 */
931 std::tuple<dBr_u, dBr_u, dBr_u> GetTxMaskRejectionParams() const;
932
934 std::optional<std::pair<Time, WifiChannelListType>>; //!< CCA end time and its corresponding
935 //!< channel list type (can be
936 //!< std::nullopt if IDLE)
937
938 /**
939 * Get CCA end time and its corresponding channel list type when a new signal has been received
940 * by the PHY.
941 *
942 * @param ppdu the incoming PPDU or nullptr for any signal
943 * @return CCA end time and its corresponding channel list type when a new signal has been
944 * received by the PHY, or std::nullopt if all channel list types are IDLE.
945 */
947
948 Ptr<WifiPhy> m_wifiPhy; //!< Pointer to the owning WifiPhy
949 Ptr<WifiPhyStateHelper> m_state; //!< Pointer to WifiPhyStateHelper of the WifiPhy (to make it
950 //!< reachable for child classes)
951
952 std::list<WifiMode> m_modeList; //!< the list of supported modes
953
954 std::vector<EventId> m_endPreambleDetectionEvents; //!< the end of preamble detection events
955 std::vector<EventId> m_endOfMpduEvents; //!< the end of MPDU events (only used for A-MPDUs)
956 std::map<uint16_t, std::vector<EventId>>
957 m_endOfMacHdrEvents; //!< STA_ID-indexed map of the RX end of MAC header events
958
959 std::vector<EventId>
960 m_endRxPayloadEvents; //!< the end of receive events (only one unless UL MU reception)
961
962 /**
963 * A pair of a UID and STA_ID
964 */
965 typedef std::pair<uint64_t /* UID */, uint16_t /* STA-ID */> UidStaIdPair;
966
967 std::map<UidStaIdPair, std::vector<bool>>
968 m_statusPerMpduMap; //!< Map of the current reception status per MPDU that is filled in as
969 //!< long as MPDUs are being processed by the PHY in case of an A-MPDU
970 std::map<UidStaIdPair, SignalNoiseDbm>
971 m_signalNoiseMap; //!< Map of the latest signal power and noise power in dBm (noise power
972 //!< includes the noise figure)
973
974 static uint64_t m_globalPpduUid; //!< Global counter of the PPDU UID
975}; // class PhyEntity
976
977/**
978 * @brief Stream insertion operator.
979 *
980 * @param os the stream
981 * @param action the action to perform in case of failure
982 * @returns a reference to the stream
983 */
984std::ostream& operator<<(std::ostream& os, const PhyEntity::PhyRxFailureAction& action);
985/**
986 * @brief Stream insertion operator.
987 *
988 * @param os the stream
989 * @param status the status of the reception of a PPDU field
990 * @returns a reference to the stream
991 */
992std::ostream& operator<<(std::ostream& os, const PhyEntity::PhyFieldRxStatus& status);
993
994} // namespace ns3
995
996#endif /* PHY_ENTITY_H */
handles interference calculations
handles interference calculations
Abstract class for PHY entities.
Definition phy-entity.h:64
void NotifyPayloadBegin(const WifiTxVector &txVector, const Time &payloadDuration)
Fire the trace indicating that the PHY is starting to receive the payload of a PPDU.
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.
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...
std::list< WifiMode >::const_iterator end() const
Return a const iterator to past-the-last WifiMode.
void EndOfMpdu(Ptr< Event > event, Ptr< WifiMpdu > mpdu, size_t mpduIndex, Time relativeStart, Time mpduDuration)
The last symbol of an MPDU in an A-MPDU has arrived.
MHz_u GetGuardBandwidth(MHz_u currentChannelWidth) const
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.
virtual PhyFieldRxStatus DoEndReceivePreamble(Ptr< Event > event)
End receiving the preamble, perform amendment-specific actions, and provide the status of the recepti...
Ptr< WifiPhyStateHelper > m_state
Pointer to WifiPhyStateHelper of the WifiPhy (to make it reachable for child classes)
Definition phy-entity.h:949
virtual void RxPayloadFailed(Ptr< const WifiPsdu > psdu, double snr, const WifiTxVector &txVector)
Perform amendment-specific actions when the payload is unsuccessfuly received.
void EndPreambleDetectionPeriod(Ptr< Event > event)
End the preamble detection period.
virtual void NotifyCcaBusy(const Ptr< const WifiPpdu > ppdu, Time duration, WifiChannelListType channelType)
Notify PHY state helper to switch to CCA busy state,.
virtual Ptr< WifiPpdu > BuildPpdu(const WifiConstPsduMap &psdus, const WifiTxVector &txVector, Time ppduDuration)
Build amendment-specific PPDU.
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...
virtual uint64_t ObtainNextUid(const WifiTxVector &txVector)
Obtain the next UID for the PPDU to transmit.
virtual Time DoStartReceivePayload(Ptr< Event > event)
Start receiving the PSDU (i.e.
virtual void StartReceivePreamble(Ptr< const WifiPpdu > ppdu, RxPowerWattPerChannelBand &rxPowersW, Time rxDuration)
Start receiving the PHY preamble of a PPDU (i.e.
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
virtual bool HandlesMcsModes() const
Check if the WifiModes handled by this PHY are MCSs.
std::pair< WifiCodeRate, uint16_t > CodeRateConstellationSizePair
A pair to hold modulation information: code rate and constellation size.
Definition phy-entity.h:543
void Transmit(Time txDuration, Ptr< const WifiPpdu > ppdu, dBm_u txPower, Ptr< SpectrumValue > txPowerSpectrum, const std::string &type)
This function prepares most of the WifiSpectrumSignalParameters parameters and invokes SpectrumWifiPh...
const std::map< std::pair< uint64_t, WifiPreamble >, Ptr< Event > > & GetCurrentPreambleEvents() const
Get the map of current preamble events (stored in WifiPhy).
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:971
Watt_u GetRxPowerForPpdu(Ptr< Event > event) const
Obtain the received power for a given band.
Ptr< WifiPhy > m_wifiPhy
Pointer to the owning WifiPhy.
Definition phy-entity.h:948
std::pair< bool, SignalNoiseDbm > GetReceptionStatus(Ptr< WifiMpdu > mpdu, Ptr< Event > event, uint16_t staId, Time relativeMpduStart, Time mpduDuration)
Get the reception status for the provided MPDU and notify.
std::map< std::string, CodeRateConstellationSizePair > ModulationLookupTable
A modulation lookup table using unique name of modulation as key.
Definition phy-entity.h:548
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:933
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:289
std::vector< EventId > m_endOfMpduEvents
the end of MPDU events (only used for A-MPDUs)
Definition phy-entity.h:955
virtual MHz_u GetRxChannelWidth(const WifiTxVector &txVector) const
Return the channel width used in the reception spectrum model.
virtual ~PhyEntity()
Destructor for PHY entity.
Definition phy-entity.cc:74
virtual const PpduFormats & GetPpduFormats() const =0
Return the PPDU formats of the PHY.
virtual uint8_t GetNumModes() const
virtual bool DoStartReceiveField(WifiPpduField field, Ptr< Event > event)
Start receiving a given field, perform amendment-specific actions, and signify if it is supported.
void SetOwner(Ptr< WifiPhy > wifiPhy)
Set the WifiPhy owning this PHY entity.
Definition phy-entity.cc:82
std::list< WifiMode >::const_iterator begin() const
Return a const iterator to the first WifiMode.
virtual void CancelAllEvents()
Cancel and clear all running events.
virtual uint32_t GetMaxPsduSize() const =0
Get the maximum PSDU size in bytes.
virtual Time CalculateTxDuration(const WifiConstPsduMap &psduMap, const WifiTxVector &txVector, WifiPhyBand band) const
virtual void DoAbortCurrentReception(WifiPhyRxfailureReason reason)
Perform amendment-specific actions before aborting the current reception.
void AbortCurrentReception(WifiPhyRxfailureReason reason)
Abort the current reception.
void EndReceivePayload(Ptr< Event > event)
The last symbol of the PPDU has arrived.
std::map< WifiPreamble, std::vector< WifiPpduField > > PpduFormats
A map of PPDU field elements per preamble type.
Definition phy-entity.h:538
virtual std::pair< MHz_u, WifiSpectrumBandInfo > GetChannelWidthAndBand(const WifiTxVector &txVector, uint16_t staId) const
Get the channel width and band to use (will be overloaded by child classes).
static uint64_t m_globalPpduUid
Global counter of the PPDU UID.
Definition phy-entity.h:974
PhyHeaderSections GetPhyHeaderSections(const WifiTxVector &txVector, Time ppduStart) const
Return a map of PHY header chunk information per PPDU field.
virtual Ptr< SpectrumValue > GetTxPowerSpectralDensity(Watt_u txPower, Ptr< const WifiPpdu > ppdu) const =0
virtual bool IsMcsSupported(uint8_t index) const
Check if the WifiMode corresponding to the given MCS index is supported.
void StartReceivePayload(Ptr< Event > event)
Start receiving the PSDU (i.e.
std::vector< EventId > m_endRxPayloadEvents
the end of receive events (only one unless UL MU reception)
Definition phy-entity.h:960
virtual void DoResetReceive(Ptr< Event > event)
Perform amendment-specific actions before resetting PHY at the end of the PPDU under reception after ...
void EndReceiveField(WifiPpduField field, Ptr< Event > event)
End receiving a given field.
virtual Ptr< Event > DoGetEvent(Ptr< const WifiPpdu > ppdu, RxPowerWattPerChannelBand &rxPowersW)
Get the event corresponding to the incoming PPDU.
virtual WifiMode GetSigMode(WifiPpduField field, const WifiTxVector &txVector) const
Get the WifiMode for the SIG field specified by the PPDU field.
WifiSpectrumBandInfo GetPrimaryBand(MHz_u bandWidth) const
If the operating channel width is a multiple of 20 MHz, return the info corresponding to the primary ...
WifiPpduField GetNextField(WifiPpduField currentField, WifiPreamble preamble) const
Return the field following the provided one.
void CancelRunningEndPreambleDetectionEvents()
Cancel all end preamble detection events.
Time GetDelayUntilCcaEnd(dBm_u threshold, const WifiSpectrumBandInfo &band)
Return the delay until CCA busy is ended for a given sensitivity threshold and a given band.
std::map< WifiPpduField, PhyHeaderChunkInfo > PhyHeaderSections
A map of PhyHeaderChunkInfo elements per PPDU field.
Definition phy-entity.h:294
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.
Time CalculatePhyPreambleAndHeaderDuration(const WifiTxVector &txVector) const
void NotifyInterferenceRxEndAndClear(bool reset)
Notify WifiPhy's InterferenceHelper of the end of the reception, clear maps and end of MPDU event,...
void StartPreambleDetectionPeriod(Ptr< Event > event)
Start the preamble detection period.
Time GetDurationUpToField(WifiPpduField field, const WifiTxVector &txVector) const
Get the duration of the PPDU up to (but excluding) the given field.
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:968
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.
virtual void StartTx(Ptr< const WifiPpdu > ppdu)
This function is called by SpectrumWifiPhy to send the PPDU while performing amendment-specific actio...
virtual dBm_u GetCcaThreshold(const Ptr< const WifiPpdu > ppdu, WifiChannelListType channelType) const
Return the CCA threshold for a given channel type.
Time GetRemainingDurationAfterField(Ptr< const WifiPpdu > ppdu, WifiPpduField field) const
Get the remaining duration of the PPDU after the end of the given field.
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.
void StartReceiveField(WifiPpduField field, Ptr< Event > event)
Start receiving a given field.
virtual bool IsModeSupported(WifiMode mode) const
Check if the WifiMode is supported.
Definition phy-entity.cc:90
void ResetReceive(Ptr< Event > event)
Reset PHY at the end of the PPDU under reception after it has failed the PHY header.
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...
std::list< WifiMode > m_modeList
the list of supported modes
Definition phy-entity.h:952
virtual Time GetMaxDelayPpduSameUid(const WifiTxVector &txVector)
Obtain the maximum time between two PPDUs with the same UID to consider they are identical and their ...
std::pair< uint64_t, uint16_t > UidStaIdPair
A pair of a UID and STA_ID.
Definition phy-entity.h:965
Ptr< const Event > GetCurrentEvent() const
Get the pointer to the current event (stored in WifiPhy).
double GetRandomValue() const
Obtain a random value from the WifiPhy's generator.
std::vector< EventId > m_endPreambleDetectionEvents
the end of preamble detection events
Definition phy-entity.h:954
virtual std::optional< Time > GetTimeToMacHdrEnd(uint16_t staId) const
Get the remaining time to the end of the MAC header reception of the next MPDU being received from th...
virtual Ptr< const WifiPsdu > GetAddressedPsduInPpdu(Ptr< const WifiPpdu > ppdu) const
Get the PSDU addressed to that PHY in a PPDU (useful for MU PPDU).
SnrPer GetPhyHeaderSnrPer(WifiPpduField field, Ptr< Event > event) const
Obtain the SNR and PER of the PPDU field from the WifiPhy's InterferenceHelper class.
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 ...
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.
virtual WifiMode GetMcs(uint8_t index) const
Get the WifiMode corresponding to the given MCS index.
void AddPreambleEvent(Ptr< Event > event)
Add an entry to the map of current preamble events (stored in WifiPhy).
virtual void DoEndReceivePayload(Ptr< const WifiPpdu > ppdu)
Perform amendment-specific actions at the end of the reception of the payload.
std::tuple< dBr_u, dBr_u, dBr_u > GetTxMaskRejectionParams() const
virtual MHz_u GetMeasurementChannelWidth(const Ptr< const WifiPpdu > ppdu) const =0
Return the channel width used to measure the RSSI.
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.
virtual bool IsConfigSupported(Ptr< const WifiPpdu > ppdu) const
Checks if the signaled configuration (excluding bandwidth) is supported by the PHY.
Ptr< Event > CreateInterferenceEvent(Ptr< const WifiPpdu > ppdu, Time duration, RxPowerWattPerChannelBand &rxPower, bool isStartHePortionRxing=false)
Create an event using WifiPhy's InterferenceHelper class.
PhyRxFailureAction
Action to perform in case of RX failure.
Definition phy-entity.h:70
@ DROP
drop PPDU and set CCA_BUSY
Definition phy-entity.h:71
@ IGNORE
ignore the reception
Definition phy-entity.h:73
@ ABORT
abort reception of PPDU
Definition phy-entity.h:72
WifiSpectrumBandInfo GetSecondaryBand(MHz_u bandWidth) const
If the channel bonding is used, return the info corresponding to the secondary channel of the given b...
virtual PhyFieldRxStatus DoEndReceiveField(WifiPpduField field, Ptr< Event > event)
End receiving a given field, perform amendment-specific actions, and provide the status of the recept...
std::map< uint16_t, std::vector< EventId > > m_endOfMacHdrEvents
STA_ID-indexed map of the RX end of MAC header events.
Definition phy-entity.h:957
void ScheduleEndOfMpdus(Ptr< Event > event)
Schedule end of MPDUs events.
Smart pointer class similar to boost::intrusive_ptr.
A template-based reference counting class.
Simulation virtual time values and global simulation resolution.
Definition nstime.h:94
represent a single transmission mode
Definition wifi-mode.h:40
WifiMpdu stores a (const) packet along with a MAC header.
Definition wifi-mpdu.h:51
802.11 PHY layer model
Definition wifi-phy.h:55
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:47
WifiPsdu stores an MPDU, S-MPDU or A-MPDU, by keeping header(s) and payload(s) separate for each cons...
Definition wifi-psdu.h:33
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.
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.
Definition wifi-types.h:41
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition angles.cc:148
std::map< WifiSpectrumBandInfo, Watt_u > RxPowerWattPerChannelBand
A map of the received power for each band.
Definition phy-entity.h:45
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID.
Definition wifi-ppdu.h:38
Status of the reception of the PPDU field.
Definition phy-entity.h:80
WifiPhyRxfailureReason reason
failure reason
Definition phy-entity.h:82
PhyRxFailureAction actionIfFailure
action to perform in case of failure
Definition phy-entity.h:83
PhyFieldRxStatus(bool s, WifiPhyRxfailureReason r, PhyRxFailureAction a)
Constructor.
Definition phy-entity.h:103
PhyFieldRxStatus(bool s)
Constructor setting outcome of reception.
Definition phy-entity.h:91
bool isSuccess
outcome (true if success) of the reception
Definition phy-entity.h:81
A struct for both SNR and PER.
Definition phy-entity.h:115
SnrPer(double s, double p)
Constructor for SnrPer.
Definition phy-entity.h:132
double snr
SNR in linear scale.
Definition phy-entity.h:116
SnrPer()
Default constructor.
Definition phy-entity.h:122
RxSignalInfo structure containing info on the received signal.
Definition wifi-types.h:72
WifiSpectrumBandInfo structure containing info about a spectrum band.
Declaration of ns3::WifiPpdu class and ns3::WifiConstPsduMap.