Avoid unexpected requests to DCF when packets get queued during EdcaTxopN::MissedAck or during EdcaTxopN::MissedCts
authorSébastien Deronne <sebastien.deronne@gmail.com>
Mon, 14 Sep 2015 19:07:10 +0200
changeset 11663 12363bc31764
parent 11662 886aad6f6702
child 11664 f09955ef98e5
Avoid unexpected requests to DCF when packets get queued during EdcaTxopN::MissedAck or during EdcaTxopN::MissedCts
src/wifi/model/edca-txop-n.cc
--- a/src/wifi/model/edca-txop-n.cc	Fri Sep 11 21:50:40 2015 +0200
+++ b/src/wifi/model/edca-txop-n.cc	Mon Sep 14 19:07:10 2015 +0200
@@ -669,7 +669,7 @@
   if (!NeedRtsRetransmission ())
     {
       NS_LOG_DEBUG ("Cts Fail");
-      m_currentPacket = 0;
+      bool resetCurrentPacket = true;
       m_stationManager->ReportFinalRtsFailed (m_currentHdr.GetAddr1 (), &m_currentHdr);
       if (!m_txFailedCallback.IsNull ())
         {
@@ -711,9 +711,14 @@
               hdr.SetNoMoreFragments ();
               m_currentPacket = request.bar;
               m_currentHdr = hdr;
+              resetCurrentPacket = false;
             }
         }
       //to reset the dcf.
+      if (resetCurrentPacket == true)
+        {
+          m_currentPacket = 0;
+        }
       m_dcf->ResetCw ();
     }
   else
@@ -817,8 +822,7 @@
     {
       NS_LOG_DEBUG ("Ack Fail");
       m_stationManager->ReportFinalDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr);
-      //to reset the dcf.
-      m_currentPacket = 0;
+      bool resetCurrentPacket = true;
       if (!m_txFailedCallback.IsNull ())
         {
           m_txFailedCallback (m_currentHdr);
@@ -859,8 +863,14 @@
               hdr.SetNoMoreFragments ();
               m_currentPacket = request.bar;
               m_currentHdr = hdr;
+              resetCurrentPacket = false;
             }
         }
+      //to reset the dcf.
+      if (resetCurrentPacket == true)
+        {
+          m_currentPacket = 0;
+        }
       m_dcf->ResetCw ();
     }
   else