src/wifi/model/wifi-mac.cc
changeset 7141 072fb225b714
parent 6852 8f1a53d3f6ca
child 7162 c29fbeddbc04
--- a/src/wifi/model/wifi-mac.cc	Fri May 06 13:21:20 2011 -0700
+++ b/src/wifi/model/wifi-mac.cc	Sat May 07 21:49:46 2011 +0200
@@ -3,7 +3,7 @@
  * Copyright (c) 2008 INRIA
  *
  * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as 
+ * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation;
  *
  * This program is distributed in the hope that it will be useful,
@@ -29,7 +29,7 @@
 Time
 WifiMac::GetDefaultMaxPropagationDelay (void)
 {
-  // 1000m 
+  // 1000m
   return Seconds (1000.0 / 300000000.0);
 }
 Time
@@ -58,8 +58,8 @@
 Time
 WifiMac::GetDefaultCtsAckTimeout (void)
 {
-  /* Cts_Timeout and Ack_Timeout are specified in the Annex C 
-     (Formal description of MAC operation, see details on the 
+  /* 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)
   */
   Time ctsTimeout = GetDefaultSifs ();
@@ -126,7 +126,7 @@
   return MicroSeconds (0);
 }
 
-TypeId 
+TypeId
 WifiMac::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::WifiMac")
@@ -154,17 +154,17 @@
     .AddAttribute ("Sifs", "The value of the SIFS constant.",
                    TimeValue (GetDefaultSifs ()),
                    MakeTimeAccessor (&WifiMac::SetSifs,
-				     &WifiMac::GetSifs),
+                                     &WifiMac::GetSifs),
                    MakeTimeChecker ())
     .AddAttribute ("EifsNoDifs", "The value of EIFS-DIFS",
-		   TimeValue (GetDefaultEifsNoDifs ()),
-		   MakeTimeAccessor (&WifiMac::SetEifsNoDifs,
-				     &WifiMac::GetEifsNoDifs),
-		   MakeTimeChecker ())
+                   TimeValue (GetDefaultEifsNoDifs ()),
+                   MakeTimeAccessor (&WifiMac::SetEifsNoDifs,
+                                     &WifiMac::GetEifsNoDifs),
+                   MakeTimeChecker ())
     .AddAttribute ("Slot", "The duration of a Slot.",
                    TimeValue (GetDefaultSlot ()),
                    MakeTimeAccessor (&WifiMac::SetSlot,
-				     &WifiMac::GetSlot),
+                                     &WifiMac::GetSlot),
                    MakeTimeChecker ())
     .AddAttribute ("Pifs", "The value of the PIFS constant.",
                    TimeValue (GetDefaultSifs () + GetDefaultSlot ()),
@@ -176,41 +176,41 @@
                    MakeTimeAccessor (&WifiMac::m_maxPropagationDelay),
                    MakeTimeChecker ())
     .AddAttribute ("Ssid", "The ssid we want to belong to.",
-		   SsidValue (Ssid ("default")),
-		   MakeSsidAccessor (&WifiMac::GetSsid,
-				     &WifiMac::SetSsid),
-		   MakeSsidChecker ())
-    .AddTraceSource ("MacTx", 
+                   SsidValue (Ssid ("default")),
+                   MakeSsidAccessor (&WifiMac::GetSsid,
+                                     &WifiMac::SetSsid),
+                   MakeSsidChecker ())
+    .AddTraceSource ("MacTx",
                      "A packet has been received from higher layers and is being processed in preparation for "
                      "queueing for transmission.",
                      MakeTraceSourceAccessor (&WifiMac::m_macTxTrace))
-    .AddTraceSource ("MacTxDrop", 
+    .AddTraceSource ("MacTxDrop",
                      "A packet has been dropped in the MAC layer before being queued for transmission.",
                      MakeTraceSourceAccessor (&WifiMac::m_macTxDropTrace))
-    .AddTraceSource ("MacPromiscRx", 
+    .AddTraceSource ("MacPromiscRx",
                      "A packet has been received by this device, has been passed up from the physical layer "
                      "and is being forwarded up the local protocol stack.  This is a promiscuous trace,",
                      MakeTraceSourceAccessor (&WifiMac::m_macPromiscRxTrace))
-    .AddTraceSource ("MacRx", 
+    .AddTraceSource ("MacRx",
                      "A packet has been received by this device, has been passed up from the physical layer "
                      "and is being forwarded up the local protocol stack.  This is a non-promiscuous trace,",
                      MakeTraceSourceAccessor (&WifiMac::m_macRxTrace))
-    .AddTraceSource ("MacRxDrop", 
+    .AddTraceSource ("MacRxDrop",
                      "A packet has been dropped in the MAC layer after it has been passed up from the physical "
                      "layer.",
                      MakeTraceSourceAccessor (&WifiMac::m_macRxDropTrace))
 #if 0
     // Not currently implemented in this device
-    .AddTraceSource ("Sniffer", 
+    .AddTraceSource ("Sniffer",
                      "Trace source simulating a non-promiscuous packet sniffer attached to the device",
                      MakeTraceSourceAccessor (&WifiMac::m_snifferTrace))
 #endif
-    ;
+  ;
 
   return tid;
 }
 
-void 
+void
 WifiMac::SetMaxPropagationDelay (Time delay)
 {
   m_maxPropagationDelay = delay;
@@ -227,32 +227,32 @@
   return m_maxPropagationDelay;
 }
 
-void 
+void
 WifiMac::NotifyTx (Ptr<const Packet> packet)
 {
   m_macTxTrace (packet);
 }
 
-void 
-WifiMac::NotifyTxDrop (Ptr<const Packet> packet) 
+void
+WifiMac::NotifyTxDrop (Ptr<const Packet> packet)
 {
   m_macTxDropTrace (packet);
 }
 
-void 
-WifiMac::NotifyRx (Ptr<const Packet> packet) 
+void
+WifiMac::NotifyRx (Ptr<const Packet> packet)
 {
   m_macRxTrace (packet);
 }
 
-void 
-WifiMac::NotifyPromiscRx (Ptr<const Packet> packet) 
+void
+WifiMac::NotifyPromiscRx (Ptr<const Packet> packet)
 {
   m_macPromiscRxTrace (packet);
 }
 
-void 
-WifiMac::NotifyRxDrop (Ptr<const Packet> packet) 
+void
+WifiMac::NotifyRxDrop (Ptr<const Packet> packet)
 {
   m_macRxDropTrace (packet);
 }
@@ -260,185 +260,188 @@
 void
 WifiMac::ConfigureStandard (enum WifiPhyStandard standard)
 {
-  switch (standard) {
-  case WIFI_PHY_STANDARD_80211a:
-    Configure80211a ();
-    break;
-  case WIFI_PHY_STANDARD_80211b:
-    Configure80211b ();
-    break;
-  case WIFI_PHY_STANDARD_80211g:
-    Configure80211g ();
-    break;
-  case WIFI_PHY_STANDARD_80211_10Mhz: 
-    Configure80211_10Mhz ();
-    break;
-  case WIFI_PHY_STANDARD_80211_5Mhz:
-    Configure80211_5Mhz ();
-    break;
-  case WIFI_PHY_STANDARD_holland:
-    Configure80211a ();
-    break;
-  case WIFI_PHY_STANDARD_80211p_CCH:
-    Configure80211p_CCH ();
-    break;
-  case WIFI_PHY_STANDARD_80211p_SCH:
-    Configure80211p_SCH ();
-    break;
-  default:
-    NS_ASSERT (false);
-    break;
-  }
+  switch (standard)
+    {
+    case WIFI_PHY_STANDARD_80211a:
+      Configure80211a ();
+      break;
+    case WIFI_PHY_STANDARD_80211b:
+      Configure80211b ();
+      break;
+    case WIFI_PHY_STANDARD_80211g:
+      Configure80211g ();
+      break;
+    case WIFI_PHY_STANDARD_80211_10Mhz:
+      Configure80211_10Mhz ();
+      break;
+    case WIFI_PHY_STANDARD_80211_5Mhz:
+      Configure80211_5Mhz ();
+      break;
+    case WIFI_PHY_STANDARD_holland:
+      Configure80211a ();
+      break;
+    case WIFI_PHY_STANDARD_80211p_CCH:
+      Configure80211p_CCH ();
+      break;
+    case WIFI_PHY_STANDARD_80211p_SCH:
+      Configure80211p_SCH ();
+      break;
+    default:
+      NS_ASSERT (false);
+      break;
+    }
   FinishConfigureStandard (standard);
 }
 
 void
 WifiMac::Configure80211a (void)
 {
-  SetSifs(MicroSeconds(16));
-  SetSlot(MicroSeconds(9)); 
-  SetEifsNoDifs(MicroSeconds(16+44));
-  SetPifs(MicroSeconds(16+9));
-  SetCtsTimeout(MicroSeconds(16+44+9+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2));
-  SetAckTimeout(MicroSeconds(16+44+9+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2)); 
+  SetSifs (MicroSeconds (16));
+  SetSlot (MicroSeconds (9));
+  SetEifsNoDifs (MicroSeconds (16 + 44));
+  SetPifs (MicroSeconds (16 + 9));
+  SetCtsTimeout (MicroSeconds (16 + 44 + 9 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
+  SetAckTimeout (MicroSeconds (16 + 44 + 9 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
 }
 
 void
 WifiMac::Configure80211b (void)
 {
-  SetSifs(MicroSeconds(10));
-  SetSlot(MicroSeconds(20));
-  SetEifsNoDifs(MicroSeconds(10+304));
-  SetPifs(MicroSeconds(10+20));
-  SetCtsTimeout(MicroSeconds(10+304+20+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2));
-  SetAckTimeout(MicroSeconds(10+304+20+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2)); 
+  SetSifs (MicroSeconds (10));
+  SetSlot (MicroSeconds (20));
+  SetEifsNoDifs (MicroSeconds (10 + 304));
+  SetPifs (MicroSeconds (10 + 20));
+  SetCtsTimeout (MicroSeconds (10 + 304 + 20 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
+  SetAckTimeout (MicroSeconds (10 + 304 + 20 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
 }
 
 void
 WifiMac::Configure80211g (void)
 {
-  SetSifs(MicroSeconds(10));
+  SetSifs (MicroSeconds (10));
   // Note no support for Short Slot Time as yet
-  SetSlot(MicroSeconds(20));
-  SetEifsNoDifs(MicroSeconds(10+304));
-  SetPifs(MicroSeconds(10+20));
-  SetCtsTimeout(MicroSeconds(10+304+20+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2));
-  SetAckTimeout(MicroSeconds(10+304+20+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2));
+  SetSlot (MicroSeconds (20));
+  SetEifsNoDifs (MicroSeconds (10 + 304));
+  SetPifs (MicroSeconds (10 + 20));
+  SetCtsTimeout (MicroSeconds (10 + 304 + 20 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
+  SetAckTimeout (MicroSeconds (10 + 304 + 20 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
 }
 
 void
 WifiMac::Configure80211_10Mhz (void)
 {
-  SetSifs(MicroSeconds(32));
-  SetSlot(MicroSeconds(13)); 
-  SetEifsNoDifs(MicroSeconds(32+88));
-  SetPifs(MicroSeconds(32+13));
-  SetCtsTimeout(MicroSeconds(32+88+13+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2));
-  SetAckTimeout(MicroSeconds(32+88+13+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2)); 
+  SetSifs (MicroSeconds (32));
+  SetSlot (MicroSeconds (13));
+  SetEifsNoDifs (MicroSeconds (32 + 88));
+  SetPifs (MicroSeconds (32 + 13));
+  SetCtsTimeout (MicroSeconds (32 + 88 + 13 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
+  SetAckTimeout (MicroSeconds (32 + 88 + 13 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
 }
 
 void
 WifiMac::Configure80211_5Mhz (void)
 {
-  SetSifs(MicroSeconds(64));
-  SetSlot(MicroSeconds(21));
-  SetEifsNoDifs(MicroSeconds(64+176));
-  SetPifs(MicroSeconds(64+21));
-  SetCtsTimeout(MicroSeconds(64+176+21+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2));
-  SetAckTimeout(MicroSeconds(64+176+21+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2)); 
+  SetSifs (MicroSeconds (64));
+  SetSlot (MicroSeconds (21));
+  SetEifsNoDifs (MicroSeconds (64 + 176));
+  SetPifs (MicroSeconds (64 + 21));
+  SetCtsTimeout (MicroSeconds (64 + 176 + 21 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
+  SetAckTimeout (MicroSeconds (64 + 176 + 21 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
 }
 
 void
 WifiMac::Configure80211p_CCH (void)
 {
-  SetSifs(MicroSeconds(32));
-  SetSlot(MicroSeconds(16)); 
-  SetEifsNoDifs(MicroSeconds(32+88));
-  SetPifs(MicroSeconds(32+16));
-  SetCtsTimeout(MicroSeconds(32+88+16+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2));
-  SetAckTimeout(MicroSeconds(32+88+16+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2)); 
+  SetSifs (MicroSeconds (32));
+  SetSlot (MicroSeconds (16));
+  SetEifsNoDifs (MicroSeconds (32 + 88));
+  SetPifs (MicroSeconds (32 + 16));
+  SetCtsTimeout (MicroSeconds (32 + 88 + 16 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
+  SetAckTimeout (MicroSeconds (32 + 88 + 16 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
 }
 
 void
 WifiMac::Configure80211p_SCH (void)
 {
-  SetSifs(MicroSeconds(32));
-  SetSlot(MicroSeconds(16)); 
-  SetEifsNoDifs(MicroSeconds(32+88));
-  SetPifs(MicroSeconds(32+16));
-  SetCtsTimeout(MicroSeconds(32+88+16+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2));
-  SetAckTimeout(MicroSeconds(32+88+16+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2)); 
+  SetSifs (MicroSeconds (32));
+  SetSlot (MicroSeconds (16));
+  SetEifsNoDifs (MicroSeconds (32 + 88));
+  SetPifs (MicroSeconds (32 + 16));
+  SetCtsTimeout (MicroSeconds (32 + 88 + 16 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
+  SetAckTimeout (MicroSeconds (32 + 88 + 16 + GetDefaultMaxPropagationDelay ().GetMicroSeconds () * 2));
 }
 
 void
 WifiMac::ConfigureDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax, enum AcIndex ac)
 {
   /* see IEE802.11 section 7.3.2.29 */
-  switch (ac) {
-  case AC_VO:
-    dcf->SetMinCw ((cwmin+1)/4-1);
-    dcf->SetMaxCw ((cwmin+1)/2-1);
-    dcf->SetAifsn (2);
-    break;
-  case AC_VI:
-    dcf->SetMinCw ((cwmin+1)/2-1);
-    dcf->SetMaxCw (cwmin);
-    dcf->SetAifsn (2);
-    break;
-  case AC_BE:
-    dcf->SetMinCw (cwmin);
-    dcf->SetMaxCw (cwmax);
-    dcf->SetAifsn (3);
-    break;
-  case AC_BK:
-    dcf->SetMinCw (cwmin);
-    dcf->SetMaxCw (cwmax);
-    dcf->SetAifsn (7);
-    break;
-  case AC_BE_NQOS:
-    dcf->SetMinCw (cwmin);
-    dcf->SetMaxCw (cwmax);
-    dcf->SetAifsn (2);    
-    break;
-  case AC_UNDEF:
-    NS_FATAL_ERROR ("I don't know what to do with this");
-    break;
-  }
+  switch (ac)
+    {
+    case AC_VO:
+      dcf->SetMinCw ((cwmin + 1) / 4 - 1);
+      dcf->SetMaxCw ((cwmin + 1) / 2 - 1);
+      dcf->SetAifsn (2);
+      break;
+    case AC_VI:
+      dcf->SetMinCw ((cwmin + 1) / 2 - 1);
+      dcf->SetMaxCw (cwmin);
+      dcf->SetAifsn (2);
+      break;
+    case AC_BE:
+      dcf->SetMinCw (cwmin);
+      dcf->SetMaxCw (cwmax);
+      dcf->SetAifsn (3);
+      break;
+    case AC_BK:
+      dcf->SetMinCw (cwmin);
+      dcf->SetMaxCw (cwmax);
+      dcf->SetAifsn (7);
+      break;
+    case AC_BE_NQOS:
+      dcf->SetMinCw (cwmin);
+      dcf->SetMaxCw (cwmax);
+      dcf->SetAifsn (2);
+      break;
+    case AC_UNDEF:
+      NS_FATAL_ERROR ("I don't know what to do with this");
+      break;
+    }
 }
 
 void
 WifiMac::ConfigureCCHDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax, enum AcIndex ac)
 {
   /* see IEEE 1609.4-2006 section 6.3.1, Table 1 */
-  switch (ac) {
-  case AC_VO:
-    dcf->SetMinCw ((cwmin+1)/4-1);
-    dcf->SetMaxCw ((cwmin+1)/2-1);
-    dcf->SetAifsn (2);
-    break;
-  case AC_VI:
-    dcf->SetMinCw ((cwmin+1)/4-1);
-    dcf->SetMaxCw ((cwmin+1)/2-1);
-    dcf->SetAifsn (3);
-    break;
-  case AC_BE:
-    dcf->SetMinCw ((cwmin+1)/2-1);
-    dcf->SetMaxCw (cwmin);
-    dcf->SetAifsn (6);
-    break;
-  case AC_BK:
-    dcf->SetMinCw (cwmin);
-    dcf->SetMaxCw (cwmax);
-    dcf->SetAifsn (9);
-    break;
-  case AC_BE_NQOS:
-    dcf->SetMinCw (cwmin);
-    dcf->SetMaxCw (cwmax);
-    dcf->SetAifsn (2);    
-    break;
-  case AC_UNDEF:
-    NS_FATAL_ERROR ("I don't know what to do with this");
-    break;
-  }
+  switch (ac)
+    {
+    case AC_VO:
+      dcf->SetMinCw ((cwmin + 1) / 4 - 1);
+      dcf->SetMaxCw ((cwmin + 1) / 2 - 1);
+      dcf->SetAifsn (2);
+      break;
+    case AC_VI:
+      dcf->SetMinCw ((cwmin + 1) / 4 - 1);
+      dcf->SetMaxCw ((cwmin + 1) / 2 - 1);
+      dcf->SetAifsn (3);
+      break;
+    case AC_BE:
+      dcf->SetMinCw ((cwmin + 1) / 2 - 1);
+      dcf->SetMaxCw (cwmin);
+      dcf->SetAifsn (6);
+      break;
+    case AC_BK:
+      dcf->SetMinCw (cwmin);
+      dcf->SetMaxCw (cwmax);
+      dcf->SetAifsn (9);
+      break;
+    case AC_BE_NQOS:
+      dcf->SetMinCw (cwmin);
+      dcf->SetMaxCw (cwmax);
+      dcf->SetAifsn (2);
+      break;
+    case AC_UNDEF:
+      NS_FATAL_ERROR ("I don't know what to do with this");
+      break;
+    }
 }
 } // namespace ns3