24 #include "ns3/simulator.h"
26 #include "ns3/boolean.h"
27 #include "ns3/double.h"
28 #include "ns3/uinteger.h"
29 #include "ns3/pointer.h"
159 .SetGroupName (
"Wifi")
160 .AddAttribute (
"Frequency",
161 "The operating center frequency (MHz)",
165 MakeUintegerChecker<uint16_t> ())
166 .AddAttribute (
"ChannelWidth",
167 "Whether 5MHz, 10MHz, 20MHz, 22MHz, 40MHz, 80 MHz or 160 MHz.",
171 MakeUintegerChecker<uint8_t> (5, 160))
172 .AddAttribute (
"ChannelNumber",
173 "If set to non-zero defined value, will control Frequency and ChannelWidth assignment",
177 MakeUintegerChecker<uint8_t> (0, 196))
178 .AddAttribute (
"EnergyDetectionThreshold",
179 "The energy of a received signal should be higher than "
180 "this threshold (dbm) to allow the PHY layer to detect the signal.",
184 MakeDoubleChecker<double> ())
185 .AddAttribute (
"CcaMode1Threshold",
186 "The energy of a received signal should be higher than "
187 "this threshold (dbm) to allow the PHY layer to declare CCA BUSY state.",
191 MakeDoubleChecker<double> ())
192 .AddAttribute (
"TxGain",
193 "Transmission gain (dB).",
197 MakeDoubleChecker<double> ())
198 .AddAttribute (
"RxGain",
199 "Reception gain (dB).",
203 MakeDoubleChecker<double> ())
204 .AddAttribute (
"TxPowerLevels",
205 "Number of transmission power levels available between "
206 "TxPowerStart and TxPowerEnd included.",
209 MakeUintegerChecker<uint32_t> ())
210 .AddAttribute (
"TxPowerEnd",
211 "Maximum available transmission level (dbm).",
215 MakeDoubleChecker<double> ())
216 .AddAttribute (
"TxPowerStart",
217 "Minimum available transmission level (dbm).",
221 MakeDoubleChecker<double> ())
222 .AddAttribute (
"RxNoiseFigure",
223 "Loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver."
224 " According to Wikipedia (http://en.wikipedia.org/wiki/Noise_figure), this is "
225 "\"the difference in decibels (dB) between"
226 " the noise output of the actual receiver to the noise output of an "
227 " ideal receiver with the same overall gain and bandwidth when the receivers "
228 " are connected to sources at the standard noise temperature T0 (usually 290 K)\".",
232 MakeDoubleChecker<double> ())
233 .AddAttribute (
"State",
234 "The state of the PHY layer.",
237 MakePointerChecker<WifiPhyStateHelper> ())
238 .AddAttribute (
"ChannelSwitchDelay",
239 "Delay between two short frames transmitted on different frequencies.",
243 .AddAttribute (
"TxAntennas",
244 "The number of supported Tx antennas.",
247 MakeUintegerChecker<uint8_t> (1, 8),
250 .AddAttribute (
"RxAntennas",
251 "The number of supported Rx antennas.",
254 MakeUintegerChecker<uint8_t> (1, 8),
257 .AddAttribute (
"Antennas",
258 "The number of antennas on the device.",
262 MakeUintegerChecker<uint8_t> (1, 8))
263 .AddAttribute (
"MaxSupportedTxSpatialStreams",
264 "The maximum number of supported TX spatial streams."
265 "This parameter is only valuable for 802.11n/ac/ax STAs and APs.",
269 MakeUintegerChecker<uint8_t> (1, 8))
270 .AddAttribute (
"MaxSupportedRxSpatialStreams",
271 "The maximum number of supported RX spatial streams."
272 "This parameter is only valuable for 802.11n/ac/ax STAs and APs.",
276 MakeUintegerChecker<uint8_t> (1, 8))
277 .AddAttribute (
"ShortGuardEnabled",
278 "Whether or not short guard interval is enabled for HT/VHT transmissions."
279 "This parameter is only valuable for 802.11n/ac/ax STAs and APs.",
284 .AddAttribute (
"GuardInterval",
285 "Whether 800ns, 1600ns or 3200ns guard interval is used for HE transmissions."
286 "This parameter is only valuable for 802.11ax STAs and APs.",
291 .AddAttribute (
"LdpcEnabled",
292 "Whether or not LDPC is enabled (not supported yet!).",
297 .AddAttribute (
"STBCEnabled",
298 "Whether or not STBC is enabled (not supported yet!).",
303 .AddAttribute (
"GreenfieldEnabled",
304 "Whether or not Greenfield is enabled."
305 "This parameter is only valuable for 802.11n STAs and APs.",
310 .AddAttribute (
"ShortPlcpPreambleSupported",
311 "Whether or not short PLCP preamble is supported."
312 "This parameter is only valuable for 802.11b STAs and APs."
313 "Note: 802.11g APs and STAs always support short PLCP preamble.",
318 .AddAttribute (
"FrameCaptureModel",
319 "Ptr to an object that implements the frame capture model",
323 MakePointerChecker <FrameCaptureModel>())
324 .AddTraceSource (
"PhyTxBegin",
325 "Trace source indicating a packet "
326 "has begun transmitting over the channel medium",
328 "ns3::Packet::TracedCallback")
329 .AddTraceSource (
"PhyTxEnd",
330 "Trace source indicating a packet "
331 "has been completely transmitted over the channel. "
332 "NOTE: the only official WifiPhy implementation "
333 "available to this date never fires "
334 "this trace source.",
336 "ns3::Packet::TracedCallback")
337 .AddTraceSource (
"PhyTxDrop",
338 "Trace source indicating a packet "
339 "has been dropped by the device during transmission",
341 "ns3::Packet::TracedCallback")
342 .AddTraceSource (
"PhyRxBegin",
343 "Trace source indicating a packet "
344 "has begun being received from the channel medium "
347 "ns3::Packet::TracedCallback")
348 .AddTraceSource (
"PhyRxEnd",
349 "Trace source indicating a packet "
350 "has been completely received from the channel medium "
353 "ns3::Packet::TracedCallback")
354 .AddTraceSource (
"PhyRxDrop",
355 "Trace source indicating a packet "
356 "has been dropped by the device during reception",
358 "ns3::Packet::TracedCallback")
359 .AddTraceSource (
"MonitorSnifferRx",
360 "Trace source simulating a wifi device in monitor mode "
361 "sniffing all received frames",
363 "ns3::WifiPhy::MonitorSnifferRxTracedCallback")
364 .AddTraceSource (
"MonitorSnifferTx",
365 "Trace source simulating the capability of a wifi device "
366 "in monitor mode to sniff all frames being transmitted",
368 "ns3::WifiPhy::MonitorSnifferTxTracedCallback")
375 m_plcpSuccess (false),
376 m_txMpduReferenceNumber (0xffffffffffffffff),
377 m_rxMpduReferenceNumber (0xffffffffffffffff),
381 m_isConstructed (false),
382 m_channelCenterFrequency (0),
383 m_initialFrequency (0),
384 m_frequencyChannelNumberInitialized (false),
386 m_initialChannelNumber (0),
387 m_totalAmpduSize (0),
388 m_totalAmpduNumSymbols (0),
394 m_random = CreateObject<UniformRandomVariable> ();
395 m_state = CreateObject<WifiPhyStateHelper> ();
430 m_state->SetReceiveOkCallback (callback);
436 m_state->SetReceiveErrorCallback (callback);
442 m_state->RegisterListener (listener);
448 m_state->UnregisterListener (listener);
828 NS_LOG_WARN (
"Configuring unspecified standard; performing no action");
925 bool htFound =
false;
1054 NS_LOG_FUNCTION (
this << (uint16_t)channelNumber << standard << frequency << (uint16_t)channelWidth);
1056 ChannelToFrequencyWidthMap::const_iterator it;
1060 NS_LOG_DEBUG (
"channel number/standard already defined; returning false");
1077 if (it->second == f)
1087 return (it->first.first);
1107 NS_LOG_DEBUG (
"Frequency set; checking whether a channel number corresponds");
1109 if (channelNumberSearched)
1111 NS_LOG_DEBUG (
"Channel number found; setting to " << (uint16_t)channelNumberSearched);
1116 NS_LOG_DEBUG (
"Channel number not found; setting to zero");
1130 NS_LOG_DEBUG (
"Falling back to check WIFI_PHY_STANDARD_UNSPECIFIED");
1139 NS_LOG_DEBUG (
"Setting frequency to " << f.first <<
"; width to " << (uint16_t)f.second);
1218 NS_LOG_DEBUG (
"Saving frequency configuration for initialization");
1230 NS_LOG_DEBUG (
"Setting frequency and channel number to zero");
1241 NS_LOG_DEBUG (
"Setting frequency " << frequency <<
" corresponds to channel " << (uint16_t)nch);
1244 NS_LOG_DEBUG (
"Channel frequency switched to " << frequency <<
"; channel number to " << (uint16_t)nch);
1250 NS_LOG_DEBUG (
"Suppressing reassignment of frequency");
1255 NS_LOG_DEBUG (
"Channel number is unknown for frequency " << frequency);
1258 NS_LOG_DEBUG (
"Channel frequency switched to " << frequency <<
"; channel number to " << 0);
1264 NS_LOG_DEBUG (
"Suppressing reassignment of frequency");
1278 if (frequency >= 2400 && frequency <= 2500)
1288 if (frequency >= 5000 && frequency <= 6000)
1298 NS_ASSERT_MSG (channelwidth == 5 || channelwidth == 10 || channelwidth == 20 || channelwidth == 22 || channelwidth == 40 || channelwidth == 80 || channelwidth == 160,
"wrong channel width value");
1312 NS_ASSERT_MSG (antennas > 0 && antennas <= 4,
"unsupported number of antennas");
1409 return supportedmodes;
1423 NS_LOG_FUNCTION (
"Adding " << (uint16_t)width <<
" to supported channel width set");
1427 std::vector<uint8_t>
1447 NS_LOG_DEBUG (
"Saving channel number configuration for initialization");
1478 NS_LOG_DEBUG (
"Setting frequency to " << f.first <<
"; width to " << (uint16_t)f.second);
1491 NS_FATAL_ERROR (
"Frequency not found for channel number " << nch);
1507 NS_LOG_DEBUG (
"initialize to channel " << (uint16_t)nch);
1515 NS_LOG_DEBUG (
"drop packet because of channel switching while reception");
1521 NS_LOG_DEBUG (
"channel switching postponed until end of current transmission");
1529 NS_LOG_DEBUG (
"channel switching ignored in sleep mode");
1567 NS_LOG_DEBUG (
"drop packet because of channel/frequency switching while reception");
1570 goto switchFrequency;
1573 NS_LOG_DEBUG (
"channel/frequency switching postponed until end of current transmission");
1578 goto switchFrequency;
1581 NS_LOG_DEBUG (
"frequency switching ignored in sleep mode");
1612 NS_LOG_DEBUG (
"setting sleep mode postponed until end of current transmission");
1616 NS_LOG_DEBUG (
"setting sleep mode postponed until end of current reception");
1620 NS_LOG_DEBUG (
"setting sleep mode postponed until end of channel switching");
1649 NS_LOG_DEBUG (
"not in sleep mode, there is nothing to resume");
1656 m_state->SwitchFromSleep (delayUntilCcaEnd);
1688 uint8_t Ndltf, Neltf;
1691 if (txVector.
GetNss () < 3)
1693 Ndltf = txVector.
GetNss ();
1695 else if (txVector.
GetNss () < 5)
1699 else if (txVector.
GetNss () < 7)
2000 && txVector.
GetNss () == 3
2006 && txVector.
GetNss () == 2
2012 && txVector.
GetNss () == 3
2018 && txVector.
GetNss () == 3
2024 && txVector.
GetNss () == 4
2030 && txVector.
GetNss () == 4
2041 && txVector.
GetNss () == 2
2047 && txVector.
GetNss () == 2
2053 && txVector.
GetNss () == 3
2059 && txVector.
GetNss () == 3
2065 && txVector.
GetNss () == 3
2071 && txVector.
GetNss () == 4
2077 && txVector.
GetNss () == 4
2083 && txVector.
GetNss () == 4
2089 && txVector.
GetNss () == 4
2134 NS_ASSERT (gi == 800 || gi == 1600 || gi == 3200);
2144 double numSymbols = 0;
2148 numSymbols = (stbc * (16 + size * 8.0 + 6 * Nes) / (stbc * numDataBitsPerSymbol));
2158 numSymbols = (stbc * size * 8.0) / (stbc * numDataBitsPerSymbol);
2169 numSymbols = lrint (stbc * ceil ((16 + totalAmpduSize * 8.0 + 6 * Nes) / (stbc * numDataBitsPerSymbol)));
2181 numSymbols = lrint (stbc * ceil ((16 + size * 8.0 + 6.0 * Nes) / (stbc * numDataBitsPerSymbol)));
2185 NS_FATAL_ERROR (
"Wrong combination of preamble and packet type");
2322 << (uint16_t)mpdutype);
2338 NS_LOG_DEBUG (
"Dropping packet because in sleep mode");
2359 aMpdu.
type = mpdutype;
2370 StartTx (newPacket, txVector, txDuration);
2405 NS_LOG_DEBUG (
"drop packet because not enough RX antennas");
2421 NS_LOG_DEBUG (
"drop packet because of channel switching");
2447 StartRx (packet, txVector, mpdutype, rxPowerW, rxDuration, event);
2451 NS_LOG_DEBUG (
"drop packet because already in Rx (power=" <<
2464 NS_LOG_DEBUG (
"drop packet because already in Tx (power=" <<
2477 StartRx (packet, txVector, mpdutype, rxPowerW, rxDuration, event);
2496 if (!delayUntilCcaEnd.
IsZero ())
2498 m_state->SwitchMaybeToCcaBusy (delayUntilCcaEnd);
2527 NS_LOG_DEBUG (
"drop packet because it was sent using an unsupported mode (" << txMode <<
")");
2534 NS_LOG_DEBUG (
"drop packet because plcp preamble/header reception failed");
2554 NS_LOG_DEBUG (
"mode=" << (event->GetPayloadMode ().GetDataRate (event->GetTxVector ())) <<
2555 ", snr(dB)=" <<
RatioToDb (snrPer.snr) <<
", per=" << snrPer.per <<
", size=" << packet->
GetSize ());
2562 signalNoise.
noise =
RatioToDb (event->GetRxPowerW () / snrPer.snr) + 30;
2564 aMpdu.
type = mpdutype;
2567 m_state->SwitchFromRxEndOk (packet, snrPer.snr, event->GetTxVector ());
2573 m_state->SwitchFromRxEndError (packet, snrPer.snr);
2578 m_state->SwitchFromRxEndError (packet, snrPer.snr);
3482 uint8_t nss = txVector.
GetNss ();
3487 if (nss != 3 && nss != 6)
3489 return (modeName !=
"VhtMcs9");
3492 else if (chWidth == 80)
3494 if (nss == 3 || nss == 7)
3496 return (modeName !=
"VhtMcs6");
3500 return (modeName !=
"VhtMcs9");
3503 else if (chWidth == 160)
3507 return (modeName !=
"VhtMcs9");
3517 for (uint32_t i = 0; i <
GetNModes (); i++)
3530 for (uint32_t i = 0; i <
GetNMcs (); i++)
3567 return m_state->IsStateCcaBusy ();
3573 return m_state->IsStateIdle ();
3579 return m_state->IsStateBusy ();
3597 return m_state->IsStateSwitching ();
3603 return m_state->IsStateSleep ();
3609 return m_state->GetStateDuration ();
3615 return m_state->GetDelayUntilIdle ();
3621 return m_state->GetLastRxStartTime ();
3634 if (!delayUntilCcaEnd.
IsZero ())
3637 m_state->SwitchMaybeToCcaBusy (delayUntilCcaEnd);
3655 m_state->SwitchFromRxAbort ();
3662 NS_LOG_FUNCTION (
this << packet << txVector << (uint16_t)mpdutype << rxPowerW << rxDuration);
3671 NS_LOG_DEBUG (
"drop packet because no PLCP preamble/header has been received");
3706 NS_LOG_DEBUG (
"sync to signal (power=" << rxPowerW <<
"W)");
3708 m_state->SwitchToRx (rxDuration);
3718 packet, txVector, mpdutype, event);
3723 packet, preamble, mpdutype, event);
3727 NS_LOG_DEBUG (
"drop packet because signal power too Small (" <<
3748 return (os <<
"IDLE");
3750 return (os <<
"CCA_BUSY");
3752 return (os <<
"TX");
3754 return (os <<
"RX");
3756 return (os <<
"SWITCHING");
3758 return (os <<
"SLEEP");
3761 return (os <<
"INVALID");
static class anonymous_namespace{wifi-phy.cc}::Constructor g_constructor
the constructor
ERP-OFDM PHY (Clause 19, Section 19.5)
static WifiMode GetVhtMcs6()
Return MCS 6 from VHT MCS values.
static WifiMode GetOfdmRate9MbpsBW5MHz()
Return a WifiMode for OFDM at 9Mbps with 5MHz channel spacing.
TracedCallback< Ptr< const Packet > > m_phyRxBeginTrace
The trace source fired when a packet begins the reception process from the medium.
Ptr< NetDevice > m_device
Pointer to the device.
static WifiMode GetErpOfdmRate24Mbps()
Return a WifiMode for ERP-OFDM at 24Mbps.
static WifiMode GetDsssRate11Mbps()
Return a WifiMode for DSSS at 11Mbps.
uint8_t GetChannelNumber(void) const
Return current channel number.
uint16_t GetGuardInterval(void) const
uint32_t GetNBssMembershipSelectors(void) const
The WifiPhy::NBssMembershipSelectors() method is used (e.g., by a WifiRemoteStationManager) to determ...
Simulation virtual time values and global simulation resolution.
static WifiMode GetHeMcs7()
Return MCS 7 from HE MCS values.
std::pair< uint8_t, WifiPhyStandard > ChannelNumberStandardPair
A pair of a ChannelNumber and WifiPhyStandard.
static WifiMode GetErpOfdmRate36Mbps()
Return a WifiMode for ERP-OFDM at 36Mbps.
A struct for both SNR and PER.
Ptr< InterferenceHelper::Event > Add(Ptr< const Packet > packet, WifiTxVector txVector, Time duration, double rxPower)
Add the packet-related signal to interference helper.
The MPDU is not part of an A-MPDU.
Smart pointer class similar to boost::intrusive_ptr.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
OFDM PHY for the 5 GHz band (Clause 17 with 5 MHz channel bandwidth)
void SetStream(int64_t stream)
Specifies the stream number for the RngStream.
uint8_t m_channelNumber
Operating channel number.
double m_rxGainDb
Reception gain (dB)
static WifiMode GetVhtMcs8()
Return MCS 8 from VHT MCS values.
double GetTxGain(void) const
Return the transmission gain (dB).
double GetRxNoiseFigure(void) const
Return the RX noise figure (dBm).
void SetShortPlcpPreambleSupported(bool preamble)
Enable or disable short PLCP preamble.
AttributeValue implementation for Boolean.
bool IsMcsSupported(WifiMode mcs) const
Check if the given WifiMode is supported by the PHY.
void SetNumberOfReceiveAntennas(uint8_t rx)
Set the number of RX antennas in the receiver corresponding to this interference helper.
Ptr< ErrorRateModel > GetErrorRateModel(void) const
Return the error rate model.
static WifiMode GetOfdmRate9Mbps()
Return a WifiMode for OFDM at 9Mbps.
HT PHY for the 5 GHz band (clause 20)
static WifiMode GetOfdmRate18MbpsBW10MHz()
Return a WifiMode for OFDM at 18Mbps with 10MHz channel spacing.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
static WifiMode GetOfdmRate27MbpsBW10MHz()
Return a WifiMode for OFDM at 27Mbps with 10MHz channel spacing.
uint8_t GetRemainingNbOfMpdus(void) const
std::vector< uint8_t > m_supportedChannelWidthSet
Supported channel width.
TracedCallback< Ptr< const Packet >, uint16_t, WifiTxVector, MpduInfo, SignalNoiseDbm > m_phyMonitorSniffRxTrace
A trace source that emulates a wifi device in monitor mode sniffing a packet being received...
double m_txGainDb
Transmission gain (dB)
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
static WifiMode GetOfdmRate3MbpsBW5MHz()
Return a WifiMode for OFDM at 3Mbps with 5MHz channel spacing.
static WifiMode GetVhtMcs0()
Return MCS 0 from VHT MCS values.
void MaybeCcaBusyDuration(void)
Eventually switch to CCA busy.
void SetLdpc(bool ldpc)
Enable or disable LDPC.
static WifiMode GetDsssRate1Mbps()
Return a WifiMode for DSSS at 1Mbps.
bool m_ldpc
Flag if LDPC is used.
void ResumeFromSleep(void)
Resume from sleep mode.
bool GetGreenfield(void) const
Return whether Greenfield is supported.
static WifiMode GetHeMcs5()
Return MCS 5 from HE MCS values.
static WifiMode GetErpOfdmRate18Mbps()
Return a WifiMode for ERP-OFDM at 18Mbps.
void SetTxGain(double gain)
Sets the transmission gain (dB).
The PHY layer has sense the medium busy through the CCA mechanism.
void Configure80211ax(void)
Configure WifiPhy with appropriate channel frequency and supported rates for 802.11ax standard...
double DbmToW(double dBm)
Convert from dBm to Watts.
static WifiMode GetHtMcs7()
Return MCS 7 from HT MCS values.
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
virtual void DoDispose(void)
Destructor implementation.
void AddPacketTag(const Tag &tag) const
Add a packet tag.
void SetStbc(bool stbc)
Enable or disable STBC.
static Time GetPlcpHtSigHeaderDuration(WifiPreamble preamble)
static WifiMode GetVhtMcs5()
Return MCS 5 from VHT MCS values.
static WifiMode GetHtMcs22()
Return MCS 22 from HT MCS values.
std::vector< uint32_t > m_bssMembershipSelectorSet
the BSS membership selector set
static WifiMode GetHtMcs14()
Return MCS 14 from HT MCS values.
uint8_t GetMaxSupportedRxSpatialStreams(void) const
static WifiMode GetOfdmRate12Mbps()
Return a WifiMode for OFDM at 12Mbps.
TracedCallback< Ptr< const Packet > > m_phyRxEndTrace
The trace source fired when a packet ends the reception process from the medium.
void EndReceive(Ptr< Packet > packet, WifiPreamble preamble, MpduType mpdutype, Ptr< InterferenceHelper::Event > event)
The last bit of the packet has arrived.
void SetReceiveErrorCallback(RxErrorCallback callback)
static WifiMode GetHtMcs31()
Return MCS 31 from HT MCS values.
static WifiMode GetHtMcs21()
Return MCS 21 from HT MCS values.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
uint8_t m_channelWidth
Channel width.
static WifiMode GetHtMcs30()
Return MCS 30 from HT MCS values.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
void SetErrorRateModel(const Ptr< ErrorRateModel > rate)
Set the error rate model for this interference helper.
HE PHY for the 2.4 GHz band (clause 26)
static WifiMode GetHtMcs10()
Return MCS 10 from HT MCS values.
void StartReceivePreambleAndHeader(Ptr< Packet > packet, double rxPowerW, Time rxDuration)
Starting receiving the plcp of a packet (i.e.
The MPDU is the last aggregate in an A-MPDU.
Ptr< ErrorRateModel > GetErrorRateModel(void) const
Return the error rate model this PHY is using.
static WifiMode GetHtMcs26()
Return MCS 26 from HT MCS values.
static WifiMode GetOfdmRate1_5MbpsBW5MHz()
Return a WifiMode for OFDM at 1.5Mbps with 5MHz channel spacing.
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
#define NS_UNUSED(x)
Mark a local variable as unused.
OFDM PHY for the 5 GHz band (Clause 17 with 10 MHz channel bandwidth)
The PHY layer is sleeping.
static WifiMode GetHtMcs17()
Return MCS 17 from HT MCS values.
static WifiMode GetHtMcs24()
Return MCS 24 from HT MCS values.
bool GetShortGuardInterval(void) const
Return whether short guard interval is supported.
static WifiMode GetOfdmRate4_5MbpsBW10MHz()
Return a WifiMode for OFDM at 4.5Mbps with 10MHz channel spacing.
static WifiMode GetOfdmRate54Mbps()
Return a WifiMode for OFDM at 54Mbps.
void SetMobility(const Ptr< MobilityModel > mobility)
assign a mobility model to this device
void UnregisterListener(WifiPhyListener *listener)
void SetRxNoiseFigure(double noiseFigureDb)
Sets the RX loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver.
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
static WifiMode GetHeMcs4()
Return MCS 4 from HE MCS values.
void SendPacket(Ptr< const Packet > packet, WifiTxVector txVector, MpduType mpdutype=NORMAL_MPDU)
void ConfigureHolland(void)
Configure WifiPhy with appropriate channel frequency and supported rates for holland.
bool IsRunning(void) const
This method is syntactic sugar for !IsExpired().
uint8_t GetNMcs(void) const
The WifiPhy::GetNMcs() method is used (e.g., by a WifiRemoteStationManager) to determine the set of t...
void NotifyTxDrop(Ptr< const Packet > packet)
Public method used to fire a PhyTxDrop trace.
uint64_t m_rxMpduReferenceNumber
A-MPDU reference number to identify all received subframes belonging to the same received A-MPDU...
int64_t GetFemtoSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
HT PHY for the 2.4 GHz band (clause 20)
void SetGreenfield(bool greenfield)
Enable or disable Greenfield support.
void Configure80211_10Mhz(void)
Configure WifiPhy with appropriate channel frequency and supported rates for 802.11a standard with 10...
static WifiMode GetHtMcs8()
Return MCS 8 from HT MCS values.
static WifiMode GetHtMcs18()
Return MCS 18 from HT MCS values.
void NotifyTxBegin(Ptr< const Packet > packet)
Public method used to fire a PhyTxBegin trace.
virtual void SetFrequency(uint16_t freq)
Ptr< FrameCaptureModel > GetFrameCaptureModel(void) const
Return the frame capture model this PHY is using.
static WifiMode GetVhtMcs4()
Return MCS 4 from VHT MCS values.
static WifiMode GetHtMcs27()
Return MCS 27 from HT MCS values.
TracedCallback< Ptr< const Packet >, uint16_t, WifiTxVector, MpduInfo > m_phyMonitorSniffTxTrace
A trace source that emulates a wifi device in monitor mode sniffing a packet being transmitted...
uint16_t GetFrequency(void) const
std::vector< uint8_t > GetSupportedChannelWidthSet(void) const
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
bool IsModeSupported(WifiMode mode) const
Check if the given WifiMode is supported by the PHY.
static WifiMode GetOfdmRate36Mbps()
Return a WifiMode for OFDM at 36Mbps.
uint8_t m_initialChannelNumber
Initial channel number.
static WifiMode GetVhtMcs7()
Return MCS 7 from VHT MCS values.
static WifiMode GetOfdmRate6MbpsBW5MHz()
Return a WifiMode for OFDM at 6Mbps with 5MHz channel spacing.
bool GetStbc(void) const
Return whether STBC is supported.
static WifiMode GetVhtMcs3()
Return MCS 3 from VHT MCS values.
void ConfigureDefaultsForStandard(WifiPhyStandard standard)
Configure the PHY-level parameters for different Wi-Fi standard.
uint32_t GetBssMembershipSelector(uint32_t selector) const
The WifiPhy::BssMembershipSelector() method is used (e.g., by a WifiRemoteStationManager) to determin...
static Time GetPlcpSigA1Duration(WifiPreamble preamble)
uint8_t GetTxPowerLevel(void) const
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source.
WifiModeList m_deviceMcsSet
the device MCS set
uint8_t GetChannelWidth(void) const
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range.
uint16_t m_channelCenterFrequency
Center frequency in MHz.
void SetDevice(const Ptr< NetDevice > device)
Sets the device this PHY is associated with.
static WifiMode GetHtMcs16()
Return MCS 16 from HT MCS values.
static WifiMode GetErpOfdmRate54Mbps()
Return a WifiMode for ERP-OFDM at 54Mbps.
bool GetLdpc(void) const
Return if LDPC is supported.
uint16_t m_mpdusNum
carries the number of expected mpdus that are part of an A-MPDU
static bool Is2_4Ghz(double frequency)
static WifiMode GetHtMcs29()
Return MCS 29 from HT MCS values.
static WifiMode GetHtMcs11()
Return MCS 11 from HT MCS values.
void NotifyRxDrop(Ptr< const Packet > packet)
Public method used to fire a PhyRxDrop trace.
Time CalculateTxDuration(uint32_t size, WifiTxVector txVector, uint16_t frequency)
WifiPreamble
The type of preamble to be used by an IEEE 802.11 transmission.
Keep track of the current position and velocity of an object.
void SetNTxPower(uint32_t n)
Sets the number of transmission power levels available between the minimum level and the maximum leve...
static ChannelToFrequencyWidthMap m_channelToFrequencyWidth
the channel to frequency width map
double GetPowerDbm(uint8_t power) const
Get the power of the given power level in dBm.
double GetEdThreshold(void) const
Return the energy detection threshold (dBm).
WifiPhyStandard
Identifies the PHY specification that a Wifi device is configured to use.
bool PeekPacketTag(Tag &tag) const
Search a matching tag and call Tag::Deserialize if it is found.
static Time GetPlcpSigA2Duration(WifiPreamble preamble)
HE PHY for the 5 GHz band (clause 26)
bool DoFrequencySwitch(uint16_t frequency)
The default implementation does nothing and returns true.
void SetFrameCaptureModel(const Ptr< FrameCaptureModel > rate)
Sets the frame capture model.
static WifiMode GetHtMcs2()
Return MCS 2 from HT MCS values.
Ptr< const AttributeAccessor > MakePointerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
static EventId Schedule(Time const &delay, MEM mem_ptr, OBJ obj)
Schedule an event to expire after delay.
Ptr< MobilityModel > m_mobility
Pointer to the mobility model.
virtual void StartTx(Ptr< Packet > packet, WifiTxVector txVector, Time txDuration)=0
AttributeValue implementation for Time.
static Time GetPlcpPreambleDuration(WifiTxVector txVector)
Time NanoSeconds(uint64_t value)
Construct a Time in the indicated unit.
receive notifications about phy events.
TracedCallback< Ptr< const Packet > > m_phyTxDropTrace
The trace source fired when the phy layer drops a packet as it tries to transmit it.
void NotifyMonitorSniffRx(Ptr< const Packet > packet, uint16_t channelFreqMhz, WifiTxVector txVector, MpduInfo aMpdu, SignalNoiseDbm signalNoise)
Public method used to fire a MonitorSniffer trace for a wifi packet being received.
bool m_shortPreamble
Flag if short PLCP preamble is supported.
bool IsStrictlyPositive(void) const
static WifiMode GetHeMcs3()
Return MCS 3 from HE MCS values.
static Time GetPlcpSigBDuration(WifiPreamble preamble)
Hold an unsigned integer type.
static WifiMode CreateWifiMode(std::string uniqueName, WifiModulationClass modClass, bool isMandatory, WifiCodeRate codingRate, uint16_t constellationSize)
EventId m_endPlcpRxEvent
the end PLCP receive event
static WifiMode GetHtMcs12()
Return MCS 12 from HT MCS values.
static WifiMode GetErpOfdmRate48Mbps()
Return a WifiMode for ERP-OFDM at 48Mbps.
static Time CalculatePlcpPreambleAndHeaderDuration(WifiTxVector txVector)
void SetTxPowerEnd(double end)
Sets the maximum available transmission power level (dBm).
uint64_t GetDataRate(uint8_t channelWidth, uint16_t guardInterval, uint8_t nss) const
uint8_t GetNess(void) const
Time GetGuardInterval(void) const
static WifiMode GetOfdmRate12MbpsBW10MHz()
Return a WifiMode for OFDM at 12Mbps with 10MHz channel spacing.
static WifiMode GetHeMcs11()
Return MCS 11 from HE MCS values.
struct InterferenceHelper::SnrPer CalculatePlcpHeaderSnrPer(Ptr< InterferenceHelper::Event > event)
Calculate the SNIR at the start of the plcp header and accumulate all SNIR changes in the snir vector...
Time GetDelayUntilIdle(void)
uint8_t GetMcsValue(void) const
std::string GetUniqueName(void) const
The PHY layer is receiving a packet.
TracedCallback< Ptr< const Packet > > m_phyRxDropTrace
The trace source fired when the phy layer drops a packet it has received.
uint8_t m_numberOfTransmitters
Number of transmitters (DEPRECATED)
double m_edThresholdW
Energy detection threshold in watts.
void Configure80211_5Mhz()
Configure WifiPhy with appropriate channel frequency and supported rates for 802.11a standard with 5M...
void StartReceivePacket(Ptr< Packet > packet, WifiTxVector txVector, MpduType mpdutype, Ptr< InterferenceHelper::Event > event)
Starting receiving the payload of a packet (i.e.
virtual ~WifiPhyListener()
uint64_t mpduRefNumber
MPDU ref number.
The aim of the AmpduTag is to provide means for a MAC to specify that a packet includes A-MPDU since ...
Attribute or trace source is deprecated; user is warned.
void NotifyRxBegin(Ptr< const Packet > packet)
Public method used to fire a PhyRxBegin trace.
The PHY layer is sending a packet.
static WifiMode GetOfdmRate18Mbps()
Return a WifiMode for OFDM at 18Mbps.
uint32_t GetNModes(void) const
The WifiPhy::GetNModes() and WifiPhy::GetMode() methods are used (e.g., by a WifiRemoteStationManager...
static WifiMode GetOfdmRate9MbpsBW10MHz()
Return a WifiMode for OFDM at 9Mbps with 10MHz channel spacing.
bool IsStbc(void) const
Check if STBC is used or not.
static WifiMode GetOfdmRate12MbpsBW5MHz()
Return a WifiMode for OFDM at 12Mbps with 5MHz channel spacing.
WifiModeList GetMembershipSelectorModes(uint32_t selector)
The WifiPhy::GetMembershipSelectorModes() method is used (e.g., by a WifiRemoteStationManager) to det...
The PHY layer is switching to other channel.
void AbortCurrentReception(void)
Due to newly arrived signal, the current reception cannot be continued and has to be aborted...
TracedCallback< Ptr< const Packet > > m_phyTxBeginTrace
The trace source fired when a packet begins the transmission process on the medium.
uint32_t GetNTxPower(void) const
Return the number of available transmission power levels.
static WifiMode GetVhtMcs1()
Return MCS 1 from VHT MCS values.
This is intended to be the configuration used in this paper: Gavin Holland, Nitin Vaidya and Paramvir...
static WifiMode GetOfdmRate48Mbps()
Return a WifiMode for OFDM at 48Mbps.
void SetErrorRateModel(const Ptr< ErrorRateModel > rate)
Sets the error rate model.
Time GetEnergyDuration(double energyW) const
std::ostream & operator<<(std::ostream &os, const Angles &a)
print a struct Angles to output
Ptr< Packet > Copy(void) const
performs a COW copy of the packet.
static WifiMode GetHeMcs9()
Return MCS 9 from HE MCS values.
double f(double x, void *params)
static WifiMode GetHtMcs0()
Return MCS 0 from HT MCS values.
WifiMode GetMcs(uint8_t mcs) const
The WifiPhy::GetMcs() method is used (e.g., by a WifiRemoteStationManager) to determine the set of tr...
struct InterferenceHelper::SnrPer CalculatePlcpPayloadSnrPer(Ptr< InterferenceHelper::Event > event)
Calculate the SNIR at the start of the plcp payload and accumulate all SNIR changes in the snir vecto...
static TypeId GetTypeId(void)
Get the type ID.
OFDM PHY for the 5 GHz band (Clause 17)
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void NotifyRxStart()
Notify that RX has started.
virtual void SetChannelWidth(uint8_t channelwidth)
Hold objects of type Ptr.
double GetTxPowerEnd(void) const
Return the maximum available transmission power level (dBm).
Time m_guardInterval
Supported HE guard interval.
static bool IsValidTxVector(WifiTxVector txVector)
The standard disallows certain combinations of WifiMode, number of spatial streams, and channel widths.
void EraseEvents(void)
Erase all events.
uint64_t m_txMpduReferenceNumber
A-MPDU reference number to identify all transmitted subframes belonging to the same received A-MPDU...
static WifiMode GetOfdmRate24Mbps()
Return a WifiMode for OFDM at 24Mbps.
Ptr< const AttributeChecker > MakeBooleanChecker(void)
static WifiMode GetHeMcs1()
Return MCS 1 from HE MCS values.
DSSS PHY (Clause 15) and HR/DSSS PHY (Clause 18)
std::pair< uint16_t, uint8_t > FrequencyWidthPair
A pair of a center Frequency and a ChannelWidth.
static WifiMode GetHtMcs13()
Return MCS 13 from HT MCS values.
void SetShortGuardInterval(bool shortGuardInterval)
Enable or disable support for HT/VHT short guard interval.
static WifiMode GetHeMcs0()
Return MCS 0 from HE MCS values.
double CalculateSnr(WifiTxVector txVector, double ber) const
bool IsInitialized(void) const
Check if the object has been initialized.
static WifiMode GetHeMcs10()
Return MCS 10 from HE MCS values.
static WifiMode GetHtMcs20()
Return MCS 20 from HT MCS values.
static WifiMode GetHeMcs2()
Return MCS 2 from HE MCS values.
static WifiMode GetHtMcs5()
Return MCS 5 from HT MCS values.
void SetMaxSupportedRxSpatialStreams(uint8_t streams)
void SetCcaMode1Threshold(double threshold)
Sets the CCA threshold (dBm).
Time GetLastRxStartTime(void) const
Return the start time of the last received packet.
static WifiMode GetVhtMcs2()
Return MCS 2 from VHT MCS values.
FrequencyWidthPair GetFrequencyWidthForChannelNumberStandard(uint8_t channelNumber, WifiPhyStandard standard) const
Lookup frequency/width pair for channelNumber/standard pair.
virtual void SetChannelNumber(uint8_t id)
Set channel number.
bool IsStateCcaBusy(void)
static WifiMode GetDsssRate5_5Mbps()
Return a WifiMode for DSSS at 5.5Mbps.
void Configure80211ac(void)
Configure WifiPhy with appropriate channel frequency and supported rates for 802.11ac standard...
virtual void DoInitialize(void)
Initialize() implementation.
static WifiMode GetOfdmRate2_25MbpsBW5MHz()
Return a WifiMode for OFDM at 2.25Mbps with 5MHz channel spacing.
Ptr< const AttributeAccessor > MakeTimeAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
double WToDbm(double w)
Convert from Watts to dBm.
std::vector< WifiMode > WifiModeList
In various parts of the code, folk are interested in maintaining a list of transmission modes...
WifiPhyStandard m_standard
WifiPhyStandard.
static Time Now(void)
Return the current simulation virtual time.
void SetGuardInterval(Time guardInterval)
static WifiMode GetErpOfdmRate9Mbps()
Return a WifiMode for ERP-OFDM at 9Mbps.
void NotifyTxEnd(Ptr< const Packet > packet)
Public method used to fire a PhyTxEnd trace.
Ptr< UniformRandomVariable > m_random
Provides uniform random variables.
double DbToRatio(double dB)
Convert from dB to ratio.
Time GetStateDuration(void)
uint8_t m_txSpatialStreams
Number of supported TX spatial streams.
uint8_t GetMaxSupportedTxSpatialStreams(void) const
double RatioToDb(double ratio)
Convert from ratio to dB.
void InitializeFrequencyChannelNumber(void)
post-construction setting of frequency and/or channel number
WifiPreamble GetPreambleType(void) const
Ptr< FrameCaptureModel > m_frameCaptureModel
Frame capture model.
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Ptr< const AttributeAccessor > MakeDoubleAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
int64_t GetNanoSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
Ptr< NetDevice > GetDevice(void) const
Return the device this PHY is associated with.
void SetRxGain(double gain)
Sets the reception gain (dB).
uint8_t GetChannelWidth(void) const
void Configure80211b(void)
Configure WifiPhy with appropriate channel frequency and supported rates for 802.11b standard...
No explicit coding (e.g., DSSS rates)
WifiTxVector GetWifiTxVector(void) const
Getter for WifiTxVector parameter.
void SetReceiveOkCallback(RxOkCallback callback)
static WifiMode GetErpOfdmRate6Mbps()
Return a WifiMode for ERP-OFDM at 6Mbps.
void RegisterListener(WifiPhyListener *listener)
void ConfigureChannelForStandard(WifiPhyStandard standard)
Configure the PHY-level parameters for different Wi-Fi standard.
static bool Is5Ghz(double frequency)
uint8_t GetNss(void) const
void SetMaxSupportedTxSpatialStreams(uint8_t streams)
static WifiMode GetErpOfdmRate12Mbps()
Return a WifiMode for ERP-OFDM at 12Mbps.
bool m_plcpSuccess
Flag if the PLCP of the packet or the first MPDU in an A-MPDU has been received.
bool m_greenfield
Flag if GreenField format is supported.
TimeWithUnit As(const enum Unit unit) const
Attach a unit to a Time, to facilitate output in a specific unit.
EventId m_endRxEvent
the end reeive event
Ptr< WifiPhyStateHelper > m_state
Pointer to WifiPhyStateHelper.
void SetEdThreshold(double threshold)
Sets the energy detection threshold (dBm).
void NotifyRxEnd(Ptr< const Packet > packet)
Public method used to fire a PhyRxEnd trace.
void Configure80211n(void)
Configure WifiPhy with appropriate channel frequency and supported rates for 802.11n standard...
void SetTxPowerStart(double start)
Sets the minimum available transmission power level (dBm).
double m_txPowerBaseDbm
Minimum transmission power (dBm)
void NotifyRxEnd()
Notify that RX has ended.
void SetNoiseFigure(double value)
Set the noise figure.
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
bool IsStateSwitching(void)
SignalNoiseDbm structure.
bool m_frequencyChannelNumberInitialized
Store initialization state.
static WifiMode GetHtMcs19()
Return MCS 19 from HT MCS values.
InterferenceHelper m_interference
Pointer to InterferenceHelper.
bool RemovePacketTag(Tag &tag)
Remove a packet tag.
static WifiMode GetHtMcs6()
Return MCS 6 from HT MCS values.
bool m_isConstructed
true when ready to set frequency
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
void ConfigureHtDeviceMcsSet(void)
Configure the device Mcs set with the appropriate HtMcs modes for the number of available transmit sp...
Time Seconds(double value)
Construct a Time in the indicated unit.
static WifiMode GetVhtPlcpHeaderMode()
double m_totalAmpduNumSymbols
Number of symbols previously transmitted for the MPDUs in an A-MPDU, used for the computation of the ...
static WifiMode GetHtMcs28()
Return MCS 28 from HT MCS values.
static WifiMode GetHtMcs9()
Return MCS 9 from HT MCS values.
Ptr< MobilityModel > GetMobility(void) const
Return the mobility model this PHY is associated with.
Time GetChannelSwitchDelay(void) const
static WifiMode GetHtMcs4()
Return MCS 4 from HT MCS values.
void Cancel(void)
This method is syntactic sugar for the ns3::Simulator::Cancel method.
static WifiMode GetHtMcs25()
Return MCS 25 from HT MCS values.
static WifiMode GetHeMcs8()
Return MCS 8 from HE MCS values.
Tag for WifiTxVector and WifiPreamble information to be embedded in outgoing transmissions as a Packe...
void Configure80211g(void)
Configure WifiPhy with appropriate channel frequency and supported rates for 802.11g standard...
static WifiMode GetHePlcpHeaderMode()
bool DefineChannelNumber(uint8_t channelNumber, WifiPhyStandard standard, uint16_t frequency, uint8_t channelWidth)
Add a channel definition to the WifiPhy.
void SetSleepMode(void)
Put in sleep mode.
uint32_t m_totalAmpduSize
Total size of the previously transmitted MPDUs in an A-MPDU, used for the computation of the number o...
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit.
void StartRx(Ptr< Packet > packet, WifiTxVector txVector, MpduType mpdutype, double rxPowerW, Time rxDuration, Ptr< InterferenceHelper::Event > event)
Starting receiving the packet after having detected the medium is idle or after a reception switch...
WifiModeList m_deviceRateSet
This vector holds the set of transmission modes that this WifiPhy(-derived class) can support...
void NotifyMonitorSniffTx(Ptr< const Packet > packet, uint16_t channelFreqMhz, WifiTxVector txVector, MpduInfo aMpdu)
Public method used to fire a MonitorSniffer trace for a wifi packet being transmitted.
Time GetPayloadDuration(uint32_t size, WifiTxVector txVector, uint16_t frequency)
void SetNumberOfAntennas(uint8_t antennas)
static WifiMode GetHtMcs1()
Return MCS 1 from HT MCS values.
static WifiMode GetHtMcs23()
Return MCS 23 from HT MCS values.
A base class which provides memory management and object aggregation.
Time FemtoSeconds(uint64_t value)
Construct a Time in the indicated unit.
static WifiMode GetDsssRate2Mbps()
Return a WifiMode for DSSS at 2Mbps.
static WifiMode GetVhtMcs9()
Return MCS 9 from VHT MCS values.
virtual void ConfigureStandard(WifiPhyStandard standard)
Configure the PHY-level parameters for different Wi-Fi standard.
WifiModulationClass GetModulationClass() const
void AddSupportedChannelWidth(uint8_t channelwidth)
static WifiMode GetOfdmRate6MbpsBW10MHz()
Return a WifiMode for OFDM at 6Mbps with 10MHz channel spacing.
double GetEdThresholdW(void) const
Return the energy detection threshold.
WifiMode GetMode(void) const
double m_txPowerEndDbm
Maximum transmission power (dBm)
uint8_t GetNumberOfAntennas(void) const
The MPDU is part of an A-MPDU, but is not the last aggregate.
bool GetShortPlcpPreambleSupported(void) const
Return whether short PLCP preamble is supported.
State
The state of the PHY layer.
double GetNoiseFigure(void) const
Return the noise figure.
static WifiMode GetPlcpHeaderMode(WifiTxVector txVector)
static Time GetPlcpTrainingSymbolDuration(WifiTxVector txVector)
Ptr< InterferenceHelper::Event > m_currentEvent
Hold the current event.
This class can be used to hold variables of floating point type such as 'double' or 'float'...
static WifiMode GetOfdmRate24MbpsBW10MHz()
Return a WifiMode for OFDM at 24Mbps with 10MHz channel spacing.
Time m_channelSwitchDelay
Time required to switch between channel.
static WifiMode GetOfdmRate13_5MbpsBW5MHz()
Return a WifiMode for OFDM at 13.5Mbps with 5MHz channel spacing.
double m_ccaMode1ThresholdW
Clear channel assessment (CCA) threshold in watts.
double GetCcaMode1Threshold(void) const
Return the CCA threshold (dBm).
bool IsExpired(void) const
This method is syntactic sugar for the ns3::Simulator::IsExpired method.
uint8_t FindChannelNumberForFrequencyWidth(uint16_t frequency, uint8_t width) const
Look for channel number matching the frequency and width.
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
static WifiMode CreateWifiMcs(std::string uniqueName, uint8_t mcsValue, WifiModulationClass modClass)
uint8_t m_numberOfAntennas
Number of transmitters.
static Time GetPlcpHeaderDuration(WifiTxVector txVector)
a unique identifier for an interface.
MpduType
This enumeration defines the type of an MPDU.
static WifiMode GetHtMcs15()
Return MCS 15 from HT MCS values.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
static WifiMode GetHtMcs3()
Return MCS 3 from HT MCS values.
uint8_t m_rxSpatialStreams
Number of supported RX spatial streams.
static WifiMode GetOfdmRate6Mbps()
Return a WifiMode for OFDM at 6Mbps.
void SwitchMaybeToCcaBusy(void)
Check if Phy state should move to CCA busy state based on current state of interference tracker...
bool m_shortGuardInterval
Flag if HT/VHT short guard interval is supported.
WifiPhyStandard GetStandard(void) const
Get the configured Wi-Fi standard.
double GetRxGain(void) const
Return the reception gain (dB).
virtual int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
static WifiMode GetHeMcs6()
Return MCS 6 from HE MCS values.
static WifiMode GetHtPlcpHeaderMode()
double GetTxPowerStart(void) const
Return the minimum available transmission power level (dBm).
static WifiMode GetOfdmRate4_5MbpsBW5MHz()
Return a WifiMode for OFDM at 4.5Mbps with 5MHz channel spacing.
uint32_t m_nTxPower
Number of available transmission power levels.
bool m_stbc
Flag if STBC is used.
MpduType GetMpduType(void) const
Getter for mpduType parameter.
void Configure80211a(void)
Configure WifiPhy with appropriate channel frequency and supported rates for 802.11a standard...
uint8_t m_numberOfReceivers
Number of receivers (DEPRECATED)
std::map< ChannelNumberStandardPair, FrequencyWidthPair > ChannelToFrequencyWidthMap
channel to frequency width map typedef
static WifiMode GetOfdmRate3MbpsBW10MHz()
Return a WifiMode for OFDM at 3Mbps with 10MHz channel spacing.
TracedCallback< Ptr< const Packet > > m_phyTxEndTrace
The trace source fired when a packet ends the transmission process on the medium. ...
uint16_t m_initialFrequency
Store frequency until initialization.
WifiMode GetMode(uint32_t mode) const
The WifiPhy::GetNModes() and WifiPhy::GetMode() methods are used (e.g., by a WifiRemoteStationManager...
bool DoChannelSwitch(uint8_t id)
The default implementation does nothing and returns true.