GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
authorFederico Maguolo <maguolof@dei.unipd.it>
Fri, 28 Mar 2008 12:14:02 -0700
changeset 2784 49006cbbfac7
parent 2783 6c9853569bbf
child 2785 8d6957b68b8b
child 2853 1cff5dd98f63
GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
examples/wifi-adhoc.cc
src/devices/wifi/amrr-wifi-manager.cc
src/devices/wifi/amrr-wifi-manager.h
src/devices/wifi/arf-wifi-manager.cc
src/devices/wifi/arf-wifi-manager.h
src/devices/wifi/constant-rate-wifi-manager.cc
src/devices/wifi/constant-rate-wifi-manager.h
src/devices/wifi/dca-txop.cc
src/devices/wifi/dca-txop.h
src/devices/wifi/ideal-wifi-manager.cc
src/devices/wifi/ideal-wifi-manager.h
src/devices/wifi/onoe-wifi-manager.cc
src/devices/wifi/onoe-wifi-manager.h
src/devices/wifi/rraa-wifi-manager.cc
src/devices/wifi/rraa-wifi-manager.h
src/devices/wifi/wifi-remote-station-manager.cc
src/devices/wifi/wifi-remote-station-manager.h
--- a/examples/wifi-adhoc.cc	Fri Mar 28 11:26:59 2008 -0700
+++ b/examples/wifi-adhoc.cc	Fri Mar 28 12:14:02 2008 -0700
@@ -225,7 +225,6 @@
   gnuplot.GenerateOutput (std::cout);
 
 
-
   gnuplot = Gnuplot ("rate-control.png");
   Config::SetDefault ("ns3::WifiPhy::Standard", String ("holland"));
 
--- a/src/devices/wifi/amrr-wifi-manager.cc	Fri Mar 28 11:26:59 2008 -0700
+++ b/src/devices/wifi/amrr-wifi-manager.cc	Fri Mar 28 12:14:02 2008 -0700
@@ -89,31 +89,31 @@
 {}
 
 void 
-AmrrWifiRemoteStation::ReportRxOk (double rxSnr, WifiMode txMode)
+AmrrWifiRemoteStation::DoReportRxOk (double rxSnr, WifiMode txMode)
 {}
 void 
-AmrrWifiRemoteStation::ReportRtsFailed (void)
+AmrrWifiRemoteStation::DoReportRtsFailed (void)
 {}
 void 
-AmrrWifiRemoteStation::ReportDataFailed (void)
+AmrrWifiRemoteStation::DoReportDataFailed (void)
 {
   m_retry++;
   m_tx_retr++;
 }
 void 
-AmrrWifiRemoteStation::ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr)
+AmrrWifiRemoteStation::DoReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr)
 {}
 void 
-AmrrWifiRemoteStation::ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr)
+AmrrWifiRemoteStation::DoReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr)
 {
   m_retry = 0;
   m_tx_ok++;
 }
 void 
-AmrrWifiRemoteStation::ReportFinalRtsFailed (void)
+AmrrWifiRemoteStation::DoReportFinalRtsFailed (void)
 {}
 void 
-AmrrWifiRemoteStation::ReportFinalDataFailed (void)
+AmrrWifiRemoteStation::DoReportFinalDataFailed (void)
 {
   m_retry = 0;
   m_tx_err++;
--- a/src/devices/wifi/amrr-wifi-manager.h	Fri Mar 28 11:26:59 2008 -0700
+++ b/src/devices/wifi/amrr-wifi-manager.h	Fri Mar 28 12:14:02 2008 -0700
@@ -52,13 +52,14 @@
 
   virtual ~AmrrWifiRemoteStation ();
 
-  virtual void ReportRxOk (double rxSnr, WifiMode txMode);
-  virtual void ReportRtsFailed (void);
-  virtual void ReportDataFailed (void);
-  virtual void ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr);
-  virtual void ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr);
-  virtual void ReportFinalRtsFailed (void);
-  virtual void ReportFinalDataFailed (void);
+protected:
+  virtual void DoReportRxOk (double rxSnr, WifiMode txMode);
+  virtual void DoReportRtsFailed (void);
+  virtual void DoReportDataFailed (void);
+  virtual void DoReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr);
+  virtual void DoReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr);
+  virtual void DoReportFinalRtsFailed (void);
+  virtual void DoReportFinalDataFailed (void);
 
 private:
   virtual Ptr<WifiRemoteStationManager> GetManager (void) const;
--- a/src/devices/wifi/arf-wifi-manager.cc	Fri Mar 28 11:26:59 2008 -0700
+++ b/src/devices/wifi/arf-wifi-manager.cc	Fri Mar 28 12:14:02 2008 -0700
@@ -88,7 +88,7 @@
 
 
 void 
-ArfWifiRemoteStation::ReportRtsFailed (void)
+ArfWifiRemoteStation::DoReportRtsFailed (void)
 {}
 /**
  * It is important to realize that "recovery" mode starts after failure of
@@ -100,7 +100,7 @@
  * transmission, be it an initial transmission or a retransmission.
  */
 void 
-ArfWifiRemoteStation::ReportDataFailed (void)
+ArfWifiRemoteStation::DoReportDataFailed (void)
 {
   m_timer++;
   m_failed++;
@@ -138,13 +138,13 @@
     }
 }
 void 
-ArfWifiRemoteStation::ReportRxOk (double rxSnr, WifiMode txMode)
+ArfWifiRemoteStation::DoReportRxOk (double rxSnr, WifiMode txMode)
 {}
-void ArfWifiRemoteStation::ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr)
+void ArfWifiRemoteStation::DoReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr)
 {
   NS_LOG_DEBUG ("self="<<this<<" rts ok");
 }
-void ArfWifiRemoteStation::ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr)
+void ArfWifiRemoteStation::DoReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr)
 {
   m_timer++;
   m_success++;
@@ -164,10 +164,10 @@
     }
 }
 void 
-ArfWifiRemoteStation::ReportFinalRtsFailed (void)
+ArfWifiRemoteStation::DoReportFinalRtsFailed (void)
 {}
 void 
-ArfWifiRemoteStation::ReportFinalDataFailed (void)
+ArfWifiRemoteStation::DoReportFinalDataFailed (void)
 {}
 
 WifiMode
--- a/src/devices/wifi/arf-wifi-manager.h	Fri Mar 28 11:26:59 2008 -0700
+++ b/src/devices/wifi/arf-wifi-manager.h	Fri Mar 28 12:14:02 2008 -0700
@@ -60,13 +60,14 @@
                         int minSuccessThreshold);
   virtual ~ArfWifiRemoteStation ();
 
-  virtual void ReportRxOk (double rxSnr, WifiMode txMode);
-  virtual void ReportRtsFailed (void);
-  virtual void ReportDataFailed (void);
-  virtual void ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr);
-  virtual void ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr);
-  virtual void ReportFinalRtsFailed (void);
-  virtual void ReportFinalDataFailed (void);
+protected:
+  virtual void DoReportRxOk (double rxSnr, WifiMode txMode);
+  virtual void DoReportRtsFailed (void);
+  virtual void DoReportDataFailed (void);
+  virtual void DoReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr);
+  virtual void DoReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr);
+  virtual void DoReportFinalRtsFailed (void);
+  virtual void DoReportFinalDataFailed (void);
 
 private:
   virtual Ptr<WifiRemoteStationManager> GetManager (void) const;
--- a/src/devices/wifi/constant-rate-wifi-manager.cc	Fri Mar 28 11:26:59 2008 -0700
+++ b/src/devices/wifi/constant-rate-wifi-manager.cc	Fri Mar 28 12:14:02 2008 -0700
@@ -32,25 +32,25 @@
 {}
 
 void 
-ConstantRateWifiRemoteStation::ReportRxOk (double rxSnr, WifiMode txMode)
+ConstantRateWifiRemoteStation::DoReportRxOk (double rxSnr, WifiMode txMode)
 {}
 void 
-ConstantRateWifiRemoteStation::ReportRtsFailed (void)
+ConstantRateWifiRemoteStation::DoReportRtsFailed (void)
 {}
 void 
-ConstantRateWifiRemoteStation::ReportDataFailed (void)
+ConstantRateWifiRemoteStation::DoReportDataFailed (void)
 {}
 void 
-ConstantRateWifiRemoteStation::ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr)
+ConstantRateWifiRemoteStation::DoReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr)
 {}
 void 
-ConstantRateWifiRemoteStation::ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr)
+ConstantRateWifiRemoteStation::DoReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr)
 {}
 void 
-ConstantRateWifiRemoteStation::ReportFinalRtsFailed (void)
+ConstantRateWifiRemoteStation::DoReportFinalRtsFailed (void)
 {}
 void 
-ConstantRateWifiRemoteStation::ReportFinalDataFailed (void)
+ConstantRateWifiRemoteStation::DoReportFinalDataFailed (void)
 {}
 
 WifiMode 
--- a/src/devices/wifi/constant-rate-wifi-manager.h	Fri Mar 28 11:26:59 2008 -0700
+++ b/src/devices/wifi/constant-rate-wifi-manager.h	Fri Mar 28 12:14:02 2008 -0700
@@ -55,13 +55,14 @@
   ConstantRateWifiRemoteStation (Ptr<ConstantRateWifiManager> stations);
   virtual ~ConstantRateWifiRemoteStation ();
 
-  virtual void ReportRxOk (double rxSnr, WifiMode txMode);
-  virtual void ReportRtsFailed (void);
-  virtual void ReportDataFailed (void);
-  virtual void ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr);
-  virtual void ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr);
-  virtual void ReportFinalRtsFailed (void);
-  virtual void ReportFinalDataFailed (void);
+protected:
+  virtual void DoReportRxOk (double rxSnr, WifiMode txMode);
+  virtual void DoReportRtsFailed (void);
+  virtual void DoReportDataFailed (void);
+  virtual void DoReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr);
+  virtual void DoReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr);
+  virtual void DoReportFinalRtsFailed (void);
+  virtual void DoReportFinalDataFailed (void);
 
 private:
   virtual Ptr<WifiRemoteStationManager> GetManager (void) const;
--- a/src/devices/wifi/dca-txop.cc	Fri Mar 28 11:26:59 2008 -0700
+++ b/src/devices/wifi/dca-txop.cc	Fri Mar 28 12:14:02 2008 -0700
@@ -24,7 +24,6 @@
 #include "ns3/simulator.h"
 #include "ns3/node.h"
 #include "ns3/uinteger.h"
-#include "ns3/trace-source-accessor.h"
 
 #include "dca-txop.h"
 #include "dcf-manager.h"
@@ -115,20 +114,13 @@
                    MakeUintegerAccessor (&DcaTxop::SetAifsn,
                                          &DcaTxop::GetAifsn),
                    MakeUintegerChecker<uint32_t> ())
-    .AddTraceSource ("Ssrc", "XXX",
-                     MakeTraceSourceAccessor (&DcaTxop::m_ssrc))
-    .AddTraceSource ("Slrc", "XXX",
-                     MakeTraceSourceAccessor (&DcaTxop::m_slrc))
     ;
   return tid;
 }
 
 DcaTxop::DcaTxop ()
   : m_manager (0),
-    m_currentPacket (0),
-    m_ssrc (0),
-    m_slrc (0)
-
+    m_currentPacket (0)
 {
   m_transmissionListener = new DcaTxop::TransmissionListener (this);
   m_dcf = new DcaTxop::Dcf (this);
@@ -279,6 +271,19 @@
 }
 
 bool
+DcaTxop::NeedRtsRetransmission (void)
+{
+  WifiRemoteStation *station = GetStation (m_currentHdr.GetAddr1 ());
+  return station->NeedRtsRetransmission (m_currentPacket);
+}
+
+bool
+DcaTxop::NeedDataRetransmission (void)
+{
+  WifiRemoteStation *station = GetStation (m_currentHdr.GetAddr1 ());
+  return station->NeedDataRetransmission (m_currentPacket);
+}
+bool
 DcaTxop::NeedFragmentation (void)
 {
   WifiRemoteStation *station = GetStation (m_currentHdr.GetAddr1 ());
@@ -337,19 +342,6 @@
   return fragment;
 }
 
-uint32_t
-DcaTxop::GetMaxSsrc (void) const
-{
-  WifiRemoteStation *station = GetStation (m_currentHdr.GetAddr1 ());
-  return station->GetMaxSsrc (m_currentPacket);
-}
-uint32_t
-DcaTxop::GetMaxSlrc (void) const
-{
-  WifiRemoteStation *station = GetStation (m_currentHdr.GetAddr1 ());
-  return station->GetMaxSlrc (m_currentPacket);
-}
-
 bool 
 DcaTxop::NeedsAccess (void) const
 {
@@ -372,8 +364,6 @@
       m_currentHdr.SetFragmentNumber (0);
       m_currentHdr.SetNoMoreFragments ();
       m_currentHdr.SetNoRetry ();
-      m_ssrc = 0;
-      m_slrc = 0;
       m_fragmentNumber = 0;
       MY_DEBUG ("dequeued size="<<m_currentPacket->GetSize ()<<
                     ", to="<<m_currentHdr.GetAddr1 ()<<
@@ -453,15 +443,14 @@
 DcaTxop::GotCts (double snr, WifiMode txMode)
 {
   MY_DEBUG ("got cts");
-  m_ssrc = 0;
 }
 void 
 DcaTxop::MissedCts (void)
 {
   MY_DEBUG ("missed cts");
-  m_ssrc++;
-  if (m_ssrc > GetMaxSsrc ()) 
+  if (!NeedRtsRetransmission ())
     {
+      MY_DEBUG ("Cts Fail");
       WifiRemoteStation *station = GetStation (m_currentHdr.GetAddr1 ());
       station->ReportFinalRtsFailed ();
       // to reset the dcf.
@@ -478,7 +467,6 @@
 void 
 DcaTxop::GotAck (double snr, WifiMode txMode)
 {
-  m_slrc = 0;
   if (!NeedFragmentation () ||
       IsLastFragment ()) 
     {
@@ -505,9 +493,9 @@
 DcaTxop::MissedAck (void)
 {
   MY_DEBUG ("missed ack");
-  m_slrc++;
-  if (m_slrc > GetMaxSlrc ()) 
+  if (!NeedDataRetransmission ()) 
     {
+      MY_DEBUG ("Ack Fail");
       WifiRemoteStation *station = GetStation (m_currentHdr.GetAddr1 ());
       station->ReportFinalDataFailed ();
       // to reset the dcf.    
@@ -516,6 +504,7 @@
     } 
   else 
     {
+      MY_DEBUG ("Retransmit");
       m_currentHdr.SetRetry ();
       if (!m_txFailedCallback.IsNull ()) 
         {
--- a/src/devices/wifi/dca-txop.h	Fri Mar 28 11:26:59 2008 -0700
+++ b/src/devices/wifi/dca-txop.h	Fri Mar 28 12:14:02 2008 -0700
@@ -26,7 +26,6 @@
 #include "ns3/packet.h"
 #include "ns3/nstime.h"
 #include "ns3/object.h"
-#include "ns3/traced-value.h"
 #include "wifi-mac-header.h"
 #include "wifi-mode.h"
 #include "wifi-remote-station-manager.h"
@@ -114,6 +113,7 @@
   class Dcf;
   friend class Dcf;
   friend class TransmissionListener;
+  friend class WifiRemoteStation;
 
   // Inherited from ns3::Object
   Ptr<MacLow> Low (void);
@@ -134,13 +134,13 @@
   void RestartAccessIfNeeded (void);
   void StartAccessIfNeeded (void);
   bool NeedRts (void);
+  bool NeedRtsRetransmission (void);
+  bool NeedDataRetransmission (void);
   bool NeedFragmentation (void);
   uint32_t GetNFragments (void);
   uint32_t GetNextFragmentSize (void);
   uint32_t GetFragmentSize (void);
   WifiRemoteStation *GetStation (Mac48Address to) const;
-  uint32_t GetMaxSsrc (void) const;
-  uint32_t GetMaxSlrc (void) const;
   bool IsLastFragment (void);
   void NextFragment (void);
   Ptr<Packet> GetFragmentPacket (WifiMacHeader *hdr);
@@ -161,8 +161,6 @@
   bool m_accessOngoing;
   Ptr<const Packet> m_currentPacket;
   WifiMacHeader m_currentHdr;
-  TracedValue<uint32_t> m_ssrc;
-  TracedValue<uint32_t> m_slrc;
   uint8_t m_fragmentNumber;
 };
 
--- a/src/devices/wifi/ideal-wifi-manager.cc	Fri Mar 28 11:26:59 2008 -0700
+++ b/src/devices/wifi/ideal-wifi-manager.cc	Fri Mar 28 12:14:02 2008 -0700
@@ -104,31 +104,31 @@
 IdealWifiRemoteStation::~IdealWifiRemoteStation ()
 {}
 void 
-IdealWifiRemoteStation::ReportRxOk (double rxSnr, WifiMode txMode)
+IdealWifiRemoteStation::DoReportRxOk (double rxSnr, WifiMode txMode)
 {}
 void 
-IdealWifiRemoteStation::ReportRtsFailed (void)
+IdealWifiRemoteStation::DoReportRtsFailed (void)
 {}
 void 
-IdealWifiRemoteStation::ReportDataFailed (void)
+IdealWifiRemoteStation::DoReportDataFailed (void)
 {}
 void 
-IdealWifiRemoteStation::ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr)
+IdealWifiRemoteStation::DoReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr)
 {
   TRACE ("got cts for rts snr="<<rtsSnr);
   m_lastSnr = rtsSnr;
 }
 void 
-IdealWifiRemoteStation::ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr)
+IdealWifiRemoteStation::DoReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr)
 {
   TRACE ("got cts for rts snr="<<dataSnr);
   m_lastSnr = dataSnr;
 }
 void 
-IdealWifiRemoteStation::ReportFinalRtsFailed (void)
+IdealWifiRemoteStation::DoReportFinalRtsFailed (void)
 {}
 void 
-IdealWifiRemoteStation::ReportFinalDataFailed (void)
+IdealWifiRemoteStation::DoReportFinalDataFailed (void)
 {}
 
 WifiMode
--- a/src/devices/wifi/ideal-wifi-manager.h	Fri Mar 28 11:26:59 2008 -0700
+++ b/src/devices/wifi/ideal-wifi-manager.h	Fri Mar 28 12:14:02 2008 -0700
@@ -73,13 +73,14 @@
 
   virtual ~IdealWifiRemoteStation ();
 
-  virtual void ReportRxOk (double rxSnr, WifiMode txMode);
-  virtual void ReportRtsFailed (void);
-  virtual void ReportDataFailed (void);
-  virtual void ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr);
-  virtual void ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr);
-  virtual void ReportFinalRtsFailed (void);
-  virtual void ReportFinalDataFailed (void);
+protected:
+  virtual void DoReportRxOk (double rxSnr, WifiMode txMode);
+  virtual void DoReportRtsFailed (void);
+  virtual void DoReportDataFailed (void);
+  virtual void DoReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr);
+  virtual void DoReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr);
+  virtual void DoReportFinalRtsFailed (void);
+  virtual void DoReportFinalDataFailed (void);
 
 private:
   virtual Ptr<WifiRemoteStationManager> GetManager (void) const;
--- a/src/devices/wifi/onoe-wifi-manager.cc	Fri Mar 28 11:26:59 2008 -0700
+++ b/src/devices/wifi/onoe-wifi-manager.cc	Fri Mar 28 12:14:02 2008 -0700
@@ -75,35 +75,35 @@
 {}
 
 void 
-OnoeWifiRemoteStation::ReportRxOk (double rxSnr, WifiMode txMode)
+OnoeWifiRemoteStation::DoReportRxOk (double rxSnr, WifiMode txMode)
 {}
 void 
-OnoeWifiRemoteStation::ReportRtsFailed (void)
+OnoeWifiRemoteStation::DoReportRtsFailed (void)
 {
   m_shortRetry++;
 }
 void 
-OnoeWifiRemoteStation::ReportDataFailed (void)
+OnoeWifiRemoteStation::DoReportDataFailed (void)
 {
   m_longRetry++;
 }
 void 
-OnoeWifiRemoteStation::ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr)
+OnoeWifiRemoteStation::DoReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr)
 {}
 void 
-OnoeWifiRemoteStation::ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr)
+OnoeWifiRemoteStation::DoReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr)
 {
   UpdateRetry ();
   m_tx_ok++;
 }
 void 
-OnoeWifiRemoteStation::ReportFinalRtsFailed (void)
+OnoeWifiRemoteStation::DoReportFinalRtsFailed (void)
 {
   UpdateRetry ();
   m_tx_err++;
 }
 void 
-OnoeWifiRemoteStation::ReportFinalDataFailed (void)
+OnoeWifiRemoteStation::DoReportFinalDataFailed (void)
 {
   UpdateRetry ();
   m_tx_err++;
--- a/src/devices/wifi/onoe-wifi-manager.h	Fri Mar 28 11:26:59 2008 -0700
+++ b/src/devices/wifi/onoe-wifi-manager.h	Fri Mar 28 12:14:02 2008 -0700
@@ -57,13 +57,14 @@
 
   virtual ~OnoeWifiRemoteStation ();
 
-  virtual void ReportRxOk (double rxSnr, WifiMode txMode);
-  virtual void ReportRtsFailed (void);
-  virtual void ReportDataFailed (void);
-  virtual void ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr);
-  virtual void ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr);
-  virtual void ReportFinalRtsFailed (void);
-  virtual void ReportFinalDataFailed (void);
+protected:
+  virtual void DoReportRxOk (double rxSnr, WifiMode txMode);
+  virtual void DoReportRtsFailed (void);
+  virtual void DoReportDataFailed (void);
+  virtual void DoReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr);
+  virtual void DoReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr);
+  virtual void DoReportFinalRtsFailed (void);
+  virtual void DoReportFinalDataFailed (void);
 
 private:
   virtual Ptr<WifiRemoteStationManager> GetManager (void) const;
--- a/src/devices/wifi/rraa-wifi-manager.cc	Fri Mar 28 11:26:59 2008 -0700
+++ b/src/devices/wifi/rraa-wifi-manager.cc	Fri Mar 28 12:14:02 2008 -0700
@@ -81,11 +81,11 @@
 
 
 void 
-RraaWifiRemoteStation::ReportRtsFailed (void)
+RraaWifiRemoteStation::DoReportRtsFailed (void)
 {}
 
 void 
-RraaWifiRemoteStation::ReportDataFailed (void)
+RraaWifiRemoteStation::DoReportDataFailed (void)
 {
   m_lastFrameFail = true;
   CheckTimeout ();
@@ -94,15 +94,15 @@
   RunBasicAlgorithm ();
 }
 void 
-RraaWifiRemoteStation::ReportRxOk (double rxSnr, WifiMode txMode)
+RraaWifiRemoteStation::DoReportRxOk (double rxSnr, WifiMode txMode)
 {}
 void 
-RraaWifiRemoteStation::ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr)
+RraaWifiRemoteStation::DoReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr)
 {
   NS_LOG_DEBUG ("self="<<this<<" rts ok");
 }
 void 
-RraaWifiRemoteStation::ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr)
+RraaWifiRemoteStation::DoReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr)
 {
   m_lastFrameFail = false;
   CheckTimeout ();
@@ -110,10 +110,10 @@
   RunBasicAlgorithm ();
 }
 void 
-RraaWifiRemoteStation::ReportFinalRtsFailed (void)
+RraaWifiRemoteStation::DoReportFinalRtsFailed (void)
 {}
 void 
-RraaWifiRemoteStation::ReportFinalDataFailed (void)
+RraaWifiRemoteStation::DoReportFinalDataFailed (void)
 {}
 
 WifiMode
--- a/src/devices/wifi/rraa-wifi-manager.h	Fri Mar 28 11:26:59 2008 -0700
+++ b/src/devices/wifi/rraa-wifi-manager.h	Fri Mar 28 12:14:02 2008 -0700
@@ -87,14 +87,15 @@
   RraaWifiRemoteStation (Ptr<RraaWifiManager> stations);
   virtual ~RraaWifiRemoteStation ();
 
-  virtual void ReportRxOk (double rxSnr, WifiMode txMode);
-  virtual void ReportRtsFailed (void);
-  virtual void ReportDataFailed (void);
-  virtual void ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr);
-  virtual void ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr);
-  virtual void ReportFinalRtsFailed (void);
-  virtual void ReportFinalDataFailed (void);
   virtual bool NeedRts (Ptr<const Packet> packet);
+protected:
+  virtual void DoReportRxOk (double rxSnr, WifiMode txMode);
+  virtual void DoReportRtsFailed (void);
+  virtual void DoReportDataFailed (void);
+  virtual void DoReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr);
+  virtual void DoReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr);
+  virtual void DoReportFinalRtsFailed (void);
+  virtual void DoReportFinalDataFailed (void);
 
 private:
   virtual Ptr<WifiRemoteStationManager> GetManager (void) const;
--- a/src/devices/wifi/wifi-remote-station-manager.cc	Fri Mar 28 11:26:59 2008 -0700
+++ b/src/devices/wifi/wifi-remote-station-manager.cc	Fri Mar 28 12:14:02 2008 -0700
@@ -25,6 +25,7 @@
 #include "ns3/boolean.h"
 #include "ns3/uinteger.h"
 #include "ns3/wifi-phy.h"
+#include "ns3/trace-source-accessor.h"
 
 NS_LOG_COMPONENT_DEFINE ("WifiRemoteStationManager");
 
@@ -41,14 +42,14 @@
 {
 public:
   NonUnicastWifiRemoteStation (Ptr<WifiRemoteStationManager> stations);
-  virtual void ReportRxOk (double rxSnr, WifiMode txMode);
-  virtual void ReportRtsFailed (void);
-  virtual void ReportDataFailed (void);
-  virtual void ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr);
-  virtual void ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr);
-  virtual void ReportFinalRtsFailed (void);
-  virtual void ReportFinalDataFailed (void);
-
+protected:
+  virtual void DoReportRxOk (double rxSnr, WifiMode txMode);
+  virtual void DoReportRtsFailed (void);
+  virtual void DoReportDataFailed (void);
+  virtual void DoReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr);
+  virtual void DoReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr);
+  virtual void DoReportFinalRtsFailed (void);
+  virtual void DoReportFinalDataFailed (void);
 private:
   virtual Ptr<WifiRemoteStationManager> GetManager (void) const;
   virtual WifiMode DoGetDataMode (uint32_t size);
@@ -62,35 +63,35 @@
   RecordDisassociated ();
 }
 void 
-NonUnicastWifiRemoteStation::ReportRxOk (double rxSnr, WifiMode txMode)
+NonUnicastWifiRemoteStation::DoReportRxOk (double rxSnr, WifiMode txMode)
 {
   NS_ASSERT (false);
 }
 void 
-NonUnicastWifiRemoteStation::ReportRtsFailed (void)
+NonUnicastWifiRemoteStation::DoReportRtsFailed (void)
 {
   NS_ASSERT (false);
 }
 void 
-NonUnicastWifiRemoteStation::ReportDataFailed (void)
+NonUnicastWifiRemoteStation::DoReportDataFailed (void)
 {
   NS_ASSERT (false);
 }
 void 
-NonUnicastWifiRemoteStation::ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr)
+NonUnicastWifiRemoteStation::DoReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr)
 {
   NS_ASSERT (false);
 }
 void 
-NonUnicastWifiRemoteStation::ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr)
+NonUnicastWifiRemoteStation::DoReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr)
 {
   NS_ASSERT (false);
 }
 void 
-NonUnicastWifiRemoteStation::ReportFinalRtsFailed (void)
+NonUnicastWifiRemoteStation::DoReportFinalRtsFailed (void)
 {}
 void 
-NonUnicastWifiRemoteStation::ReportFinalDataFailed (void)
+NonUnicastWifiRemoteStation::DoReportFinalDataFailed (void)
 {}
 
 WifiMode 
@@ -374,8 +375,23 @@
 
 namespace ns3 {
 
+TypeId 
+WifiRemoteStation::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::WifiRemoteStation")
+    .SetParent<Object> ()
+    .AddTraceSource ("Ssrc", "XXX",
+                     MakeTraceSourceAccessor (&WifiRemoteStation::m_ssrc))
+    .AddTraceSource ("Slrc", "XXX",
+                     MakeTraceSourceAccessor (&WifiRemoteStation::m_slrc))
+    ;
+  return tid;
+}
+
 WifiRemoteStation::WifiRemoteStation ()
-  : m_state (BRAND_NEW)
+  : m_state (BRAND_NEW),
+    m_ssrc (0),
+    m_slrc (0)
 {}
 WifiRemoteStation::~WifiRemoteStation ()
 {}
@@ -560,16 +576,16 @@
       return false;
     }
 }
-uint32_t 
-WifiRemoteStation::GetMaxSsrc (Ptr<const Packet> packet)
+bool
+WifiRemoteStation::NeedRtsRetransmission (Ptr<const Packet> packet)
 {
-  return GetManager ()->GetMaxSsrc ();
+  return (m_ssrc < GetManager ()->GetMaxSsrc ());
 }
 
-uint32_t 
-WifiRemoteStation::GetMaxSlrc (Ptr<const Packet> packet)
+bool
+WifiRemoteStation::NeedDataRetransmission (Ptr<const Packet> packet)
 {
-  return GetManager ()->GetMaxSlrc ();
+  return (m_slrc < GetManager ()->GetMaxSlrc ());
 }
 
 bool
@@ -623,5 +639,52 @@
     }
 }
 
+void 
+WifiRemoteStation::ReportRtsFailed (void)
+{
+  m_ssrc++;
+  DoReportRtsFailed ();
+}
+
+void 
+WifiRemoteStation::ReportDataFailed (void)
+{
+  m_slrc++;
+  DoReportDataFailed ();
+}
+
+void 
+WifiRemoteStation::ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr)
+{
+  m_ssrc = 0;
+  DoReportRtsOk (ctsSnr, ctsMode, rtsSnr);
+}
+
+void 
+WifiRemoteStation::ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr)
+{
+  m_slrc = 0;
+  DoReportDataOk (ackSnr, ackMode, dataSnr);
+}
+
+void 
+WifiRemoteStation::ReportFinalRtsFailed (void)
+{
+  m_ssrc = 0;
+  DoReportFinalRtsFailed ();
+}
+
+void 
+WifiRemoteStation::ReportFinalDataFailed (void)
+{
+  m_slrc = 0;
+  DoReportFinalDataFailed ();
+}
+
+void 
+WifiRemoteStation::ReportRxOk (double rxSnr, WifiMode txMode)
+{
+  DoReportRxOk (rxSnr, txMode);
+}
 } // namespace ns3
 
--- a/src/devices/wifi/wifi-remote-station-manager.h	Fri Mar 28 11:26:59 2008 -0700
+++ b/src/devices/wifi/wifi-remote-station-manager.h	Fri Mar 28 12:14:02 2008 -0700
@@ -25,6 +25,7 @@
 #include "ns3/mac48-address.h"
 #include "ns3/packet.h"
 #include "ns3/object.h"
+#include "ns3/traced-value.h"
 #include "wifi-mode.h"
 
 namespace ns3 {
@@ -85,6 +86,7 @@
   WifiRemoteStation *Lookup (Mac48Address address);
   WifiRemoteStation *LookupNonUnicast (void);
 protected:
+  friend class WifiRemoteStation;
   virtual void DoDispose (void);
 private:
   typedef std::vector <std::pair<Mac48Address, WifiRemoteStation *> > Stations;
@@ -106,6 +108,9 @@
 
 class WifiRemoteStation {
 public:
+  
+  static TypeId GetTypeId (void);
+  
   WifiRemoteStation ();
   virtual ~WifiRemoteStation ();
 
@@ -130,20 +135,21 @@
   void PrepareForQueue (Ptr<const Packet> packet, uint32_t fullPacketSize);
   WifiMode GetDataMode (Ptr<const Packet> packet, uint32_t fullPacketSize);
   WifiMode GetRtsMode (Ptr<const Packet> packet);
+  // transmission-related methods
+  void ReportRtsFailed (void);
+  void ReportDataFailed (void);
+  void ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr);
+  void ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr);
+  void ReportFinalRtsFailed (void);
+  void ReportFinalDataFailed (void);
 
   // reception-related method
-  virtual void ReportRxOk (double rxSnr, WifiMode txMode) = 0;
+  void ReportRxOk (double rxSnr, WifiMode txMode);
 
-  // transmission-related methods
-  virtual void ReportRtsFailed (void) = 0;
-  virtual void ReportDataFailed (void) = 0;
-  virtual void ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr) = 0;
-  virtual void ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr) = 0;
-  virtual void ReportFinalRtsFailed (void) = 0;
-  virtual void ReportFinalDataFailed (void) = 0;
   virtual bool NeedRts (Ptr<const Packet> packet);
-  virtual uint32_t GetMaxSsrc (Ptr<const Packet> packet);
-  virtual uint32_t GetMaxSlrc (Ptr<const Packet> packet);
+  virtual bool NeedRtsRetransmission (Ptr<const Packet> packet);
+  virtual bool NeedDataRetransmission (Ptr<const Packet> packet);
+
   virtual bool NeedFragmentation (Ptr<const Packet> packet);
   virtual uint32_t GetNFragments (Ptr<const Packet> packet);
   virtual uint32_t GetFragmentSize (Ptr<const Packet> packet, uint32_t fragmentNumber);
@@ -158,6 +164,13 @@
   virtual WifiMode DoGetDataMode (uint32_t size) = 0;
   virtual WifiMode DoGetRtsMode (void) = 0;
 protected:
+  virtual void DoReportRtsFailed (void) = 0;
+  virtual void DoReportDataFailed (void) = 0;
+  virtual void DoReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr) = 0;
+  virtual void DoReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr) = 0;
+  virtual void DoReportFinalRtsFailed (void) = 0;
+  virtual void DoReportFinalDataFailed (void) = 0;
+  virtual void DoReportRxOk (double rxSnr, WifiMode txMode) = 0;
   uint32_t GetNSupportedModes (void) const;
   WifiMode GetSupportedMode (uint32_t i) const;
 private:
@@ -170,6 +183,8 @@
     GOT_ASSOC_TX_OK
   } m_state;
   SupportedModes m_modes;
+  TracedValue<uint32_t> m_ssrc;
+  TracedValue<uint32_t> m_slrc;
 };
 
 } // namespace ns3