--- 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