add support for 802.11p PHY and MAC parameters
authorMichael Nowatkowski <nowatkom@gmail.com>
Wed, 18 Nov 2009 10:52:28 +0100
changeset 5747 a171e73c4dae
parent 5746 9ce8c6d514b6
child 5750 af5068ba88f7
add support for 802.11p PHY and MAC parameters
src/devices/wifi/qadhoc-wifi-mac.cc
src/devices/wifi/qap-wifi-mac.cc
src/devices/wifi/qsta-wifi-mac.cc
src/devices/wifi/wifi-mac.cc
src/devices/wifi/wifi-mac.h
src/devices/wifi/wifi-phy-standard.h
src/devices/wifi/yans-wifi-phy.cc
src/devices/wifi/yans-wifi-phy.h
--- a/src/devices/wifi/qadhoc-wifi-mac.cc	Wed Nov 18 11:30:45 2009 +0300
+++ b/src/devices/wifi/qadhoc-wifi-mac.cc	Wed Nov 18 10:52:28 2009 +0100
@@ -410,6 +410,18 @@
 {
   switch (standard)
     {
+    case WIFI_PHY_STANDARD_80211p_CCH:
+      ConfigureCCHDcf (m_queues[AC_BK], 15, 511, AC_BK);
+      ConfigureCCHDcf (m_queues[AC_BE], 15, 511, AC_BE);
+      ConfigureCCHDcf (m_queues[AC_VI], 15, 511, AC_VI);
+      ConfigureCCHDcf (m_queues[AC_VO], 15, 511, AC_VO);
+      break;
+    case WIFI_PHY_STANDARD_80211p_SCH:
+      ConfigureDcf (m_queues[AC_BK], 15, 511, AC_BK);
+      ConfigureDcf (m_queues[AC_BE], 15, 511, AC_BE);
+      ConfigureDcf (m_queues[AC_VI], 15, 511, AC_VI);
+      ConfigureDcf (m_queues[AC_VO], 15, 511, AC_VO);
+      break;
     case WIFI_PHY_STANDARD_holland:
       // fall through
     case WIFI_PHY_STANDARD_80211a:
--- a/src/devices/wifi/qap-wifi-mac.cc	Wed Nov 18 11:30:45 2009 +0300
+++ b/src/devices/wifi/qap-wifi-mac.cc	Wed Nov 18 10:52:28 2009 +0100
@@ -752,6 +752,18 @@
 {
   switch (standard)
     {
+    case WIFI_PHY_STANDARD_80211p_CCH:
+      ConfigureCCHDcf (m_queues[AC_BK], 15, 511, AC_BK);
+      ConfigureCCHDcf (m_queues[AC_BE], 15, 511, AC_BE);
+      ConfigureCCHDcf (m_queues[AC_VI], 15, 511, AC_VI);
+      ConfigureCCHDcf (m_queues[AC_VO], 15, 511, AC_VO);
+      break;
+    case WIFI_PHY_STANDARD_80211p_SCH:
+      ConfigureDcf (m_queues[AC_BK], 15, 511, AC_BK);
+      ConfigureDcf (m_queues[AC_BE], 15, 511, AC_BE);
+      ConfigureDcf (m_queues[AC_VI], 15, 511, AC_VI);
+      ConfigureDcf (m_queues[AC_VO], 15, 511, AC_VO);
+      break;
     case WIFI_PHY_STANDARD_holland:
       // fall through
     case WIFI_PHY_STANDARD_80211a:
--- a/src/devices/wifi/qsta-wifi-mac.cc	Wed Nov 18 11:30:45 2009 +0300
+++ b/src/devices/wifi/qsta-wifi-mac.cc	Wed Nov 18 10:52:28 2009 +0100
@@ -739,6 +739,18 @@
 {
   switch (standard)
     {
+    case WIFI_PHY_STANDARD_80211p_CCH:
+      ConfigureCCHDcf (m_queues[AC_BK], 15, 511, AC_BK);
+      ConfigureCCHDcf (m_queues[AC_BE], 15, 511, AC_BE);
+      ConfigureCCHDcf (m_queues[AC_VI], 15, 511, AC_VI);
+      ConfigureCCHDcf (m_queues[AC_VO], 15, 511, AC_VO);
+      break;
+    case WIFI_PHY_STANDARD_80211p_SCH:
+      ConfigureDcf (m_queues[AC_BK], 15, 511, AC_BK);
+      ConfigureDcf (m_queues[AC_BE], 15, 511, AC_BE);
+      ConfigureDcf (m_queues[AC_VI], 15, 511, AC_VI);
+      ConfigureDcf (m_queues[AC_VO], 15, 511, AC_VO);
+      break;
     case WIFI_PHY_STANDARD_holland:
       // fall through
     case WIFI_PHY_STANDARD_80211a:
--- a/src/devices/wifi/wifi-mac.cc	Wed Nov 18 11:30:45 2009 +0300
+++ b/src/devices/wifi/wifi-mac.cc	Wed Nov 18 10:52:28 2009 +0100
@@ -220,6 +220,12 @@
   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;
@@ -272,6 +278,28 @@
 }
 
 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)); 
+}
+
+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)); 
+}
+
+void
 WifiMac::ConfigureDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax, enum AccessClass ac)
 {
   /* see IEE802.11 section 7.3.2.29 */
@@ -307,5 +335,39 @@
   }
 }
 
-
+void
+WifiMac::ConfigureCCHDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax, enum AccessClass 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;
+  }
+}
 } // namespace ns3
--- a/src/devices/wifi/wifi-mac.h	Wed Nov 18 11:30:45 2009 +0300
+++ b/src/devices/wifi/wifi-mac.h	Wed Nov 18 10:52:28 2009 +0100
@@ -216,6 +216,7 @@
 
 protected:
   void ConfigureDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax, enum AccessClass ac);
+  void ConfigureCCHDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax, enum AccessClass ac);
 private:
   static Time GetDefaultMaxPropagationDelay (void);
   static Time GetDefaultSlot (void);
@@ -240,6 +241,8 @@
   void Configure80211b (void);
   void Configure80211_10Mhz (void);
   void Configure80211_5Mhz ();
+  void Configure80211p_CCH (void);
+  void Configure80211p_SCH (void);
 
   /**
    * The trace source fired when packets come into the "top" of the device
--- a/src/devices/wifi/wifi-phy-standard.h	Wed Nov 18 11:30:45 2009 +0300
+++ b/src/devices/wifi/wifi-phy-standard.h	Wed Nov 18 10:52:28 2009 +0100
@@ -28,6 +28,8 @@
   WIFI_PHY_STANDARD_80211_10Mhz,
   WIFI_PHY_STANDARD_80211_5Mhz,
   WIFI_PHY_STANDARD_holland,
+  WIFI_PHY_STANDARD_80211p_CCH,
+  WIFI_PHY_STANDARD_80211p_SCH,
   WIFI_PHY_UNKNOWN
 };
 
--- a/src/devices/wifi/yans-wifi-phy.cc	Wed Nov 18 11:30:45 2009 +0300
+++ b/src/devices/wifi/yans-wifi-phy.cc	Wed Nov 18 10:52:28 2009 +0100
@@ -171,6 +171,12 @@
   case WIFI_PHY_STANDARD_holland:
     ConfigureHolland ();
     break;
+  case WIFI_PHY_STANDARD_80211p_CCH:
+    Configure80211p_CCH ();
+    break;
+  case WIFI_PHY_STANDARD_80211p_SCH:
+    Configure80211p_SCH ();
+    break;
   default:
     NS_ASSERT (false);
     break;
@@ -592,6 +598,36 @@
   m_modes.push_back (WifiPhy::Get54mba ());
 }
 
+void
+YansWifiPhy::Configure80211p_CCH (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_channelStartingFrequency = 5e3; // 802.11p works over the 5Ghz freq range
+  m_modes.push_back (WifiPhy::Get3mb10Mhz ());
+  m_modes.push_back (WifiPhy::Get4_5mb10Mhz ());
+  m_modes.push_back (WifiPhy::Get6mb10Mhz ());
+  m_modes.push_back (WifiPhy::Get9mb10Mhz ());
+  m_modes.push_back (WifiPhy::Get12mb10Mhz ());
+  m_modes.push_back (WifiPhy::Get18mb10Mhz ());
+  m_modes.push_back (WifiPhy::Get24mb10Mhz ());
+  m_modes.push_back (WifiPhy::Get27mb10Mhz  ());
+}
+
+void
+YansWifiPhy::Configure80211p_SCH (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_channelStartingFrequency = 5e3; // 802.11p works over the 5Ghz freq range
+  m_modes.push_back (WifiPhy::Get3mb10Mhz ());
+  m_modes.push_back (WifiPhy::Get4_5mb10Mhz ());
+  m_modes.push_back (WifiPhy::Get6mb10Mhz ());
+  m_modes.push_back (WifiPhy::Get9mb10Mhz ());
+  m_modes.push_back (WifiPhy::Get12mb10Mhz ());
+  m_modes.push_back (WifiPhy::Get18mb10Mhz ());
+  m_modes.push_back (WifiPhy::Get24mb10Mhz ());
+  m_modes.push_back (WifiPhy::Get27mb10Mhz  ());
+}
+
 void 
 YansWifiPhy::RegisterListener (WifiPhyListener *listener)
 {
--- a/src/devices/wifi/yans-wifi-phy.h	Wed Nov 18 11:30:45 2009 +0300
+++ b/src/devices/wifi/yans-wifi-phy.h	Wed Nov 18 10:52:28 2009 +0100
@@ -153,6 +153,8 @@
   void Configure80211_10Mhz (void);
   void Configure80211_5Mhz ();
   void ConfigureHolland (void);
+  void Configure80211p_CCH (void);
+  void Configure80211p_SCH (void);
   double GetEdThresholdW (void) const;
   double DbmToW (double dbm) const;
   double DbToRatio (double db) const;