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:
@@ -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 ();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user