From 9cec054b130c9acf5c800cd8198b92e5dfa3d499 Mon Sep 17 00:00:00 2001 From: Tom Henderson Date: Fri, 13 May 2016 09:54:26 +0200 Subject: [PATCH] wifi: (fixes #2397) Add backoff and cw tracing to EDCA --- RELEASE_NOTES | 1 + src/wifi/model/edca-txop-n.cc | 42 ++++++++++++++++++++++++++++------- src/wifi/model/edca-txop-n.h | 3 +++ 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 7464d4d84..d4ee6ab8b 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -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 ------------ diff --git a/src/wifi/model/edca-txop-n.cc b/src/wifi/model/edca-txop-n.cc index 48cbb92e3..c06a90d61 100644 --- a/src/wifi/model/edca-txop-n.cc +++ b/src/wifi/model/edca-txop-n.cc @@ -240,6 +240,14 @@ EdcaTxopN::GetTypeId (void) PointerValue (), MakePointerAccessor (&EdcaTxopN::GetEdcaQueue), MakePointerChecker ()) + .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 (); } diff --git a/src/wifi/model/edca-txop-n.h b/src/wifi/model/edca-txop-n.h index 2a17fff7e..94889f03e 100644 --- a/src/wifi/model/edca-txop-n.h +++ b/src/wifi/model/edca-txop-n.h @@ -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 m_backoffTrace; + TracedValue m_cwTrace; }; } //namespace ns3