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.
This commit is contained in:
Stefano Avallone
2021-10-01 13:46:22 +02:00
parent cf8ef91a29
commit aba6227449

View File

@@ -236,8 +236,8 @@ BlockAckManager::StorePacket (Ptr<WifiMacQueueItem> mpdu)
// store the packet and keep the list sorted in increasing order of sequence number // store the packet and keep the list sorted in increasing order of sequence number
// with respect to the starting sequence number // with respect to the starting sequence number
PacketQueueI it = agreementIt->second.second.begin (); auto it = agreementIt->second.second.rbegin ();
while (it != agreementIt->second.second.end ()) while (it != agreementIt->second.second.rend ())
{ {
if (mpdu->GetHeader ().GetSequenceControl () == (*it)->GetHeader ().GetSequenceControl ()) if (mpdu->GetHeader ().GetSequenceControl () == (*it)->GetHeader ().GetSequenceControl ())
{ {
@@ -247,15 +247,15 @@ BlockAckManager::StorePacket (Ptr<WifiMacQueueItem> mpdu)
uint16_t dist = agreementIt->second.first.GetDistance ((*it)->GetHeader ().GetSequenceNumber ()); uint16_t dist = agreementIt->second.first.GetDistance ((*it)->GetHeader ().GetSequenceNumber ());
if (mpduDist < dist || if (mpduDist > dist ||
(mpduDist == dist && mpdu->GetHeader ().GetFragmentNumber () < (*it)->GetHeader ().GetFragmentNumber ())) (mpduDist == dist && mpdu->GetHeader ().GetFragmentNumber () > (*it)->GetHeader ().GetFragmentNumber ()))
{ {
break; break;
} }
it++; it++;
} }
agreementIt->second.second.insert (it, mpdu); agreementIt->second.second.insert (std::prev (it.base ()), mpdu);
agreementIt->second.first.NotifyTransmittedMpdu (mpdu); agreementIt->second.first.NotifyTransmittedMpdu (mpdu);
mpdu->SetInFlight (); mpdu->SetInFlight ();
} }