Avoid unexpected requests to DCF when packets get queued during EdcaTxopN::MissedAck or during EdcaTxopN::MissedCts
--- 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