convert WifiMacParameters to Attributes.

This commit is contained in:
Mathieu Lacage
2008-02-28 07:17:53 +01:00
parent 374362b25c
commit de39c3b77a
3 changed files with 92 additions and 48 deletions

View File

@@ -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<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)
{

View File

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

View File

@@ -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);