wifi: (fixes #2397) Add backoff and cw tracing to EDCA
This commit is contained in:
@@ -41,6 +41,7 @@ Bugs fixed
|
||||
- Bug 2383 - IPv4 header for reassembled packets reports a wrong payload size
|
||||
- Bug 2392 - SYN segment advertised window should not be scaled
|
||||
- Bug 2396 - move utility functions to WifiPhy
|
||||
- Bug 2397 - add backoff and cw tracing to EDCA
|
||||
|
||||
Known issues
|
||||
------------
|
||||
|
||||
@@ -240,6 +240,14 @@ EdcaTxopN::GetTypeId (void)
|
||||
PointerValue (),
|
||||
MakePointerAccessor (&EdcaTxopN::GetEdcaQueue),
|
||||
MakePointerChecker<WifiMacQueue> ())
|
||||
.AddTraceSource ("BackoffTrace",
|
||||
"Trace source for backoff values",
|
||||
MakeTraceSourceAccessor (&EdcaTxopN::m_backoffTrace),
|
||||
"ns3::TracedValue::Uint32Callback")
|
||||
.AddTraceSource ("CwTrace",
|
||||
"Trace source for contention window values",
|
||||
MakeTraceSourceAccessor (&EdcaTxopN::m_cwTrace),
|
||||
"ns3::TracedValue::Uint32Callback")
|
||||
;
|
||||
return tid;
|
||||
}
|
||||
@@ -632,7 +640,8 @@ void
|
||||
EdcaTxopN::NotifyCollision (void)
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
|
||||
m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ());
|
||||
m_dcf->StartBackoffNow (m_backoffTrace);
|
||||
RestartAccessIfNeeded ();
|
||||
}
|
||||
|
||||
@@ -708,12 +717,15 @@ EdcaTxopN::MissedCts (void)
|
||||
m_currentPacket = 0;
|
||||
}
|
||||
m_dcf->ResetCw ();
|
||||
m_cwTrace = m_dcf->GetCw ();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_dcf->UpdateFailedCw ();
|
||||
m_cwTrace = m_dcf->GetCw ();
|
||||
}
|
||||
m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
|
||||
m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ());
|
||||
m_dcf->StartBackoffNow (m_backoffTrace);
|
||||
RestartAccessIfNeeded ();
|
||||
}
|
||||
|
||||
@@ -790,7 +802,9 @@ EdcaTxopN::GotAck (double snr, WifiMode txMode)
|
||||
m_currentPacket = 0;
|
||||
|
||||
m_dcf->ResetCw ();
|
||||
m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
|
||||
m_cwTrace = m_dcf->GetCw ();
|
||||
m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ());
|
||||
m_dcf->StartBackoffNow (m_backoffTrace);
|
||||
RestartAccessIfNeeded ();
|
||||
}
|
||||
else
|
||||
@@ -858,14 +872,17 @@ EdcaTxopN::MissedAck (void)
|
||||
m_currentPacket = 0;
|
||||
}
|
||||
m_dcf->ResetCw ();
|
||||
m_cwTrace = m_dcf->GetCw ();
|
||||
}
|
||||
else
|
||||
{
|
||||
NS_LOG_DEBUG ("Retransmit");
|
||||
m_currentHdr.SetRetry ();
|
||||
m_dcf->UpdateFailedCw ();
|
||||
m_cwTrace = m_dcf->GetCw ();
|
||||
}
|
||||
m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
|
||||
m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ());
|
||||
m_dcf->StartBackoffNow (m_backoffTrace);
|
||||
RestartAccessIfNeeded ();
|
||||
}
|
||||
|
||||
@@ -945,6 +962,7 @@ EdcaTxopN::MissedBlockAck (uint32_t nMpdus)
|
||||
m_currentHdr = hdr;
|
||||
}
|
||||
m_dcf->UpdateFailedCw ();
|
||||
m_cwTrace = m_dcf->GetCw ();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -952,8 +970,10 @@ EdcaTxopN::MissedBlockAck (uint32_t nMpdus)
|
||||
//to reset the dcf.
|
||||
m_currentPacket = 0;
|
||||
m_dcf->ResetCw ();
|
||||
m_cwTrace = m_dcf->GetCw ();
|
||||
}
|
||||
m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
|
||||
m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ());
|
||||
m_dcf->StartBackoffNow (m_backoffTrace);
|
||||
RestartAccessIfNeeded ();
|
||||
}
|
||||
|
||||
@@ -1081,7 +1101,9 @@ EdcaTxopN::EndTxNoAck (void)
|
||||
NS_LOG_DEBUG ("a transmission that did not require an ACK just finished");
|
||||
m_currentPacket = 0;
|
||||
m_dcf->ResetCw ();
|
||||
m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
|
||||
m_cwTrace = m_dcf->GetCw ();
|
||||
m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ());
|
||||
m_dcf->StartBackoffNow (m_backoffTrace);
|
||||
StartAccessIfNeeded ();
|
||||
}
|
||||
|
||||
@@ -1252,7 +1274,9 @@ EdcaTxopN::GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address rec
|
||||
}
|
||||
m_currentPacket = 0;
|
||||
m_dcf->ResetCw ();
|
||||
m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
|
||||
m_cwTrace = m_dcf->GetCw ();
|
||||
m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ());
|
||||
m_dcf->StartBackoffNow (m_backoffTrace);
|
||||
RestartAccessIfNeeded ();
|
||||
}
|
||||
|
||||
@@ -1528,7 +1552,9 @@ EdcaTxopN::DoInitialize ()
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
m_dcf->ResetCw ();
|
||||
m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
|
||||
m_cwTrace = m_dcf->GetCw ();
|
||||
m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ());
|
||||
m_dcf->StartBackoffNow (m_backoffTrace);
|
||||
ns3::Dcf::DoInitialize ();
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "ns3/object.h"
|
||||
#include "ns3/mac48-address.h"
|
||||
#include "ns3/packet.h"
|
||||
#include "ns3/traced-value.h"
|
||||
#include "wifi-mode.h"
|
||||
#include "wifi-mac-header.h"
|
||||
#include "wifi-remote-station-manager.h"
|
||||
@@ -562,6 +563,8 @@ private:
|
||||
Time m_currentPacketTimestamp;
|
||||
uint16_t m_blockAckInactivityTimeout;
|
||||
struct Bar m_currentBar;
|
||||
TracedValue<uint32_t> m_backoffTrace;
|
||||
TracedValue<uint32_t> m_cwTrace;
|
||||
};
|
||||
|
||||
} //namespace ns3
|
||||
|
||||
Reference in New Issue
Block a user