From de39c3b77a4d70a16148e2175581dfb467321d93 Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Thu, 28 Feb 2008 07:17:53 +0100 Subject: [PATCH] convert WifiMacParameters to Attributes. --- src/devices/wifi/wifi-mac-parameters.cc | 123 ++++++++++++++++-------- src/devices/wifi/wifi-mac-parameters.h | 11 ++- src/devices/wifi/wifi-net-device.cc | 6 -- 3 files changed, 92 insertions(+), 48 deletions(-) diff --git a/src/devices/wifi/wifi-mac-parameters.cc b/src/devices/wifi/wifi-mac-parameters.cc index 7848f68fb..b7006a046 100644 --- a/src/devices/wifi/wifi-mac-parameters.cc +++ b/src/devices/wifi/wifi-mac-parameters.cc @@ -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); -} -void -WifiMacParameters::Initialize (Time ctsDelay, Time ackDelay) -{ - 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); + return Seconds (1000.0 / 300000000.0); +} +Time +WifiMacParameters::GetDefaultSlot (void) +{ + // 802.11-a specific + return MicroSeconds (9); +} +Time +WifiMacParameters::GetDefaultSifs (void) +{ + // 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; - - m_ackTimeout = m_sifs; - m_ackTimeout += ackDelay; - m_ackTimeout += m_maxPropagationDelay * Scalar (2); - m_ackTimeout += m_slot; + Time ctsTimeout = GetDefaultSifs (); + ctsTimeout += GetDefaultCtsAckDelay (); + ctsTimeout += GetDefaultMaxPropagationDelay () * Scalar (2); + ctsTimeout += GetDefaultSlot (); + return ctsTimeout; } +TypeId +WifiMacParameters::GetTypeId (void) +{ + static TypeId tid = TypeId ("WifiMacParameters") + .SetParent () + .AddConstructor () + .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 ()) + .AddAttribute ("MaxSlrc", "XXX", + Uinteger (7), + MakeUintegerAccessor (&WifiMacParameters::m_maxSlrc), + MakeUintegerChecker ()) + .AddAttribute ("RtsCtsThreshold", "XXX", + Uinteger (1500), + MakeUintegerAccessor (&WifiMacParameters::m_rtsCtsThreshold), + MakeUintegerChecker ()) + .AddAttribute ("FragmentationThreshold", "XXX", + Uinteger (1500), + MakeUintegerAccessor (&WifiMacParameters::m_fragmentationThreshold), + MakeUintegerChecker ()) + .AddAttribute ("MaxPropagationDelay", "XXX", + GetDefaultMaxPropagationDelay (), + MakeTimeAccessor (&WifiMacParameters::m_maxPropagationDelay), + MakeTimeChecker ()) + ; + return tid; +} + +WifiMacParameters::WifiMacParameters () +{} + void WifiMacParameters::SetSlotTime (Time slotTime) { diff --git a/src/devices/wifi/wifi-mac-parameters.h b/src/devices/wifi/wifi-mac-parameters.h index 68a8df2c0..e1a1f752b 100644 --- a/src/devices/wifi/wifi-mac-parameters.h +++ b/src/devices/wifi/wifi-mac-parameters.h @@ -22,15 +22,16 @@ #include #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 @@ public: 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; diff --git a/src/devices/wifi/wifi-net-device.cc b/src/devices/wifi/wifi-net-device.cc index ad8f3878a..72ed226a1 100644 --- a/src/devices/wifi/wifi-net-device.cc +++ b/src/devices/wifi/wifi-net-device.cc @@ -227,12 +227,6 @@ WifiNetDevice::Construct (void) // 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);