convert WifiMacParameters to Attributes.
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 28 Feb 2008 07:17:53 +0100
changeset 2510 ffd115ad2589
parent 2509 a72ee2fc1f30
child 2511 f80ce8fb9999
convert WifiMacParameters to Attributes.
src/devices/wifi/wifi-mac-parameters.cc
src/devices/wifi/wifi-mac-parameters.h
src/devices/wifi/wifi-net-device.cc
--- a/src/devices/wifi/wifi-mac-parameters.cc	Thu Feb 28 06:18:39 2008 +0100
+++ b/src/devices/wifi/wifi-mac-parameters.cc	Thu Feb 28 07:17:53 2008 +0100
@@ -19,57 +19,102 @@
  */
 
 #include "ns3/assert.h"
+#include "ns3/uinteger.h"
 #include "wifi-mac-parameters.h"
-#include "wifi-default-parameters.h"
 
 namespace ns3 {
 
-WifiMacParameters::WifiMacParameters ()
+Time
+WifiMacParameters::GetDefaultMaxPropagationDelay (void)
 {
-  m_rtsCtsThreshold = WifiDefaultParameters::GetRtsCtsThreshold ();
-  m_fragmentationThreshold = WifiDefaultParameters::GetFragmentationThreshold ();
-  m_maxSsrc = WifiDefaultParameters::GetMaxSsrc ();
-  m_maxSlrc = WifiDefaultParameters::GetMaxSlrc ();
-
-  // ensure something not too stupid is set by default.
-  NS_ASSERT (WifiDefaultParameters::GetPhyStandard () == WIFI_PHY_STANDARD_80211a ||
-             WifiDefaultParameters::GetPhyStandard () == WIFI_PHY_STANDARD_holland);
-  uint32_t ctsAckSize = (2 + 2 + 6) * 8; // bits
-  double dataRate = (6e6 / 2); // mb/s
-  Time delay = Seconds (ctsAckSize / dataRate);
-
-  Initialize (delay, delay);
+  // 1000m 
+  return Seconds (1000.0 / 300000000.0);
+}
+Time
+WifiMacParameters::GetDefaultSlot (void)
+{
+  // 802.11-a specific
+  return MicroSeconds (9);
 }
-void 
-WifiMacParameters::Initialize (Time ctsDelay, Time ackDelay)
+Time
+WifiMacParameters::GetDefaultSifs (void)
 {
-  NS_ASSERT (WifiDefaultParameters::GetPhyStandard () == WIFI_PHY_STANDARD_80211a ||
-             WifiDefaultParameters::GetPhyStandard () == WIFI_PHY_STANDARD_holland);
-
-  // these values are really 802.11a specific
-  m_sifs = MicroSeconds (16);
-  m_slot = MicroSeconds (9);
-
-
-  /* see section 9.2.10 ieee 802.11-1999 */
-  m_pifs = m_sifs + m_slot;
-  // 1000m 
-  m_maxPropagationDelay = Seconds (1000.0 / 300000000.0);
+  // 802.11-a specific
+  return MicroSeconds (16);
+}
+Time
+WifiMacParameters::GetDefaultCtsAckDelay (void)
+{
+  // 802.11-a specific: 6mb/s
+  return MicroSeconds (44);
+}
+Time
+WifiMacParameters::GetDefaultCtsAckTimeout (void)
+{
   /* Cts_Timeout and Ack_Timeout are specified in the Annex C 
      (Formal description of MAC operation, see details on the 
      Trsp timer setting at page 346)
   */
-  m_ctsTimeout = m_sifs;
-  m_ctsTimeout += ctsDelay;
-  m_ctsTimeout += m_maxPropagationDelay * Scalar (2);
-  m_ctsTimeout += m_slot;
+  Time ctsTimeout = GetDefaultSifs ();
+  ctsTimeout += GetDefaultCtsAckDelay ();
+  ctsTimeout += GetDefaultMaxPropagationDelay () * Scalar (2);
+  ctsTimeout += GetDefaultSlot ();
+  return ctsTimeout;
+}
 
-  m_ackTimeout = m_sifs;
-  m_ackTimeout += ackDelay;
-  m_ackTimeout += m_maxPropagationDelay * Scalar (2);
-  m_ackTimeout += m_slot;
+TypeId 
+WifiMacParameters::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("WifiMacParameters")
+    .SetParent<Object> ()
+    .AddConstructor<WifiMacParameters> ()
+    .AddAttribute ("CtsTimeout", "XXX",
+                   GetDefaultCtsAckTimeout (),
+                   MakeTimeAccessor (&WifiMacParameters::m_ctsTimeout),
+                   MakeTimeChecker ())
+    .AddAttribute ("AckTimeout", "XXX",
+                   GetDefaultCtsAckTimeout (),
+                   MakeTimeAccessor (&WifiMacParameters::m_ackTimeout),
+                   MakeTimeChecker ())
+    .AddAttribute ("Sifs", "XXX",
+                   GetDefaultSifs (),
+                   MakeTimeAccessor (&WifiMacParameters::m_sifs),
+                   MakeTimeChecker ())
+    .AddAttribute ("Slot", "XXX",
+                   GetDefaultSlot (),
+                   MakeTimeAccessor (&WifiMacParameters::m_slot),
+                   MakeTimeChecker ())
+    .AddAttribute ("Pifs", "XXX",
+                   GetDefaultSifs () + GetDefaultSlot (),
+                   MakeTimeAccessor (&WifiMacParameters::m_pifs),
+                   MakeTimeChecker ())
+    .AddAttribute ("MaxSsrc", "XXX",
+                   Uinteger (7),
+                   MakeUintegerAccessor (&WifiMacParameters::m_maxSsrc),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("MaxSlrc", "XXX",
+                   Uinteger (7),
+                   MakeUintegerAccessor (&WifiMacParameters::m_maxSlrc),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("RtsCtsThreshold", "XXX",
+                   Uinteger (1500),
+                   MakeUintegerAccessor (&WifiMacParameters::m_rtsCtsThreshold),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("FragmentationThreshold", "XXX",
+                   Uinteger (1500),
+                   MakeUintegerAccessor (&WifiMacParameters::m_fragmentationThreshold),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("MaxPropagationDelay", "XXX",
+                   GetDefaultMaxPropagationDelay (),
+                   MakeTimeAccessor (&WifiMacParameters::m_maxPropagationDelay),
+                   MakeTimeChecker ())
+    ;
+  return tid;
 }
 
+WifiMacParameters::WifiMacParameters ()
+{}
+
 void 
 WifiMacParameters::SetSlotTime (Time slotTime)
 {
--- a/src/devices/wifi/wifi-mac-parameters.h	Thu Feb 28 06:18:39 2008 +0100
+++ b/src/devices/wifi/wifi-mac-parameters.h	Thu Feb 28 07:17:53 2008 +0100
@@ -22,15 +22,16 @@
 
 #include <stdint.h>
 #include "ns3/nstime.h"
+#include "ns3/object.h"
 
 namespace ns3 {
 
-class WifiMacParameters 
+class WifiMacParameters : public Object
 {
 public:
+  static TypeId GetTypeId (void);
   WifiMacParameters ();
 
-  void Initialize (Time ctsDelay, Time ackDelay);
   void SetSlotTime (Time slotTime);
 
   // XXX AP-specific
@@ -53,7 +54,11 @@
   double GetCapLimit (void) const;
   double GetMinEdcaTrafficProportion (void) const;
 private:
-  void Initialize80211a (void);
+  static Time GetDefaultMaxPropagationDelay (void);
+  static Time GetDefaultSlot (void);
+  static Time GetDefaultSifs (void);
+  static Time GetDefaultCtsAckDelay (void);
+  static Time GetDefaultCtsAckTimeout (void);
   Time m_ctsTimeout;
   Time m_ackTimeout;
   Time m_sifs;
--- a/src/devices/wifi/wifi-net-device.cc	Thu Feb 28 06:18:39 2008 +0100
+++ b/src/devices/wifi/wifi-net-device.cc	Thu Feb 28 07:17:53 2008 +0100
@@ -227,12 +227,6 @@
 
   // WifiMacParameters
   WifiMacParameters *parameters = new WifiMacParameters ();
-  WifiMacHeader hdr;
-  hdr.SetType (WIFI_MAC_CTL_CTS);
-  Time ctsDelay = m_phy->CalculateTxDuration (hdr.GetSize () + 4, m_phy->GetMode (0), WIFI_PREAMBLE_LONG);
-  hdr.SetType (WIFI_MAC_CTL_ACK);
-  Time ackDelay = m_phy->CalculateTxDuration (hdr.GetSize () + 4, m_phy->GetMode (0), WIFI_PREAMBLE_LONG);
-  parameters->Initialize (ctsDelay, ackDelay);
   m_parameters = parameters;
   m_stations->SetParameters (m_parameters);