src/wifi/model/wifi-phy.cc
changeset 10139 17a71cd49da3
parent 9063 32755d0516f4
child 10402 b4e0285d2f22
--- a/src/wifi/model/wifi-phy.cc	Tue Aug 13 10:37:49 2013 -0700
+++ b/src/wifi/model/wifi-phy.cc	Tue Aug 13 22:05:25 2013 -0700
@@ -93,6 +93,56 @@
   NS_LOG_FUNCTION (this);
 }
 
+//Added by Ghada to support 11n
+
+//return the L-SIG
+WifiMode
+WifiPhy::GetMFPlcpHeaderMode (WifiMode payloadMode, WifiPreamble preamble)
+{
+    switch (payloadMode.GetBandwidth ())
+       {
+       case 20000000:
+          return WifiPhy::GetOfdmRate6_5MbpsBW20MHz ();
+        case 40000000:
+           return WifiPhy::GetOfdmRate13_5MbpsBW40MHz ();
+        default:
+            return WifiPhy::GetOfdmRate6_5MbpsBW20MHz ();
+      }
+}
+uint32_t
+WifiPhy::GetPlcpHtTrainingSymbolDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble, WifiTxVector txvector)
+{
+   switch (preamble)
+     {
+     case WIFI_PREAMBLE_HT_MF:
+        return 4+ (4* txvector.GetNss());
+     case WIFI_PREAMBLE_HT_GF:
+         return (4*txvector.GetNss())+(4*txvector.GetNess());
+      default:
+         // no training for non HT
+          return 0;
+      }
+}
+
+//return L-SIG
+uint32_t
+WifiPhy::GetPlcpHtSigHeaderDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble)
+{
+         switch (preamble)
+            {
+             case WIFI_PREAMBLE_HT_MF:
+               // HT-SIG
+               return 8;
+             case WIFI_PREAMBLE_HT_GF:
+               //HT-SIG
+               return 8;
+             default:
+               // no HT-SIG for non HT
+               return 0;
+            }
+
+}
+//end added by Ghada
 
 WifiMode
 WifiPhy::GetPlcpHeaderMode (WifiMode payloadMode, WifiPreamble preamble)
@@ -115,7 +165,36 @@
             return WifiPhy::GetOfdmRate6Mbps ();
           }
       }
-
+    //Added by Ghada to support 11n
+    case WIFI_MOD_CLASS_HT:
+      {  //return the HT-SIG
+         // IEEE Std 802.11n, 20.3.23
+         switch (preamble)
+           {
+            case WIFI_PREAMBLE_HT_MF:
+                switch (payloadMode.GetBandwidth ())
+                  {
+                   case 20000000:
+                      return WifiPhy::GetOfdmRate13MbpsBW20MHz ();
+                   case 40000000:
+                      return WifiPhy::GetOfdmRate27MbpsBW40MHz ();
+                   default:
+                      return WifiPhy::GetOfdmRate13MbpsBW20MHz ();
+                  }
+            case WIFI_PREAMBLE_HT_GF:
+                  switch (payloadMode.GetBandwidth ())
+                  {
+                   case 20000000:
+                      return WifiPhy::GetOfdmRate13MbpsBW20MHz ();
+                   case 40000000:
+                      return WifiPhy::GetOfdmRate27MbpsBW40MHz ();
+                   default:
+                      return WifiPhy::GetOfdmRate13MbpsBW20MHz ();
+                  }
+             default:
+                return WifiPhy::GetOfdmRate6Mbps ();
+          }
+      }
     case WIFI_MOD_CLASS_ERP_OFDM:
       return WifiPhy::GetErpOfdmRate6Mbps ();
 
@@ -137,6 +216,7 @@
     }
 }
 
+
 uint32_t
 WifiPhy::GetPlcpHeaderDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble)
 {
@@ -163,7 +243,22 @@
             return 16;
           }
       }
-
+     //Added by Ghada to support 11n
+    case WIFI_MOD_CLASS_HT:
+      { //IEEE 802.11n Figure 20.1
+         switch (preamble)
+            {
+             case WIFI_PREAMBLE_HT_MF:
+               // L-SIG
+               return 4;
+             case WIFI_PREAMBLE_HT_GF:
+               //L-SIG
+               return 0;
+             default:
+               // L-SIG
+               return 4;
+            }
+      }
     case WIFI_MOD_CLASS_ERP_OFDM:
       return 16;
 
@@ -209,7 +304,10 @@
             return 64;
           }
       }
-
+    case WIFI_MOD_CLASS_HT:
+      { //IEEE 802.11n Figure 20.1 the training symbols before L_SIG or HT_SIG
+           return 16;
+      }
     case WIFI_MOD_CLASS_ERP_OFDM:
       return 4;
 
@@ -224,18 +322,19 @@
           // IEEE Std 802.11-2007, sections 18.2.2.1 and figure 18-1
           return 144;
         }
-
     default:
       NS_FATAL_ERROR ("unsupported modulation class");
       return 0;
     }
 }
 
-uint32_t
-WifiPhy::GetPayloadDurationMicroSeconds (uint32_t size, WifiMode payloadMode)
+double
+WifiPhy::GetPayloadDurationMicroSeconds (uint32_t size, WifiTxVector txvector)
 {
+  WifiMode payloadMode=txvector.GetMode();
+
   NS_LOG_FUNCTION (size << payloadMode);
-
+ 
   switch (payloadMode.GetModulationClass ())
     {
     case WIFI_MOD_CLASS_OFDM:
@@ -261,10 +360,10 @@
 
         // IEEE Std 802.11-2007, section 17.3.2.2, table 17-3
         // corresponds to N_{DBPS} in the table
-        double numDataBitsPerSymbol = payloadMode.GetDataRate ()  * symbolDurationUs / 1e6;
+        double numDataBitsPerSymbol = payloadMode.GetDataRate () * symbolDurationUs / 1e6;
 
         // IEEE Std 802.11-2007, section 17.3.5.3, equation (17-11)
-        uint32_t numSymbols = lrint (std::ceil ((16 + size * 8.0 + 6.0) / numDataBitsPerSymbol));
+        uint32_t numSymbols = lrint (ceil ((16 + size * 8.0 + 6.0) / numDataBitsPerSymbol));
 
         // Add signal extension for ERP PHY
         if (payloadMode.GetModulationClass () == WIFI_MOD_CLASS_ERP_OFDM)
@@ -276,13 +375,59 @@
             return numSymbols * symbolDurationUs;
           }
       }
-
+    case WIFI_MOD_CLASS_HT:
+      {
+         double symbolDurationUs;
+         double m_Stbc;
+        //if short GI data rate is used then symbol duration is 3.6us else symbol duration is 4us
+        //In the future has to create a stationmanager that only uses these data rates if sender and reciever support GI
+         if (payloadMode.GetUniqueName() == "OfdmRate135MbpsBW40MHzShGi" || payloadMode.GetUniqueName() == "OfdmRate65MbpsBW20MHzShGi" )
+           {
+             symbolDurationUs=3.6;
+           }
+         else
+           {
+             switch (payloadMode.GetDataRate ()/ (txvector.GetNss()))
+               { //shortGi
+                  case 7200000:
+                  case 14400000:
+                  case 21700000:
+                  case 28900000:
+                  case 43300000:
+                  case 57800000:
+                  case 72200000:
+                  case 15000000:
+                  case 30000000:
+                  case 45000000:
+                  case 60000000:
+                  case 90000000:
+                  case 120000000:
+                  case 150000000:
+                    symbolDurationUs=3.6;
+                    break;               
+                 default:
+                    symbolDurationUs=4;
+              }
+           }
+         if  (txvector.IsStbc())
+            m_Stbc=2;
+         else
+           m_Stbc=1;
+         double numDataBitsPerSymbol = payloadMode.GetDataRate () *txvector.GetNss()  * symbolDurationUs / 1e6;
+         //check tables 20-35 and 20-36 in the standard to get cases when nes =2
+         double Nes=1;
+        // IEEE Std 802.11n, section 20.3.11, equation (20-32)
+        uint32_t numSymbols = lrint (m_Stbc*ceil ((16 + size * 8.0 + 6.0*Nes) / (m_Stbc* numDataBitsPerSymbol)));
+       
+        return numSymbols * symbolDurationUs;
+         
+      }
     case WIFI_MOD_CLASS_DSSS:
       // IEEE Std 802.11-2007, section 18.2.3.5
       NS_LOG_LOGIC (" size=" << size
                              << " mode=" << payloadMode
                              << " rate=" << payloadMode.GetDataRate () );
-      return lrint (std::ceil ((size * 8.0) / (payloadMode.GetDataRate () / 1.0e6)));
+      return lrint (ceil ((size * 8.0) / (payloadMode.GetDataRate () / 1.0e6)));
 
     default:
       NS_FATAL_ERROR ("unsupported modulation class");
@@ -291,15 +436,19 @@
 }
 
 Time
-WifiPhy::CalculateTxDuration (uint32_t size, WifiMode payloadMode, WifiPreamble preamble)
+WifiPhy::CalculateTxDuration (uint32_t size, WifiTxVector txvector, WifiPreamble preamble)
 {
-  uint32_t duration = GetPlcpPreambleDurationMicroSeconds (payloadMode, preamble)
+  WifiMode payloadMode=txvector.GetMode();
+  double duration = GetPlcpPreambleDurationMicroSeconds (payloadMode, preamble)
     + GetPlcpHeaderDurationMicroSeconds (payloadMode, preamble)
-    + GetPayloadDurationMicroSeconds (size, payloadMode);
+    + GetPlcpHtSigHeaderDurationMicroSeconds (payloadMode, preamble)
+    + GetPlcpHtTrainingSymbolDurationMicroSeconds (payloadMode, preamble,txvector)
+    + GetPayloadDurationMicroSeconds (size, txvector);
   return MicroSeconds (duration);
 }
 
 
+
 void
 WifiPhy::NotifyTxBegin (Ptr<const Packet> packet)
 {
@@ -343,9 +492,9 @@
 }
 
 void
-WifiPhy::NotifyMonitorSniffTx (Ptr<const Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble)
+WifiPhy::NotifyMonitorSniffTx (Ptr<const Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, uint8_t txPower)
 {
-  m_phyMonitorSniffTxTrace (packet, channelFreqMhz, channelNumber, rate, isShortPreamble);
+  m_phyMonitorSniffTxTrace (packet, channelFreqMhz, channelNumber, rate, isShortPreamble, txPower);
 }
 
 
@@ -835,6 +984,419 @@
   return mode;
 }
 
+/*Clause 20*/
+
+WifiMode
+WifiPhy::GetOfdmRate6_5MbpsBW20MHz ()
+{
+  static WifiMode mode =
+  WifiModeFactory::CreateWifiMode ("OfdmRate6_5MbpsBW20MHz",
+                                    WIFI_MOD_CLASS_HT,
+                                    true,
+                                    20000000, 6500000,
+                                    WIFI_CODE_RATE_1_2,
+                                    2);
+  return mode;
+}
+WifiMode
+WifiPhy::GetOfdmRate7_2MbpsBW20MHz ()
+{
+  static WifiMode mode =
+  WifiModeFactory::CreateWifiMode ("OfdmRate7_2MbpsBW20MHz",
+                                    WIFI_MOD_CLASS_HT,
+                                    false,
+                                    20000000, 7200000,
+                                    WIFI_CODE_RATE_1_2,
+                                    2);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate13MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate13MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     true,
+                                     20000000, 13000000,
+                                     WIFI_CODE_RATE_1_2,
+                                     4);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate14_4MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate14_4MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     20000000, 14400000,
+                                     WIFI_CODE_RATE_1_2,
+                                     4);
+  return mode;
+}
+WifiMode
+WifiPhy::GetOfdmRate19_5MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate19_5MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     true,
+                                     20000000, 19500000,
+                                     WIFI_CODE_RATE_3_4,
+                                     4);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate21_7MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate21_7MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     20000000, 21700000,
+                                     WIFI_CODE_RATE_3_4,
+                                     4);
+  return mode;
+}
+
+
+WifiMode
+WifiPhy::GetOfdmRate26MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate26MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     true,
+                                     20000000, 26000000,
+                                     WIFI_CODE_RATE_1_2,
+                                     16);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate28_9MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate28_9MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     20000000, 28900000,
+                                     WIFI_CODE_RATE_1_2,
+                                     16);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate39MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate39MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     true,
+                                     20000000, 39000000,
+                                     WIFI_CODE_RATE_3_4,
+                                     16);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate43_3MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate43_3MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     20000000, 43300000,
+                                     WIFI_CODE_RATE_3_4,
+                                     16);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate52MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate52MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     true,
+                                     20000000, 52000000,
+                                     WIFI_CODE_RATE_2_3,
+                                     64);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate57_8MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate57_8MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     20000000, 57800000,
+                                     WIFI_CODE_RATE_2_3,
+                                     64);
+  return mode;
+}
+
+
+WifiMode
+WifiPhy::GetOfdmRate58_5MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate58_5MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     true,
+                                     20000000, 58500000,
+                                     WIFI_CODE_RATE_3_4,
+                                     64);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate65MbpsBW20MHzShGi ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate65MbpsBW20MHzShGi",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     20000000, 65000000,
+                                     WIFI_CODE_RATE_3_4,
+                                     64);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate65MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate65MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     true,
+                                     20000000, 65000000,
+                                     WIFI_CODE_RATE_5_6,
+                                     64);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate72_2MbpsBW20MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate72_2MbpsBW20MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     20000000, 72200000,
+                                     WIFI_CODE_RATE_5_6,
+                                     64);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate13_5MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate13_5MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 13500000,
+                                     WIFI_CODE_RATE_1_2,
+                                     2);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate15MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate15MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 15000000,
+                                     WIFI_CODE_RATE_1_2,
+                                     2);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate27MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate27MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 27000000,
+                                     WIFI_CODE_RATE_1_2,
+                                     4);
+  return mode;
+}
+WifiMode
+WifiPhy::GetOfdmRate30MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate30MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 30000000,
+                                     WIFI_CODE_RATE_1_2,
+                                     4);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate40_5MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate40_5MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 40500000,
+                                     WIFI_CODE_RATE_3_4,
+                                     4);
+  return mode;
+}
+WifiMode
+WifiPhy::GetOfdmRate45MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate45MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 45000000,
+                                     WIFI_CODE_RATE_3_4,
+                                     4);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate54MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate54MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 54000000,
+                                     WIFI_CODE_RATE_1_2,
+                                     16);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate60MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate60MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 60000000,
+                                     WIFI_CODE_RATE_1_2,
+                                     16);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate81MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate81MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 81000000,
+                                     WIFI_CODE_RATE_3_4,
+                                     16);
+  return mode;
+}
+WifiMode
+WifiPhy::GetOfdmRate90MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate90MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 90000000,
+                                     WIFI_CODE_RATE_3_4,
+                                     16);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate108MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate108MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 108000000,
+                                     WIFI_CODE_RATE_2_3,
+                                     64);
+  return mode;
+}
+WifiMode
+WifiPhy::GetOfdmRate120MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate120MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 120000000,
+                                     WIFI_CODE_RATE_2_3,
+                                     64);
+  return mode;
+}
+WifiMode
+WifiPhy::GetOfdmRate121_5MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate121_5MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 121500000,
+                                     WIFI_CODE_RATE_3_4,
+                                     64);
+  return mode;
+}
+WifiMode
+WifiPhy::GetOfdmRate135MbpsBW40MHzShGi ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate135MbpsBW40MHzShGi",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 135000000,
+                                     WIFI_CODE_RATE_3_4,
+                                     64);
+  return mode;
+}
+WifiMode
+WifiPhy::GetOfdmRate135MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate135MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 135000000,
+                                     WIFI_CODE_RATE_5_6,
+                                     64);
+  return mode;
+}
+
+WifiMode
+WifiPhy::GetOfdmRate150MbpsBW40MHz ()
+{
+  static WifiMode mode =
+    WifiModeFactory::CreateWifiMode ("OfdmRate150MbpsBW40MHz",
+                                     WIFI_MOD_CLASS_HT,
+                                     false,
+                                     40000000, 150000000,
+                                     WIFI_CODE_RATE_5_6,
+                                     64);
+  return mode;
+}
+
+
+
 std::ostream& operator<< (std::ostream& os, enum WifiPhy::State state)
 {
   switch (state)
@@ -855,6 +1417,8 @@
     }
 }
 
+
+
 } // namespace ns3
 
 namespace {
@@ -900,6 +1464,31 @@
     ns3::WifiPhy::GetOfdmRate9MbpsBW5MHz ();
     ns3::WifiPhy::GetOfdmRate12MbpsBW5MHz ();
     ns3::WifiPhy::GetOfdmRate13_5MbpsBW5MHz ();
+    ns3::WifiPhy::GetOfdmRate6_5MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate13MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate19_5MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate26MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate39MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate52MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate58_5MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate65MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate13_5MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate27MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate40_5MbpsBW40MHz ();    
+    ns3::WifiPhy::GetOfdmRate54MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate81MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate108MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate121_5MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate135MbpsBW40MHz ();
+    ns3::WifiPhy::GetOfdmRate7_2MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate14_4MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate21_7MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate28_9MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate43_3MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate57_8MbpsBW20MHz ();
+    ns3::WifiPhy::GetOfdmRate65MbpsBW20MHzShGi ();
+    ns3::WifiPhy::GetOfdmRate72_2MbpsBW20MHz ();
+
   }
 } g_constructor;
 }