From 7ee0357e4ec631ced250e9cb8b302183bbda85fd Mon Sep 17 00:00:00 2001 From: Rediet Date: Tue, 19 Jan 2021 11:49:22 +0100 Subject: [PATCH] wifi: Move preamble detection and header reception logic from WifiPhy to PhyEntity --- src/wifi/model/spectrum-wifi-phy.cc | 4 +- src/wifi/model/wifi-phy.cc | 426 ++---------------------- src/wifi/model/wifi-phy.h | 47 +-- src/wifi/test/spectrum-wifi-phy-test.cc | 2 +- 4 files changed, 25 insertions(+), 454 deletions(-) diff --git a/src/wifi/model/spectrum-wifi-phy.cc b/src/wifi/model/spectrum-wifi-phy.cc index c55e60613..05283a02e 100644 --- a/src/wifi/model/spectrum-wifi-phy.cc +++ b/src/wifi/model/spectrum-wifi-phy.cc @@ -34,6 +34,7 @@ #include "wifi-utils.h" #include "he-ppdu.h" //TODO: remove this once code ported to HePhy #include "wifi-psdu.h" +#include "he-phy.h" namespace ns3 { @@ -363,7 +364,8 @@ SpectrumWifiPhy::StartRx (Ptr rxParams) if (txVector.GetPreambleType () == WIFI_PREAMBLE_HE_TB && wifiRxParams->txPsdFlag == PSD_HE_TB_OFDMA_PORTION) { - if (m_currentHeTbPpduUid == ppdu->GetUid () && m_currentEvent != 0) + if (DynamicCast (GetPhyEntity (WIFI_MOD_CLASS_HE))->GetCurrentHeTbPpduUid () == ppdu->GetUid () + && m_currentEvent != 0) { //AP or STA has already received non-OFDMA part, switch to OFDMA part, and schedule reception of payload (will be canceled for STAs by StartPayloadStart) bool ofdmaStarted = !m_beginOfdmaPayloadRxEvents.empty (); diff --git a/src/wifi/model/wifi-phy.cc b/src/wifi/model/wifi-phy.cc index 887e1c7f2..2909a427b 100644 --- a/src/wifi/model/wifi-phy.cc +++ b/src/wifi/model/wifi-phy.cc @@ -526,7 +526,6 @@ WifiPhy::WifiPhy () m_currentEvent (0), m_previouslyRxPpduUid (UINT64_MAX), m_previouslyTxPpduUid (UINT64_MAX), - m_currentHeTbPpduUid (UINT64_MAX), m_standard (WIFI_PHY_STANDARD_UNSPECIFIED), m_band (WIFI_PHY_BAND_UNSPECIFIED), m_isConstructed (false), @@ -2125,7 +2124,7 @@ WifiPhy::NotifyMonitorSniffTx (Ptr psdu, uint16_t channelFreqMhz void WifiPhy::NotifyEndOfHeSigA (HeSigAParameters params) { - m_phyEndOfHeSigATrace (params); + m_phyEndOfHeSigATrace (params); //TODO to move to HePhy } void @@ -2194,11 +2193,11 @@ WifiPhy::Send (WifiConstPsduMap psdus, WifiTxVector txVector) if (m_powerRestricted) { - NS_LOG_DEBUG ("Transmitting with power restriction"); + NS_LOG_DEBUG ("Transmitting with power restriction for " << txDuration.As (Time::NS)); } else { - NS_LOG_DEBUG ("Transmitting without power restriction"); + NS_LOG_DEBUG ("Transmitting without power restriction for " << txDuration.As (Time::NS)); } if (m_state->GetState () == WifiPhyState::OFF) @@ -2260,158 +2259,6 @@ WifiPhy::Reset (void) m_beginOfdmaPayloadRxEvents.clear (); } -void -WifiPhy::StartReceiveHeader (Ptr event) -{ - NS_LOG_FUNCTION (this << *event); - NS_ASSERT (!IsStateRx ()); - NS_ASSERT (m_endPhyRxEvent.IsExpired ()); - - //calculate PER on the measurement channel for PHY headers - uint16_t measurementChannelWidth = GetMeasurementChannelWidth (event->GetPpdu ()); - auto measurementBand = GetBand (measurementChannelWidth); - double maxRxPowerW = -1; //in case current event may not be sent on measurement channel (rxPowerW would be equal to 0) - Ptr maxEvent; - NS_ASSERT (!m_currentPreambleEvents.empty ()); - for (auto preambleEvent : m_currentPreambleEvents) - { - double rxPowerW = preambleEvent.second->GetRxPowerW (measurementBand); - if (rxPowerW > maxRxPowerW) - { - maxRxPowerW = rxPowerW; - maxEvent = preambleEvent.second; - } - } - - NS_ASSERT (maxEvent != 0); - if (maxEvent != event) - { - NS_LOG_DEBUG ("Receiver got a stronger packet with UID " << maxEvent->GetPpdu ()->GetUid () << " during preamble detection: drop packet with UID " << event->GetPpdu ()->GetUid ()); - NotifyRxDrop (GetAddressedPsduInPpdu (event->GetPpdu ()), BUSY_DECODING_PREAMBLE); - auto it = m_currentPreambleEvents.find (std::make_pair (event->GetPpdu ()->GetUid (), event->GetPpdu ()->GetPreamble ())); - m_currentPreambleEvents.erase (it); - //This is needed to cleanup the m_firstPowerPerBand so that the first power corresponds to the power at the start of the PPDU - m_interference.NotifyRxEnd (maxEvent->GetStartTime ()); - //Make sure InterferenceHelper keeps recording events - m_interference.NotifyRxStart (); - return; - } - - m_currentEvent = event; - - double snr = m_interference.CalculateSnr (m_currentEvent, measurementChannelWidth, 1, measurementBand); - NS_LOG_DEBUG ("SNR(dB)=" << RatioToDb (snr) << " at start of non-HT preamble"); - - Time headerPayloadDuration = m_currentEvent->GetStartTime () + m_currentEvent->GetPpdu ()->GetTxDuration () - Simulator::Now (); - - if ((!m_preambleDetectionModel && maxRxPowerW > 0.0) - || (m_preambleDetectionModel && m_preambleDetectionModel->IsPreambleDetected (m_currentEvent->GetRxPowerW (measurementBand), snr, measurementChannelWidth))) - { - for (auto & endPreambleDetectionEvent : m_endPreambleDetectionEvents) - { - endPreambleDetectionEvent.Cancel (); - } - m_endPreambleDetectionEvents.clear (); - - for (auto it = m_currentPreambleEvents.begin (); it != m_currentPreambleEvents.end (); ) - { - if (it->second != m_currentEvent) - { - NS_LOG_DEBUG ("Drop packet with UID " << it->first.first << " and preamble " << it->first.second << " arrived at time " << it->second->GetStartTime ()); - WifiPhyRxfailureReason reason; - if (m_currentEvent->GetPpdu ()->GetUid () > it->first.first) - { - reason = PREAMBLE_DETECTION_PACKET_SWITCH; - //This is needed to cleanup the m_firstPowerPerBand so that the first power corresponds to the power at the start of the PPDU - m_interference.NotifyRxEnd (m_currentEvent->GetStartTime ()); - } - else - { - reason = BUSY_DECODING_PREAMBLE; - } - NotifyRxDrop (GetAddressedPsduInPpdu (it->second->GetPpdu ()), reason); - it = m_currentPreambleEvents.erase (it); - } - else - { - it++; - } - } - - //Make sure InterferenceHelper keeps recording events - m_interference.NotifyRxStart (); - - NotifyRxBegin (GetAddressedPsduInPpdu (m_currentEvent->GetPpdu ()), m_currentEvent->GetRxPowerWPerBand ()); - - m_timeLastPreambleDetected = Simulator::Now (); - WifiTxVector txVector = m_currentEvent->GetTxVector (); - - if (txVector.GetPreambleType () == WIFI_PREAMBLE_HT_GF) - { - //No non-HT PHY header for HT GF, in addition, remaining HT-LTFs follow after HT-SIG - Time remainingPreambleHeaderDuration = GetPpduFieldDuration (WIFI_PPDU_FIELD_PREAMBLE, txVector) - + GetPpduFieldDuration (WIFI_PPDU_FIELD_HT_SIG, txVector) - - (Simulator::Now () - m_currentEvent->GetStartTime ()); - m_state->SwitchMaybeToCcaBusy (remainingPreambleHeaderDuration); - m_endPhyRxEvent = Simulator::Schedule (remainingPreambleHeaderDuration, &WifiPhy::EndReceiveCommonHeader, this, m_currentEvent); - } - else - { - //Schedule end of non-HT PHY header - Time remainingPreambleAndNonHtHeaderDuration = GetPpduFieldDuration (WIFI_PPDU_FIELD_PREAMBLE, txVector) - + GetPpduFieldDuration (WIFI_PPDU_FIELD_NON_HT_HEADER, txVector) - - (Simulator::Now () - m_currentEvent->GetStartTime ()); - m_state->SwitchMaybeToCcaBusy (remainingPreambleAndNonHtHeaderDuration); - m_endPhyRxEvent = Simulator::Schedule (remainingPreambleAndNonHtHeaderDuration, &WifiPhy::ContinueReceiveHeader, this, m_currentEvent); - } - } - else - { - NS_LOG_DEBUG ("Drop packet because PHY preamble detection failed"); - // Like CCA-SD, CCA-ED is governed by the 4 us CCA window to flag CCA-BUSY - // for any received signal greater than the CCA-ED threshold. - DropPreambleEvent (m_currentEvent->GetPpdu (), PREAMBLE_DETECT_FAILURE, m_currentEvent->GetEndTime (), GetMeasurementChannelWidth (m_currentEvent->GetPpdu ())); - if (m_currentPreambleEvents.empty()) - { - //Do not erase events if there are still pending preamble events to be processed - m_interference.NotifyRxEnd (Simulator::Now ()); - } - m_currentEvent = 0; - } -} - -void -WifiPhy::ContinueReceiveHeader (Ptr event) -{ - NS_LOG_FUNCTION (this << *event); - NS_ASSERT (m_endPhyRxEvent.IsExpired ()); - - uint16_t measurementChannelWidth = GetMeasurementChannelWidth (event->GetPpdu ()); - PhyEntity::SnrPer snrPer = m_interference.CalculatePhyHeaderSnrPer (event, measurementChannelWidth, GetBand (measurementChannelWidth), - WIFI_PPDU_FIELD_NON_HT_HEADER); - - NS_LOG_DEBUG ("L-SIG/RL-SIG: SNR(dB)=" << RatioToDb (snrPer.snr) << ", PER=" << snrPer.per); - if (m_random->GetValue () > snrPer.per) //non-HT PHY header reception succeeded - { - NS_LOG_DEBUG ("Received non-HT PHY header"); - WifiTxVector txVector = event->GetTxVector (); - Time remainingRxDuration = event->GetEndTime () - Simulator::Now (); - m_state->SwitchMaybeToCcaBusy (remainingRxDuration); - Time headerDuration = GetPpduFieldDuration (WIFI_PPDU_FIELD_HT_SIG, txVector) - + GetPpduFieldDuration (WIFI_PPDU_FIELD_SIG_A, txVector); - m_endPhyRxEvent = Simulator::Schedule (headerDuration, &WifiPhy::EndReceiveCommonHeader, this, event); - } - else //non-HT PHY header reception failed - { - NS_LOG_DEBUG ("Abort reception because non-HT PHY header reception failed"); - AbortCurrentReception (L_SIG_FAILURE); - if (event->GetEndTime () > (Simulator::Now () + m_state->GetDelayUntilIdle ())) - { - MaybeCcaBusyDuration (GetMeasurementChannelWidth (event->GetPpdu ())); - } - } -} - void WifiPhy::StartReceivePreamble (Ptr ppdu, RxPowerWattPerChannelBand rxPowersW) { @@ -2635,208 +2482,6 @@ WifiPhy::StartReceiveOfdmaPayload (Ptr event) m_statusPerMpduMap.insert ({std::make_pair (ppdu->GetUid (), ppdu->GetStaId ()), std::vector ()}); } -void -WifiPhy::EndReceiveCommonHeader (Ptr event) -{ - NS_LOG_FUNCTION (this << *event); - NS_ASSERT (m_endPhyRxEvent.IsExpired ()); - Ptr ppdu = event->GetPpdu (); - WifiModulationClass modulation = ppdu->GetModulation (); - //calculate PER on the measurement channel for PHY headers - uint16_t measurementChannelWidth = GetMeasurementChannelWidth (ppdu); - auto measurementBand = GetBand (measurementChannelWidth); - bool commonHeaderReceived = true; //If we are here, this means non-HT PHY header was already successfully received - if (modulation >= WIFI_MOD_CLASS_HT) - { - WifiPpduField header = (modulation == WIFI_MOD_CLASS_HT) ? WIFI_PPDU_FIELD_HT_SIG : WIFI_PPDU_FIELD_SIG_A; - PhyEntity::SnrPer snrPer = m_interference.CalculatePhyHeaderSnrPer (event, measurementChannelWidth, measurementBand, - header); - NS_LOG_DEBUG (header << ": SNR(dB)=" << RatioToDb (snrPer.snr) << ", PER=" << snrPer.per); - commonHeaderReceived = (m_random->GetValue () > snrPer.per); - } - WifiTxVector txVector = event->GetTxVector (); - bool success = false; - bool filteredOut = false; - if (commonHeaderReceived) //PHY reception succeeded - { - Ptr psdu = GetAddressedPsduInPpdu (ppdu); - if ((txVector.GetChannelWidth () >= 40) && (txVector.GetChannelWidth () > GetChannelWidth ())) - { - NS_LOG_DEBUG ("Packet reception could not be started because not enough channel width"); - NotifyRxDrop (psdu, UNSUPPORTED_SETTINGS); - } - - if (ppdu->GetType () == WIFI_PPDU_TYPE_DL_MU) //Final decision on content of DL MU is reported to end of SIG-B (unless the PPDU is filtered) - { - if (psdu) //a valid pointer is returned only if BSS colors match - { - NS_LOG_INFO ("The BSS color of this DL MU PPDU matches device's. Schedule SIG-B reception."); - Time timeBetweenSigAAndSigB = (ppdu->GetModulation () == WIFI_MOD_CLASS_VHT) ? //SIG-B just before payload for VHT whereas before training for HE - GetPpduFieldDuration (WIFI_PPDU_FIELD_TRAINING, txVector) : - NanoSeconds (0); - m_endPhyRxEvent = Simulator::Schedule (timeBetweenSigAAndSigB + GetPpduFieldDuration (WIFI_PPDU_FIELD_SIG_B, txVector), - &WifiPhy::EndReceiveSigB, this, event); - success = true; - } - else - { - NS_LOG_DEBUG ("The BSS color of this DL MU PPDU does not match the device's. The PPDU is filtered."); - filteredOut = true; - m_phyRxPayloadBeginTrace (txVector, NanoSeconds (0)); //this callback (equivalent to PHY-RXSTART primitive) is also triggered for filtered PPDUs - } - } - else if (psdu) - { - success = ScheduleStartReceivePayload (event, GetPpduFieldDuration (WIFI_PPDU_FIELD_TRAINING, txVector)); - } - else - { - NS_ASSERT (ppdu->GetType () == WIFI_PPDU_TYPE_UL_MU); - NS_LOG_DEBUG ("No PSDU addressed to that PHY in the received MU PPDU. The PPDU is filtered."); - filteredOut = true; - m_phyRxPayloadBeginTrace (txVector, NanoSeconds (0)); //this callback (equivalent to PHY-RXSTART primitive) is also triggered for filtered PPDUs - } - if (modulation == WIFI_MOD_CLASS_HE) - { - HeSigAParameters params; - params.rssiW = event->GetRxPowerW (measurementBand); - params.bssColor = event->GetTxVector ().GetBssColor (); - Simulator::ScheduleNow (&WifiPhy::NotifyEndOfHeSigA, this, params); - } - } - else //PHY reception failed - { - NS_LOG_DEBUG ("Drop packet because SIG-A or HT-SIG reception failed"); - NotifyRxDrop (GetAddressedPsduInPpdu (ppdu), SIG_A_FAILURE); - } - if (!success) - { - if (filteredOut) - { - AbortCurrentReception (FILTERED); //PHY-RXSTART is immediately followed by PHY-RXEND (Filtered) - if (event->GetEndTime () > (Simulator::Now () + m_state->GetDelayUntilIdle ())) - { - MaybeCcaBusyDuration (GetMeasurementChannelWidth (ppdu)); - } - } - else - { - Time remainingDuration = ppdu->GetTxDuration () - CalculatePhyPreambleAndHeaderDuration (txVector) - + GetPpduFieldDuration (WIFI_PPDU_FIELD_TRAINING, txVector) - + GetPpduFieldDuration (WIFI_PPDU_FIELD_SIG_B, txVector); - m_endRxEvents.push_back (Simulator::Schedule (remainingDuration, - &WifiPhy::ResetReceive, this, event)); - } - } -} - -void -WifiPhy::EndReceiveSigB (Ptr event) -{ - NS_LOG_FUNCTION (this << *event); - NS_ASSERT (m_endPhyRxEvent.IsExpired ()); - Ptr ppdu = event->GetPpdu (); - WifiTxVector txVector = event->GetTxVector (); - NS_ASSERT (ppdu->GetType () == WIFI_PPDU_TYPE_DL_MU); - - Time timeBetweenSigBAndPayload = (ppdu->GetModulation () == WIFI_MOD_CLASS_VHT) ? //SIG-B just before payload for VHT whereas before training for HE - NanoSeconds (0) : - GetPpduFieldDuration (WIFI_PPDU_FIELD_TRAINING, txVector); - - //calculate PER of SIG-B on measurement channel - uint16_t measurementChannelWidth = GetMeasurementChannelWidth (ppdu); - PhyEntity::SnrPer snrPer = m_interference.CalculatePhyHeaderSnrPer (event, measurementChannelWidth, GetBand (measurementChannelWidth), - WIFI_PPDU_FIELD_SIG_B); - NS_LOG_DEBUG ("SIG-B: SNR(dB)=" << RatioToDb (snrPer.snr) << ", PER=" << snrPer.per); - - bool success = false; - bool filteredOut = false; - if (m_random->GetValue () > snrPer.per) //SIG-B decoding succeeded - { - Ptr psdu = GetAddressedPsduInPpdu (ppdu); - if (psdu) - { - success = ScheduleStartReceivePayload (event, timeBetweenSigBAndPayload); - } - else - { - NS_LOG_DEBUG ("No PSDU addressed to that PHY in the received MU PPDU. The PPDU is filtered."); - filteredOut = true; - m_phyRxPayloadBeginTrace (txVector, NanoSeconds (0)); //this callback (equivalent to PHY-RXSTART primitive) is also triggered for filtered PPDUs - } - } - else //PHY reception failed - { - NS_LOG_DEBUG ("Drop packet because SIG-B reception failed"); - NotifyRxDrop (GetAddressedPsduInPpdu (ppdu), SIG_B_FAILURE); - } - if (!success) - { - if (filteredOut) - { - AbortCurrentReception (FILTERED); //PHY-RXSTART is immediately followed by PHY-RXEND (Filtered) - if (event->GetEndTime () > (Simulator::Now () + m_state->GetDelayUntilIdle ())) - { - MaybeCcaBusyDuration (GetMeasurementChannelWidth (ppdu)); - } - } - else - { - Time remainingDuration = ppdu->GetTxDuration () - CalculatePhyPreambleAndHeaderDuration (txVector) - + timeBetweenSigBAndPayload; - m_endRxEvents.push_back (Simulator::Schedule (remainingDuration, - &WifiPhy::ResetReceive, this, event)); - } - } -} - -bool -WifiPhy::ScheduleStartReceivePayload (Ptr event, Time timeToPayloadStart) -{ - Ptr ppdu = event->GetPpdu (); - Ptr psdu = GetAddressedPsduInPpdu (ppdu); - NS_ASSERT (psdu); - WifiTxVector txVector = event->GetTxVector (); - uint16_t staId = GetStaId (ppdu); - WifiMode txMode = txVector.GetMode (staId); - uint8_t nss = txVector.GetNssMax(); - if (txVector.GetPreambleType () == WIFI_PREAMBLE_HE_MU) - { - for (auto info : txVector.GetHeMuUserInfoMap ()) - { - if (info.first == staId) - { - nss = info.second.nss; //no need to look at other PSDUs - break; - } - } - } - - bool success = false; - if (nss > GetMaxSupportedRxSpatialStreams ()) - { - NS_LOG_DEBUG ("Packet reception could not be started because not enough RX antennas"); - NotifyRxDrop (psdu, UNSUPPORTED_SETTINGS); - } - else if (IsModeSupported (txMode)) - { - NS_LOG_INFO ("SIG correctly decoded and with supported settings. Schedule start of payload."); - m_state->SwitchMaybeToCcaBusy (timeToPayloadStart); - m_endPhyRxEvent = Simulator::Schedule (timeToPayloadStart, &WifiPhy::StartReceivePayload, this, event); - if (txVector.GetPreambleType () == WIFI_PREAMBLE_HE_TB) - { - m_currentHeTbPpduUid = ppdu->GetUid (); //to be able to correctly schedule start of OFDMA payload - } - success = true; - } - else //mode is not allowed - { - NS_LOG_DEBUG ("Drop packet because it was sent using an unsupported mode (" << txMode << ")"); - NotifyRxDrop (psdu, UNSUPPORTED_SETTINGS); - } - return success; -} - void WifiPhy::StartReceivePayload (Ptr event) { @@ -3516,59 +3161,28 @@ WifiPhy::GetTxPowerForTransmission (WifiTxVector txVector, uint16_t staId /* = S void WifiPhy::StartRx (Ptr event) { - NS_LOG_FUNCTION (this << *event); - NS_LOG_DEBUG ("sync to signal (power=" << event->GetRxPowerW (GetBand (GetMeasurementChannelWidth (event->GetPpdu ()))) << "W)"); - m_interference.NotifyRxStart (); //We need to notify it now so that it starts recording events - m_endPreambleDetectionEvents.push_back (Simulator::Schedule (GetPreambleDetectionDuration (), &WifiPhy::StartReceiveHeader, this, event)); + //TODO: To move to StartReceivePreamble (and include the logic therein) + WifiModulationClass modulation = event->GetTxVector ().GetModulationClass (); + auto it = m_phyEntities.find (modulation); + if (it != m_phyEntities.end ()) + { + it->second->StartReceiveField (WIFI_PPDU_FIELD_PREAMBLE, event); + } + else + { + NS_LOG_DEBUG ("Unsupported modulation received (" << modulation << "), consider as noise"); + if (event->GetEndTime () > (Simulator::Now () + m_state->GetDelayUntilIdle ())) + { + MaybeCcaBusyDuration (GetMeasurementChannelWidth (nullptr)); + } + } } Ptr WifiPhy::GetAddressedPsduInPpdu (Ptr ppdu) const { - Ptr psdu; - switch (ppdu->GetType ()) - { - case WIFI_PPDU_TYPE_UL_MU: - { - uint8_t bssColor = 0; - Ptr device = DynamicCast (GetDevice ()); - if (device) - { - Ptr heConfiguration = device->GetHeConfiguration (); - if (heConfiguration) - { - UintegerValue bssColorAttribute; - heConfiguration->GetAttribute ("BssColor", bssColorAttribute); - bssColor = bssColorAttribute.Get (); - } - } - //TODO Move this to HePhy - psdu = DynamicCast (ppdu)->GetPsdu (bssColor); - } - break; - case WIFI_PPDU_TYPE_DL_MU: - { - uint8_t bssColor = 0; - Ptr device = DynamicCast (GetDevice ()); - if (device) - { - Ptr heConfiguration = device->GetHeConfiguration (); - if (heConfiguration) - { - UintegerValue bssColorAttribute; - heConfiguration->GetAttribute ("BssColor", bssColorAttribute); - bssColor = bssColorAttribute.Get (); - } - } - //TODO Move this to HePhy - psdu = DynamicCast (ppdu)->GetPsdu (bssColor, GetStaId (ppdu)); - } - break; - case WIFI_PPDU_TYPE_SU: - default: - psdu = ppdu->GetPsdu (); - } - return psdu; + //TODO: wrapper. See if still needed + return GetPhyEntity (ppdu->GetModulation ())->GetAddressedPsduInPpdu (ppdu); } uint16_t diff --git a/src/wifi/model/wifi-phy.h b/src/wifi/model/wifi-phy.h index 9a26172f4..b85c2e6a8 100644 --- a/src/wifi/model/wifi-phy.h +++ b/src/wifi/model/wifi-phy.h @@ -147,38 +147,6 @@ public: */ void StartReceivePreamble (Ptr ppdu, RxPowerWattPerChannelBand rxPowersW); - /** - * Start receiving the PHY header of a PPDU (i.e. after the end of receiving the preamble). - * - * \param event the event holding incoming PPDU's information - */ - void StartReceiveHeader (Ptr event); - - /** - * Continue receiving the PHY header of a PPDU (i.e. after the end of receiving the non-HT header part). - * - * \param event the event holding incoming PPDU's information - */ - void ContinueReceiveHeader (Ptr event); - - /** - * The last common PHY header of the current PPDU has been received. - * - * The last common PHY header is: - * - the non-HT header if the PPDU is non-HT - * - the HT or SIG-A header otherwise - * - * \param event the event holding incoming PPDU's information - */ - void EndReceiveCommonHeader (Ptr event); - - /** - * The SIG-B of the current MU PPDU has been received. - * - * \param event the event holding incoming PPDU's information - */ - void EndReceiveSigB (Ptr event); - /** * Start receiving the PSDU (i.e. the first symbol of the PSDU has arrived). * @@ -1249,7 +1217,7 @@ protected: */ Ptr GetPhyEntity (WifiModulationClass modulation); - InterferenceHelper m_interference; //!< Pointer to InterferenceHelper + InterferenceHelper m_interference; //!< the class handling interference computations Ptr m_random; //!< Provides uniform random variables. Ptr m_state; //!< Pointer to WifiPhyStateHelper @@ -1270,8 +1238,6 @@ protected: uint64_t m_previouslyRxPpduUid; //!< UID of the previously received PPDU (reused by HE TB PPDUs), reset to UINT64_MAX upon transmission uint64_t m_previouslyTxPpduUid; //!< UID of the previously sent PPDU, used by AP to recognize response HE TB PPDUs - uint64_t m_currentHeTbPpduUid; //!< UID of the HE TB PPDU being received - static uint64_t m_globalPpduUid; //!< Global counter of the PPDU UID /** @@ -1462,17 +1428,6 @@ private: */ void DropPreambleEvent (Ptr ppdu, WifiPhyRxfailureReason reason, Time endRx, uint16_t measurementChannelWidth); - /** - * Schedule StartReceivePayload if the mode in the SIG and the number of - * spatial streams are supported. - * - * \param event the event holding the incoming PPDU's information - * \param timeToPayloadStart the time left till payload start - * \return \c true if the reception of the payload has been scheduled, - * \c false otherwise - */ - bool ScheduleStartReceivePayload (Ptr event, Time timeToPayloadStart); - /** * The trace source fired when a packet begins the transmission process on * the medium. diff --git a/src/wifi/test/spectrum-wifi-phy-test.cc b/src/wifi/test/spectrum-wifi-phy-test.cc index f948567ba..a920281d6 100644 --- a/src/wifi/test/spectrum-wifi-phy-test.cc +++ b/src/wifi/test/spectrum-wifi-phy-test.cc @@ -320,7 +320,7 @@ SpectrumWifiPhyListenerTest::DoRun (void) Simulator::Run (); NS_TEST_ASSERT_MSG_EQ (m_count, 1, "Didn't receive right number of packets"); - NS_TEST_ASSERT_MSG_EQ (m_listener->m_notifyMaybeCcaBusyStart, 3, "Didn't receive NotifyMaybeCcaBusyStart (preamble deteted + L-SIG received + common PHY header(s) received)"); + NS_TEST_ASSERT_MSG_EQ (m_listener->m_notifyMaybeCcaBusyStart, 2, "Didn't receive NotifyMaybeCcaBusyStart (once preamble is detected + prolonged by L-SIG reception, then switched to Rx by at the beginning of data)"); NS_TEST_ASSERT_MSG_EQ (m_listener->m_notifyRxStart, 1, "Didn't receive NotifyRxStart"); NS_TEST_ASSERT_MSG_EQ (m_listener->m_notifyRxEndOk, 1, "Didn't receive NotifyRxEnd");