wifi: (fixes #2514) Fix maximum transmission time for VHT A-MPDUs
authorSébastien Deronne <sebastien.deronne@gmail.com>
Sun, 02 Oct 2016 04:38:54 +0200
changeset 12358 f577cc35732a
parent 12357 f5edea84a92f
child 12359 089d8b1c5991
wifi: (fixes #2514) Fix maximum transmission time for VHT A-MPDUs
RELEASE_NOTES
src/wifi/model/mac-low.cc
--- a/RELEASE_NOTES	Sat Oct 01 16:28:29 2016 +0200
+++ b/RELEASE_NOTES	Sun Oct 02 04:38:54 2016 +0200
@@ -126,6 +126,7 @@
 - Bug 2500 - Ipv[4,6]RawSocket ignores IpTtl tag
 - Bug 2507 - ConfigStore RawTextConfigLoad doesn't reset stream error state
 - Bug 2508 - Duplicate of bug 2507
+- Bug 2514 - The maximum transmission time for VHT A-MPDUs is not correct 
 - No BugId - Arp logging: label with request or reply properly
 
 Known issues
--- a/src/wifi/model/mac-low.cc	Sat Oct 01 16:28:29 2016 +0200
+++ b/src/wifi/model/mac-low.cc	Sun Oct 02 04:38:54 2016 +0200
@@ -2914,6 +2914,7 @@
     }
 
   WifiPreamble preamble;
+  Time aPPDUMaxTime = MilliSeconds (10);
 
   uint8_t tid = GetTid (peekedPacket, peekedHdr);
   AcIndex ac = QosUtilsMapTidToAc (tid);
@@ -2922,6 +2923,7 @@
   if (m_currentTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT)
     {
       preamble = WIFI_PREAMBLE_VHT;
+      aPPDUMaxTime = MicroSeconds (5484);
     }
   else if (m_phy->GetGreenfield () && m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
     {
@@ -2940,8 +2942,8 @@
       preamble = WIFI_PREAMBLE_LONG;
     }
 
-  //An HT STA shall not transmit a PPDU that has a duration that is greater than aPPDUMaxTime (10 milliseconds)
-  if (m_phy->CalculateTxDuration (aggregatedPacket->GetSize () + peekedPacket->GetSize () + peekedHdr.GetSize () + WIFI_MAC_FCS_LENGTH, m_currentTxVector, preamble, m_phy->GetFrequency ()) > MilliSeconds (10))
+  //A STA shall not transmit a PPDU that has a duration that is greater than aPPDUMaxTime
+  if (m_phy->CalculateTxDuration (aggregatedPacket->GetSize () + peekedPacket->GetSize () + peekedHdr.GetSize () + WIFI_MAC_FCS_LENGTH, m_currentTxVector, preamble, m_phy->GetFrequency ()) > aPPDUMaxTime)
     {
       NS_LOG_DEBUG ("no more packets can be aggregated to satisfy PPDU <= aPPDUMaxTime");
       return true;