wifi: (fixes #2744) Fix issue with S-MPDU when CTS response is not received

This commit is contained in:
Sébastien Deronne
2017-06-06 19:54:21 +02:00
parent 625680c663
commit bf847b00dd
2 changed files with 9 additions and 4 deletions

View File

@@ -104,6 +104,7 @@ Bugs fixed
- Bug 2717 - Fix mask generation for Ipv4RoutingTableEntry::CreateDefaultRoute
- Bug 2722 - 802.11g sends DSSS spectrum signals using CreateOfdmTxPowerSpectralDensity
- Bug 2741 - IPv4 fragmentation fails when last fragment have to be re-fragmented.
- Bug 2744 - 802.11n/ac with RTS/CTS is crashing for a large number of nodes
Known issues
------------

View File

@@ -1546,13 +1546,14 @@ MacLow::ForwardDown (Ptr<const Packet> packet, const WifiMacHeader* hdr, WifiTxV
if (delay.IsZero ())
{
NS_LOG_DEBUG ("Sending MPDU as part of A-MPDU");
if (!singleMpdu)
{
NS_LOG_DEBUG ("Sending MPDU as part of A-MPDU");
mpdutype = MPDU_IN_AGGREGATE;
}
else
{
NS_LOG_DEBUG ("Sending S-MPDU");
mpdutype = NORMAL_MPDU;
}
}
@@ -2757,7 +2758,7 @@ MacLow::AggregateToAmpdu (Ptr<const Packet> packet, const WifiMacHeader hdr)
if (aggregated)
{
NS_LOG_DEBUG ("Adding packet with Sequence number " << currentSequenceNumber << " to A-MPDU, packet size = " << newPacket->GetSize () << ", A-MPDU size = " << currentAggregatedPacket->GetSize ());
NS_LOG_DEBUG ("Adding packet with sequence number " << currentSequenceNumber << " to A-MPDU, packet size = " << newPacket->GetSize () << ", A-MPDU size = " << currentAggregatedPacket->GetSize ());
i++;
m_aggregateQueue[tid]->Enqueue (Create<WifiMacQueueItem> (aggPacket, peekedHdr));
}
@@ -2842,7 +2843,7 @@ MacLow::AggregateToAmpdu (Ptr<const Packet> packet, const WifiMacHeader hdr)
InsertInTxQueue (packet, hdr, tstamp, tid);
}
}
NS_LOG_DEBUG ("Adding packet with Sequence number " << peekedHdr.GetSequenceNumber () << " to A-MPDU, packet size = " << newPacket->GetSize () << ", A-MPDU size = " << currentAggregatedPacket->GetSize ());
NS_LOG_DEBUG ("Adding packet with sequence number " << peekedHdr.GetSequenceNumber () << " to A-MPDU, packet size = " << newPacket->GetSize () << ", A-MPDU size = " << currentAggregatedPacket->GetSize ());
i++;
isAmpdu = true;
if (!m_txParams.MustSendRts ())
@@ -2981,7 +2982,10 @@ MacLow::AggregateToAmpdu (Ptr<const Packet> packet, const WifiMacHeader hdr)
currentAggregatedPacket = Create<Packet> ();
edcaIt->second->GetMpduAggregator ()->AggregateSingleMpdu (packet, currentAggregatedPacket);
m_aggregateQueue[tid]->Enqueue (Create<WifiMacQueueItem> (packet, peekedHdr));
if (m_txParams.MustSendRts ())
{
InsertInTxQueue (packet, peekedHdr, tstamp, tid);
}
if (edcaIt->second->GetBaAgreementExists (hdr.GetAddr1 (), tid))
{
edcaIt->second->CompleteAmpduTransfer (peekedHdr.GetAddr1 (), tid);