From 5c197ca1e2c23860d443a08964f41eee53ffe1e8 Mon Sep 17 00:00:00 2001 From: Stefano Avallone Date: Mon, 4 Mar 2019 09:10:28 +0100 Subject: [PATCH] wifi: Keep the timestamp when passing MPDUs to MacLow --- src/wave/model/wave-mac-low.cc | 11 +++++----- src/wave/model/wave-mac-low.h | 6 ++---- src/wifi/model/mac-low.cc | 39 +++++++++++++++++----------------- src/wifi/model/mac-low.h | 6 ++---- src/wifi/model/qos-txop.cc | 15 +++++++------ src/wifi/model/txop.cc | 11 ++++++---- 6 files changed, 44 insertions(+), 44 deletions(-) diff --git a/src/wave/model/wave-mac-low.cc b/src/wave/model/wave-mac-low.cc index b0ecfcd91..132c204b2 100644 --- a/src/wave/model/wave-mac-low.cc +++ b/src/wave/model/wave-mac-low.cc @@ -106,22 +106,21 @@ WaveMacLow::GetDataTxVector (Ptr item) const } void -WaveMacLow::StartTransmission (Ptr packet, - const WifiMacHeader* hdr, +WaveMacLow::StartTransmission (Ptr mpdu, MacLowTransmissionParameters params, Ptr dca) { - NS_LOG_FUNCTION (this << packet << hdr << params << dca); + NS_LOG_FUNCTION (this << *mpdu << params << dca); Ptr phy = MacLow::GetPhy (); uint32_t curChannel = phy->GetChannelNumber (); // if current channel access is not AlternatingAccess, just do as MacLow. if (!m_scheduler->IsAlternatingAccessAssigned (curChannel)) { - MacLow::StartTransmission (packet, hdr, params, dca); + MacLow::StartTransmission (mpdu, params, dca); return; } - Time transmissionTime = MacLow::CalculateTransmissionTime (packet, hdr, params); + Time transmissionTime = MacLow::CalculateTransmissionTime (mpdu->GetPacket (), &mpdu->GetHeader (), params); Time remainingTime = m_coordinator->NeedTimeToGuardInterval (); if (transmissionTime > remainingTime) @@ -134,7 +133,7 @@ WaveMacLow::StartTransmission (Ptr packet, } else { - MacLow::StartTransmission (packet, hdr, params, dca); + MacLow::StartTransmission (mpdu, params, dca); } } diff --git a/src/wave/model/wave-mac-low.h b/src/wave/model/wave-mac-low.h index 838d395e7..5e896a3eb 100644 --- a/src/wave/model/wave-mac-low.h +++ b/src/wave/model/wave-mac-low.h @@ -63,16 +63,14 @@ public: void SetWaveNetDevice (Ptr device); /** - * \param packet packet to send - * \param hdr 802.11 header for packet to send + * \param mpdu packet to send * \param parameters the transmission parameters to use for this packet. * \param txop pointer to the calling Txop. * * Start the transmission of the input packet and notify the listener * of transmission events. */ - virtual void StartTransmission (Ptr packet, - const WifiMacHeader* hdr, + virtual void StartTransmission (Ptr mpdu, MacLowTransmissionParameters parameters, Ptr txop); private: diff --git a/src/wifi/model/mac-low.cc b/src/wifi/model/mac-low.cc index f296196f4..9ba8614a4 100644 --- a/src/wifi/model/mac-low.cc +++ b/src/wifi/model/mac-low.cc @@ -487,12 +487,11 @@ MacLow::RegisterDcf (Ptr dcf) } void -MacLow::StartTransmission (Ptr packet, - const WifiMacHeader* hdr, +MacLow::StartTransmission (Ptr mpdu, MacLowTransmissionParameters params, Ptr txop) { - NS_LOG_FUNCTION (this << packet << hdr << params << txop); + NS_LOG_FUNCTION (this << *mpdu << params << txop); NS_ASSERT (!m_cfAckInfo.expectCfAck); if (m_phy->IsStateOff ()) { @@ -513,17 +512,18 @@ MacLow::StartTransmission (Ptr packet, * QapScheduler has taken access to the channel from * one of the Edca of the QAP. */ - m_currentPacket = Create (packet, *hdr); + m_currentPacket = Create (mpdu, false); + const WifiMacHeader& hdr = mpdu->GetHeader (); CancelAllEvents (); m_currentTxop = txop; m_txParams = params; - if (hdr->IsCtl ()) + if (hdr.IsCtl ()) { - m_currentTxVector = GetRtsTxVector (*m_currentPacket->begin ()); + m_currentTxVector = GetRtsTxVector (mpdu); } else { - m_currentTxVector = GetDataTxVector (*m_currentPacket->begin ()); // TODO + m_currentTxVector = GetDataTxVector (mpdu); } if (NeedRts () && !IsCfPeriod ()) @@ -541,27 +541,27 @@ MacLow::StartTransmission (Ptr packet, * (c) a QoS data or DELBA Request frame dequeued from a QosTxop * (d) a BlockAckReq or ADDBA Request frame */ - if (hdr->IsQosData () && !hdr->GetAddr1 ().IsBroadcast () && m_mpduAggregator != 0) + if (hdr.IsQosData () && !hdr.GetAddr1 ().IsBroadcast () && m_mpduAggregator != 0) { /* We get here if the received packet is any of the following: * (a) a QoS data frame * (b) a BlockAckRequest */ - uint8_t tid = GetTid (packet, *hdr); + uint8_t tid = GetTid (mpdu->GetPacket (), hdr); Ptr qosTxop = m_edca.find (QosUtilsMapTidToAc (tid))->second; std::vector> mpduList; //Perform MPDU aggregation if possible - mpduList = m_mpduAggregator->GetNextAmpdu (*m_currentPacket->begin (), m_currentTxVector); + mpduList = m_mpduAggregator->GetNextAmpdu (mpdu, m_currentTxVector); if (mpduList.size () > 1) { m_currentPacket = Create (mpduList); // assume implicit block ack for now - qosTxop->CompleteAmpduTransfer (hdr->GetAddr1 (), tid); + qosTxop->CompleteAmpduTransfer (hdr.GetAddr1 (), tid); - if (qosTxop->GetBaBufferSize (hdr->GetAddr1 (), tid) > 64) + if (qosTxop->GetBaBufferSize (hdr.GetAddr1 (), tid) > 64) { m_txParams.EnableExtendedCompressedBlockAck (); } @@ -571,27 +571,26 @@ MacLow::StartTransmission (Ptr packet, } NS_LOG_DEBUG ("tx unicast A-MPDU containing " << mpduList.size () << " MPDUs"); - qosTxop->SetAmpduExist (hdr->GetAddr1 (), true); + qosTxop->SetAmpduExist (hdr.GetAddr1 (), true); } else if (m_currentTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT || m_currentTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HE) { // VHT/HE single MPDU - Ptr mpdu = *m_currentPacket->begin (); - mpdu->GetHeader ().SetQosAckPolicy (WifiMacHeader::NORMAL_ACK); m_currentPacket = Create (mpdu, true); + m_currentPacket->SetAckPolicyForTid (tid, WifiMacHeader::NORMAL_ACK); - if (qosTxop->GetBaAgreementEstablished (hdr->GetAddr1 (), tid)) + if (qosTxop->GetBaAgreementEstablished (hdr.GetAddr1 (), tid)) { - qosTxop->CompleteAmpduTransfer (hdr->GetAddr1 (), tid); + qosTxop->CompleteAmpduTransfer (hdr.GetAddr1 (), tid); } //VHT/HE single MPDUs are followed by normal ACKs m_txParams.EnableAck (); - NS_LOG_DEBUG ("tx unicast S-MPDU with sequence number " << hdr->GetSequenceNumber ()); - qosTxop->SetAmpduExist (hdr->GetAddr1 (), true); + NS_LOG_DEBUG ("tx unicast S-MPDU with sequence number " << hdr.GetSequenceNumber ()); + qosTxop->SetAmpduExist (hdr.GetAddr1 (), true); } - else if (hdr->IsQosData () && !hdr->IsQosBlockAck () && !hdr->GetAddr1 ().IsGroup ()) + else if (hdr.IsQosData () && !hdr.IsQosBlockAck () && !hdr.GetAddr1 ().IsGroup ()) { m_txParams.EnableAck (); } diff --git a/src/wifi/model/mac-low.h b/src/wifi/model/mac-low.h index 072d7a28c..06bc6223f 100644 --- a/src/wifi/model/mac-low.h +++ b/src/wifi/model/mac-low.h @@ -324,16 +324,14 @@ public: const MacLowTransmissionParameters& params) const; /** - * \param packet packet to send - * \param hdr 802.11 header for packet to send + * \param mpdu packet to send * \param parameters the transmission parameters to use for this packet. * \param txop pointer to the calling Txop. * * Start the transmission of the input packet and notify the listener * of transmission events. */ - virtual void StartTransmission (Ptr packet, - const WifiMacHeader* hdr, + virtual void StartTransmission (Ptr mpdu, MacLowTransmissionParameters parameters, Ptr txop); diff --git a/src/wifi/model/qos-txop.cc b/src/wifi/model/qos-txop.cc index a82fa081e..5aa6c44d0 100644 --- a/src/wifi/model/qos-txop.cc +++ b/src/wifi/model/qos-txop.cc @@ -495,13 +495,15 @@ QosTxop::NotifyAccessGranted (void) VerifyBlockAck (); } } + Ptr mpdu = Create (m_currentPacket, m_currentHdr, + m_currentPacketTimestamp); if (m_currentHdr.GetAddr1 ().IsGroup ()) { m_currentParams.DisableRts (); m_currentParams.DisableAck (); m_currentParams.DisableNextData (); NS_LOG_DEBUG ("tx broadcast"); - m_low->StartTransmission (m_currentPacket, &m_currentHdr, m_currentParams, this); + m_low->StartTransmission (mpdu, m_currentParams, this); } else if (m_currentHdr.GetType () == WIFI_MAC_CTL_BACKREQ) { @@ -537,13 +539,14 @@ QosTxop::NotifyAccessGranted (void) NS_LOG_DEBUG ("fragmenting size=" << fragment->GetSize ()); m_currentParams.EnableNextData (GetNextFragmentSize ()); } - m_low->StartTransmission (fragment, &hdr, m_currentParams, this); + m_low->StartTransmission (Create (fragment, hdr), + m_currentParams, this); } else { m_currentIsFragmented = false; m_currentParams.DisableNextData (); - m_low->StartTransmission (m_currentPacket, &m_currentHdr, m_currentParams, this); + m_low->StartTransmission (mpdu, m_currentParams, this); if (!GetAmpduExist (m_currentHdr.GetAddr1 ())) { CompleteTx (); @@ -1186,7 +1189,7 @@ QosTxop::StartNextPacket (void) m_stationManager->UpdateFragmentationThreshold (); m_fragmentNumber = 0; VerifyBlockAck (); - GetLow ()->StartTransmission (m_currentPacket, &m_currentHdr, m_currentParams, this); + GetLow ()->StartTransmission (item, m_currentParams, this); if (!GetAmpduExist (m_currentHdr.GetAddr1 ())) { CompleteTx (); @@ -1715,7 +1718,7 @@ QosTxop::SendBlockAckRequest (const Bar &bar) //Delayed block ack m_currentParams.EnableAck (); } - m_low->StartTransmission (m_currentPacket, &m_currentHdr, m_currentParams, this); + m_low->StartTransmission (Create (m_currentPacket, m_currentHdr), m_currentParams, this); } void @@ -1807,7 +1810,7 @@ QosTxop::SendAddBaRequest (Mac48Address dest, uint8_t tid, uint16_t startSeq, m_currentParams.DisableRts (); m_currentParams.DisableNextData (); - m_low->StartTransmission (m_currentPacket, &m_currentHdr, m_currentParams, this); + m_low->StartTransmission (Create (m_currentPacket, m_currentHdr), m_currentParams, this); } void diff --git a/src/wifi/model/txop.cc b/src/wifi/model/txop.cc index 617768e3c..b9d42c0a5 100644 --- a/src/wifi/model/txop.cc +++ b/src/wifi/model/txop.cc @@ -498,7 +498,8 @@ Txop::NotifyAccessGranted (void) m_currentParams.DisableAck (); m_currentParams.DisableNextData (); NS_LOG_DEBUG ("tx broadcast"); - GetLow ()->StartTransmission (m_currentPacket, &m_currentHdr, m_currentParams, this); + GetLow ()->StartTransmission (Create (m_currentPacket, m_currentHdr), + m_currentParams, this); } else { @@ -517,12 +518,14 @@ Txop::NotifyAccessGranted (void) NS_LOG_DEBUG ("fragmenting size=" << fragment->GetSize ()); m_currentParams.EnableNextData (GetNextFragmentSize ()); } - GetLow ()->StartTransmission (fragment, &hdr, m_currentParams, this); + GetLow ()->StartTransmission (Create (fragment, hdr), + m_currentParams, this); } else { m_currentParams.DisableNextData (); - GetLow ()->StartTransmission (m_currentPacket, &m_currentHdr, m_currentParams, this); + GetLow ()->StartTransmission (Create (m_currentPacket, m_currentHdr), + m_currentParams, this); } } } @@ -737,7 +740,7 @@ Txop::StartNextFragment (void) { m_currentParams.EnableNextData (GetNextFragmentSize ()); } - GetLow ()->StartTransmission (fragment, &hdr, m_currentParams, this); + GetLow ()->StartTransmission (Create (fragment, hdr), m_currentParams, this); } void