From aba6227449d674370c85d244070cab320793a144 Mon Sep 17 00:00:00 2001 From: Stefano Avallone Date: Fri, 1 Oct 2021 13:46:22 +0200 Subject: [PATCH] wifi: Iterate over the in-flight MPDUs in reverse order A newly added MPDU is likely to have a Sequence Number higher than the previous ones, hence it likely has to be inserted at the end of the list. --- src/wifi/model/block-ack-manager.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/wifi/model/block-ack-manager.cc b/src/wifi/model/block-ack-manager.cc index 1a3531c33..02cd420da 100644 --- a/src/wifi/model/block-ack-manager.cc +++ b/src/wifi/model/block-ack-manager.cc @@ -236,8 +236,8 @@ BlockAckManager::StorePacket (Ptr mpdu) // store the packet and keep the list sorted in increasing order of sequence number // with respect to the starting sequence number - PacketQueueI it = agreementIt->second.second.begin (); - while (it != agreementIt->second.second.end ()) + auto it = agreementIt->second.second.rbegin (); + while (it != agreementIt->second.second.rend ()) { if (mpdu->GetHeader ().GetSequenceControl () == (*it)->GetHeader ().GetSequenceControl ()) { @@ -247,15 +247,15 @@ BlockAckManager::StorePacket (Ptr mpdu) uint16_t dist = agreementIt->second.first.GetDistance ((*it)->GetHeader ().GetSequenceNumber ()); - if (mpduDist < dist || - (mpduDist == dist && mpdu->GetHeader ().GetFragmentNumber () < (*it)->GetHeader ().GetFragmentNumber ())) + if (mpduDist > dist || + (mpduDist == dist && mpdu->GetHeader ().GetFragmentNumber () > (*it)->GetHeader ().GetFragmentNumber ())) { break; } it++; } - agreementIt->second.second.insert (it, mpdu); + agreementIt->second.second.insert (std::prev (it.base ()), mpdu); agreementIt->second.first.NotifyTransmittedMpdu (mpdu); mpdu->SetInFlight (); }