From bf847b00dd76fcfce56550a30c1a68ef4fe5cd67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deronne?= Date: Tue, 6 Jun 2017 19:54:21 +0200 Subject: [PATCH] wifi: (fixes #2744) Fix issue with S-MPDU when CTS response is not received --- RELEASE_NOTES | 1 + src/wifi/model/mac-low.cc | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index fe9c72682..66ff9e7fa 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -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 ------------ diff --git a/src/wifi/model/mac-low.cc b/src/wifi/model/mac-low.cc index 73f2f374f..92c7cb84f 100644 --- a/src/wifi/model/mac-low.cc +++ b/src/wifi/model/mac-low.cc @@ -1546,13 +1546,14 @@ MacLow::ForwardDown (Ptr 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 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 (aggPacket, peekedHdr)); } @@ -2842,7 +2843,7 @@ MacLow::AggregateToAmpdu (Ptr 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 packet, const WifiMacHeader hdr) currentAggregatedPacket = Create (); edcaIt->second->GetMpduAggregator ()->AggregateSingleMpdu (packet, currentAggregatedPacket); m_aggregateQueue[tid]->Enqueue (Create (packet, peekedHdr)); - + if (m_txParams.MustSendRts ()) + { + InsertInTxQueue (packet, peekedHdr, tstamp, tid); + } if (edcaIt->second->GetBaAgreementExists (hdr.GetAddr1 (), tid)) { edcaIt->second->CompleteAmpduTransfer (peekedHdr.GetAddr1 (), tid);