Support for 5 and 10Mhz wifi channels
authorRamon Bauza <monbauza@gmail.com>
Mon Jul 13 14:30:12 2009 +0200 (7 months ago)
changeset 4700a52c39181dd4
parent 4699 7555c9a0564b
child 4701 8558474b6149
child 4702 b9d9ae596f83
Support for 5 and 10Mhz wifi channels
src/devices/wifi/interference-helper.cc
src/devices/wifi/interference-helper.h
src/devices/wifi/wifi-mac.cc
src/devices/wifi/wifi-mac.h
src/devices/wifi/wifi-phy-standard.h
src/devices/wifi/wifi-phy.cc
src/devices/wifi/wifi-phy.h
src/devices/wifi/yans-error-rate-model.cc
src/devices/wifi/yans-wifi-phy.cc
src/devices/wifi/yans-wifi-phy.h
     1.1 --- a/src/devices/wifi/interference-helper.cc	Mon Jul 13 09:57:32 2009 +0200
     1.2 +++ b/src/devices/wifi/interference-helper.cc	Mon Jul 13 14:30:12 2009 +0200
     1.3 @@ -241,6 +241,18 @@
     1.4        delay += m_plcpLongPreambleDelayUs;
     1.5        delay += lrint (ceil ((size * 8.0 + 48.0) / payloadMode.GetDataRate () / 4e-6) * 4);
     1.6        break;
     1.7 +    case WIFI_PHY_STANDARD_80211_10Mhz: 
     1.8 +      delay += m_plcpLongPreambleDelayUs;
     1.9 +      // symbol duration is 8us
    1.10 +      delay += 8;
    1.11 +      delay += lrint (ceil ((size * 8.0 + 16.0 + 6.0) / payloadMode.GetDataRate () / 8e-6) * 8);
    1.12 +      break;
    1.13 +    case WIFI_PHY_STANDARD_80211_5Mhz: 
    1.14 +      delay += m_plcpLongPreambleDelayUs;
    1.15 +      // symbol duration is 16us
    1.16 +      delay += 16;
    1.17 +      delay += lrint (ceil ((size * 8.0 + 16.0 + 6.0) / payloadMode.GetDataRate () / 1.6e-5) * 16);
    1.18 +      break;
    1.19      default:
    1.20       NS_ASSERT (false);
    1.21       break;
    1.22 @@ -277,6 +289,34 @@
    1.23    m_maxPacketDuration = CalculateTxDuration (4095, WifiPhy::Get1mbb (), WIFI_PREAMBLE_LONG);
    1.24  }
    1.25  
    1.26 +void
    1.27 +InterferenceHelper::Configure80211_10MhzParameters (void)
    1.28 +{
    1.29 +  NS_LOG_FUNCTION (this);
    1.30 +  m_80211_standard = WIFI_PHY_STANDARD_80211_10Mhz;
    1.31 +  m_plcpLongPreambleDelayUs = 32;
    1.32 +  m_plcpShortPreambleDelayUs = 32;
    1.33 +  m_longPlcpHeaderMode = WifiPhy::Get3mb10Mhz ();
    1.34 +  m_shortPlcpHeaderMode = WifiPhy::Get3mb10Mhz ();
    1.35 +  m_plcpHeaderLength = 4 + 1 + 12 + 1 + 6;
    1.36 +  /* 4095 bytes at a 3Mb/s rate with a 1/2 coding rate. */
    1.37 +  m_maxPacketDuration = CalculateTxDuration (4095, WifiPhy::Get3mb10Mhz (), WIFI_PREAMBLE_LONG);
    1.38 +}
    1.39 +
    1.40 +void
    1.41 +InterferenceHelper::Configure80211_5MhzParameters (void)
    1.42 +{
    1.43 +  NS_LOG_FUNCTION (this);
    1.44 +  m_80211_standard = WIFI_PHY_STANDARD_80211_5Mhz;
    1.45 +  m_plcpLongPreambleDelayUs = 64;
    1.46 +  m_plcpShortPreambleDelayUs = 64;
    1.47 +  m_longPlcpHeaderMode = WifiPhy::Get1_5mb5Mhz ();
    1.48 +  m_shortPlcpHeaderMode = WifiPhy::Get1_5mb5Mhz ();
    1.49 +  m_plcpHeaderLength = 4 + 1 + 12 + 1 + 6;
    1.50 +  /* 4095 bytes at a 1.5Mb/s rate with a 1/2 coding rate. */
    1.51 +  m_maxPacketDuration = CalculateTxDuration (4095, WifiPhy::Get1_5mb5Mhz (), WIFI_PREAMBLE_LONG);
    1.52 +}
    1.53 +
    1.54  void 
    1.55  InterferenceHelper::AppendEvent (Ptr<InterferenceHelper::Event> event)
    1.56  {
     2.1 --- a/src/devices/wifi/interference-helper.h	Mon Jul 13 09:57:32 2009 +0200
     2.2 +++ b/src/devices/wifi/interference-helper.h	Mon Jul 13 14:30:12 2009 +0200
     2.3 @@ -71,6 +71,8 @@
     2.4  
     2.5    void Configure80211aParameters (void);
     2.6    void Configure80211bParameters (void);
     2.7 +  void Configure80211_10MhzParameters (void);
     2.8 +  void Configure80211_5MhzParameters (void);
     2.9    void SetNoiseFigure (double value);
    2.10    void SetErrorRateModel (Ptr<ErrorRateModel> rate);
    2.11  
     3.1 --- a/src/devices/wifi/wifi-mac.cc	Mon Jul 13 09:57:32 2009 +0200
     3.2 +++ b/src/devices/wifi/wifi-mac.cc	Mon Jul 13 14:30:12 2009 +0200
     3.3 @@ -117,6 +117,14 @@
     3.4  		   MakeSsidAccessor (&WifiMac::GetSsid,
     3.5  				     &WifiMac::SetSsid),
     3.6  		   MakeSsidChecker ())
     3.7 +    .AddAttribute ("Standard", "The standard chosen configures some MAC-specific constants",
     3.8 +                   EnumValue (WIFI_PHY_STANDARD_80211a),
     3.9 +                   MakeEnumAccessor (&WifiMac::SetStandard),
    3.10 +                   MakeEnumChecker (WIFI_PHY_STANDARD_80211a, "802.11a",
    3.11 +                                    WIFI_PHY_STANDARD_80211b, "802.11b",
    3.12 +                                    WIFI_PHY_STANDARD_80211_10Mhz,"802.11_10Mhz",
    3.13 +                                    WIFI_PHY_STANDARD_80211_5Mhz,"802-11_5Mhz",
    3.14 +                                    WIFI_PHY_STANDARD_holland, "holland"))
    3.15      .AddTraceSource ("MacTx", 
    3.16                       "A packet has been received from higher layers and is being processed in preparation for "
    3.17                       "queueing for transmission.",
    3.18 @@ -200,4 +208,74 @@
    3.19    m_macRxDropTrace (packet);
    3.20  }
    3.21  
    3.22 +void
    3.23 +WifiMac::SetStandard (enum WifiPhyStandard standard)
    3.24 +{
    3.25 +  m_standard = standard;
    3.26 +  switch (standard) {
    3.27 +  case WIFI_PHY_STANDARD_80211a:
    3.28 +    Configure80211a ();
    3.29 +    break;
    3.30 +  case WIFI_PHY_STANDARD_80211b:
    3.31 +    Configure80211b ();
    3.32 +    break;
    3.33 +  case WIFI_PHY_STANDARD_80211_10Mhz: 
    3.34 +    Configure80211_10Mhz ();
    3.35 +    break;
    3.36 +  case WIFI_PHY_STANDARD_80211_5Mhz:
    3.37 +    Configure80211_5Mhz ();
    3.38 +    break;
    3.39 +  case WIFI_PHY_STANDARD_holland:
    3.40 +    Configure80211a ();
    3.41 +    break;
    3.42 +  default:
    3.43 +    NS_ASSERT (false);
    3.44 +    break;
    3.45 +  }
    3.46 +}
    3.47 +
    3.48 +void
    3.49 +WifiMac::Configure80211a (void)
    3.50 +{
    3.51 +  SetSifs(MicroSeconds(16));
    3.52 +  SetSlot(MicroSeconds(9)); 
    3.53 +  SetEifsNoDifs(MicroSeconds(16+44));
    3.54 +  SetPifs(MicroSeconds(16+9));
    3.55 +  SetCtsTimeout(MicroSeconds(16+44+9+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2));
    3.56 +  SetAckTimeout(MicroSeconds(16+44+9+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2)); 
    3.57 +}
    3.58 +
    3.59 +void
    3.60 +WifiMac::Configure80211b (void)
    3.61 +{
    3.62 +  SetSifs(MicroSeconds(10));
    3.63 +  SetSlot(MicroSeconds(20));
    3.64 +  SetEifsNoDifs(MicroSeconds(10+304));
    3.65 +  SetPifs(MicroSeconds(10+20));
    3.66 +  SetCtsTimeout(MicroSeconds(10+304+20+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2));
    3.67 +  SetAckTimeout(MicroSeconds(10+304+20+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2)); 
    3.68 +}
    3.69 +
    3.70 +void
    3.71 +WifiMac::Configure80211_10Mhz (void)
    3.72 +{
    3.73 +  SetSifs(MicroSeconds(32));
    3.74 +  SetSlot(MicroSeconds(13)); 
    3.75 +  SetEifsNoDifs(MicroSeconds(32+88));
    3.76 +  SetPifs(MicroSeconds(32+13));
    3.77 +  SetCtsTimeout(MicroSeconds(32+88+13+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2));
    3.78 +  SetAckTimeout(MicroSeconds(32+88+13+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2)); 
    3.79 +}
    3.80 +
    3.81 +void
    3.82 +WifiMac::Configure80211_5Mhz (void)
    3.83 +{
    3.84 +  SetSifs(MicroSeconds(64));
    3.85 +  SetSlot(MicroSeconds(21));
    3.86 +  SetEifsNoDifs(MicroSeconds(64+176));
    3.87 +  SetPifs(MicroSeconds(64+21));
    3.88 +  SetCtsTimeout(MicroSeconds(64+176+21+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2));
    3.89 +  SetAckTimeout(MicroSeconds(64+176+21+GetDefaultMaxPropagationDelay().GetMicroSeconds ()*2)); 
    3.90 +}
    3.91 +
    3.92  } // namespace ns3
     4.1 --- a/src/devices/wifi/wifi-mac.h	Mon Jul 13 09:57:32 2009 +0200
     4.2 +++ b/src/devices/wifi/wifi-mac.h	Mon Jul 13 14:30:12 2009 +0200
     4.3 @@ -206,6 +206,10 @@
     4.4     * purposes.
     4.5     */
     4.6    void NotifyRxDrop (Ptr<const Packet> packet);
     4.7 +  /**
     4.8 +   * \param standard the wifi standard to be configured
     4.9 +   */
    4.10 +  void SetStandard (enum WifiPhyStandard standard);
    4.11  
    4.12  private:
    4.13    static Time GetDefaultMaxPropagationDelay (void);
    4.14 @@ -217,6 +221,12 @@
    4.15  
    4.16    Time m_maxPropagationDelay;
    4.17    uint32_t m_maxMsduSize;
    4.18 +  WifiPhyStandard m_standard;
    4.19 +
    4.20 +  void Configure80211a (void);
    4.21 +  void Configure80211b (void);
    4.22 +  void Configure80211_10Mhz (void);
    4.23 +  void Configure80211_5Mhz ();
    4.24  
    4.25    /**
    4.26     * The trace source fired when packets come into the "top" of the device
     5.1 --- a/src/devices/wifi/wifi-phy-standard.h	Mon Jul 13 09:57:32 2009 +0200
     5.2 +++ b/src/devices/wifi/wifi-phy-standard.h	Mon Jul 13 14:30:12 2009 +0200
     5.3 @@ -25,6 +25,8 @@
     5.4  enum WifiPhyStandard {
     5.5    WIFI_PHY_STANDARD_80211a,
     5.6    WIFI_PHY_STANDARD_80211b,
     5.7 +  WIFI_PHY_STANDARD_80211_10Mhz,
     5.8 +  WIFI_PHY_STANDARD_80211_5Mhz,
     5.9    WIFI_PHY_STANDARD_holland
    5.10  };
    5.11  
     6.1 --- a/src/devices/wifi/wifi-phy.cc	Mon Jul 13 09:57:32 2009 +0200
     6.2 +++ b/src/devices/wifi/wifi-phy.cc	Mon Jul 13 14:30:12 2009 +0200
     6.3 @@ -244,6 +244,150 @@
     6.4    return mode;
     6.5  }
     6.6  
     6.7 +WifiMode 
     6.8 +WifiPhy::Get3mb10Mhz (void)
     6.9 +{
    6.10 +  static WifiMode mode = WifiModeFactory::CreateBpsk ("wifi-3mbs-10Mhz",
    6.11 +                                                      true,
    6.12 +                                                      10000000, 3000000, 6000000);
    6.13 +  return mode;
    6.14 +}
    6.15 +
    6.16 +WifiMode 
    6.17 +WifiPhy::Get4_5mb10Mhz (void)
    6.18 +{
    6.19 +  static WifiMode mode = WifiModeFactory::CreateBpsk ("wifi-4.5mbs-10Mhz",
    6.20 +                                                      false,
    6.21 +                                                      10000000, 4500000, 6000000);
    6.22 +  return mode;
    6.23 +}
    6.24 +
    6.25 +WifiMode 
    6.26 +WifiPhy::Get6mb10Mhz (void)
    6.27 +{
    6.28 +  static WifiMode mode = WifiModeFactory::CreateBpsk ("wifi-6mbs-10Mhz",
    6.29 +                                                      true,
    6.30 +                                                      10000000, 6000000, 12000000);
    6.31 +  return mode;
    6.32 +}
    6.33 +
    6.34 +WifiMode 
    6.35 +WifiPhy::Get9mb10Mhz (void)
    6.36 +{
    6.37 +  static WifiMode mode = WifiModeFactory::CreateBpsk ("wifi-9mbs-10Mhz",
    6.38 +                                                      false,
    6.39 +                                                      10000000, 9000000, 12000000);
    6.40 +  return mode;
    6.41 +}
    6.42 +
    6.43 +WifiMode 
    6.44 +WifiPhy::Get12mb10Mhz (void)
    6.45 +{
    6.46 +  static WifiMode mode = WifiModeFactory::CreateBpsk ("wifi-12mbs-10Mhz",
    6.47 +                                                      true,
    6.48 +                                                      10000000, 12000000, 24000000);
    6.49 +  return mode;
    6.50 +}
    6.51 +
    6.52 +WifiMode 
    6.53 +WifiPhy::Get18mb10Mhz (void)
    6.54 +{
    6.55 +  static WifiMode mode = WifiModeFactory::CreateBpsk ("wifi-18mbs-10Mhz",
    6.56 +                                                      false,
    6.57 +                                                      10000000, 18000000, 24000000);
    6.58 +  return mode;
    6.59 +}
    6.60 +
    6.61 +WifiMode 
    6.62 +WifiPhy::Get24mb10Mhz (void)
    6.63 +{
    6.64 +  static WifiMode mode = WifiModeFactory::CreateBpsk ("wifi-24mbs-10Mhz",
    6.65 +                                                      false,
    6.66 +                                                      10000000, 24000000, 36000000);
    6.67 +  return mode;
    6.68 +}
    6.69 +
    6.70 +WifiMode 
    6.71 +WifiPhy::Get27mb10Mhz (void)
    6.72 +{
    6.73 +  static WifiMode mode = WifiModeFactory::CreateBpsk ("wifi-27mbs-10Mhz",
    6.74 +                                                      false,
    6.75 +                                                      10000000, 27000000, 36000000);
    6.76 +  return mode;
    6.77 +}
    6.78 +
    6.79 +WifiMode 
    6.80 +WifiPhy::Get1_5mb5Mhz (void)
    6.81 +{
    6.82 +  static WifiMode mode = WifiModeFactory::CreateBpsk ("wifi-1_5mbs-5Mhz",
    6.83 +                                                      true,
    6.84 +                                                      5000000, 1500000, 3000000);
    6.85 +  return mode;
    6.86 +}
    6.87 +
    6.88 +WifiMode 
    6.89 +WifiPhy::Get2_25mb5Mhz (void)
    6.90 +{
    6.91 +  static WifiMode mode = WifiModeFactory::CreateBpsk ("wifi-2.25mbs-5Mhz",
    6.92 +                                                      false,
    6.93 +                                                      5000000, 2250000, 3000000);
    6.94 +  return mode;
    6.95 +}
    6.96 +
    6.97 +WifiMode 
    6.98 +WifiPhy::Get3mb5Mhz (void)
    6.99 +{
   6.100 +  static WifiMode mode = WifiModeFactory::CreateBpsk ("wifi-3mbs-5Mhz",
   6.101 +                                                      true,
   6.102 +                                                      5000000, 3000000, 6000000);
   6.103 +  return mode;
   6.104 +}
   6.105 +
   6.106 +WifiMode 
   6.107 +WifiPhy::Get4_5mb5Mhz (void)
   6.108 +{
   6.109 +  static WifiMode mode = WifiModeFactory::CreateBpsk ("wifi-4.5mbs-5Mhz",
   6.110 +                                                      false,
   6.111 +                                                      5000000, 4500000, 6000000);
   6.112 +  return mode;
   6.113 +}
   6.114 +
   6.115 +WifiMode 
   6.116 +WifiPhy::Get6mb5Mhz (void)
   6.117 +{
   6.118 +  static WifiMode mode = WifiModeFactory::CreateBpsk ("wifi-6mbs-5Mhz",
   6.119 +                                                      true,
   6.120 +                                                      5000000, 6000000, 12000000);
   6.121 +  return mode;
   6.122 +}
   6.123 +
   6.124 +WifiMode 
   6.125 +WifiPhy::Get9mb5Mhz (void)
   6.126 +{
   6.127 +  static WifiMode mode = WifiModeFactory::CreateBpsk ("wifi-9mbs-5Mhz",
   6.128 +                                                      false,
   6.129 +                                                      10000000, 9000000, 12000000);
   6.130 +  return mode;
   6.131 +}
   6.132 +
   6.133 +WifiMode 
   6.134 +WifiPhy::Get12mb5Mhz (void)
   6.135 +{
   6.136 +  static WifiMode mode = WifiModeFactory::CreateBpsk ("wifi-12mbs-5Mhz",
   6.137 +                                                      false,
   6.138 +                                                      10000000, 12000000, 18000000);
   6.139 +  return mode;
   6.140 +}
   6.141 +
   6.142 +WifiMode 
   6.143 +WifiPhy::Get13_5mb5Mhz (void)
   6.144 +{
   6.145 +  static WifiMode mode = WifiModeFactory::CreateBpsk ("wifi-13.5mbs-5Mhz",
   6.146 +                                                      false,
   6.147 +                                                      10000000, 13500000, 18000000);
   6.148 +  return mode;
   6.149 +}
   6.150 +
   6.151  
   6.152  } // namespace ns3
   6.153  
   6.154 @@ -265,6 +409,22 @@
   6.155      ns3::WifiPhy::Get2mbb ();
   6.156      ns3::WifiPhy::Get5_5mbb ();
   6.157      ns3::WifiPhy::Get11mbb ();
   6.158 +    ns3::WifiPhy::Get3mb10Mhz ();
   6.159 +    ns3::WifiPhy::Get4_5mb10Mhz ();
   6.160 +    ns3::WifiPhy::Get6mb10Mhz ();
   6.161 +    ns3::WifiPhy::Get9mb10Mhz ();
   6.162 +    ns3::WifiPhy::Get12mb10Mhz ();
   6.163 +    ns3::WifiPhy::Get18mb10Mhz ();
   6.164 +    ns3::WifiPhy::Get24mb10Mhz ();
   6.165 +    ns3::WifiPhy::Get27mb10Mhz ();
   6.166 +    ns3::WifiPhy::Get1_5mb5Mhz ();
   6.167 +    ns3::WifiPhy::Get2_25mb5Mhz ();
   6.168 +    ns3::WifiPhy::Get3mb5Mhz ();
   6.169 +    ns3::WifiPhy::Get4_5mb5Mhz ();
   6.170 +    ns3::WifiPhy::Get6mb5Mhz ();
   6.171 +    ns3::WifiPhy::Get9mb5Mhz ();
   6.172 +    ns3::WifiPhy::Get12mb5Mhz ();
   6.173 +    ns3::WifiPhy::Get13_5mb5Mhz ();
   6.174    }
   6.175  } g_constructor;
   6.176  }
     7.1 --- a/src/devices/wifi/wifi-phy.h	Mon Jul 13 09:57:32 2009 +0200
     7.2 +++ b/src/devices/wifi/wifi-phy.h	Mon Jul 13 14:30:12 2009 +0200
     7.3 @@ -256,6 +256,22 @@
     7.4    static WifiMode Get2mbb (void);
     7.5    static WifiMode Get5_5mbb (void);
     7.6    static WifiMode Get11mbb (void);
     7.7 +  static WifiMode Get3mb10Mhz (void);
     7.8 +  static WifiMode Get4_5mb10Mhz (void);
     7.9 +  static WifiMode Get6mb10Mhz (void);
    7.10 +  static WifiMode Get9mb10Mhz (void);
    7.11 +  static WifiMode Get12mb10Mhz (void);
    7.12 +  static WifiMode Get18mb10Mhz (void);
    7.13 +  static WifiMode Get24mb10Mhz (void);
    7.14 +  static WifiMode Get27mb10Mhz (void);
    7.15 +  static WifiMode Get1_5mb5Mhz (void);
    7.16 +  static WifiMode Get2_25mb5Mhz (void);
    7.17 +  static WifiMode Get3mb5Mhz (void);
    7.18 +  static WifiMode Get4_5mb5Mhz (void);
    7.19 +  static WifiMode Get6mb5Mhz (void);
    7.20 +  static WifiMode Get9mb5Mhz (void);
    7.21 +  static WifiMode Get12mb5Mhz (void);
    7.22 +  static WifiMode Get13_5mb5Mhz (void);
    7.23  
    7.24  
    7.25    /**
     8.1 --- a/src/devices/wifi/yans-error-rate-model.cc	Mon Jul 13 09:57:32 2009 +0200
     8.2 +++ b/src/devices/wifi/yans-error-rate-model.cc	Mon Jul 13 14:30:12 2009 +0200
     8.3 @@ -176,7 +176,7 @@
     8.4  double 
     8.5  YansErrorRateModel::GetChunkSuccessRate (WifiMode mode, double snr, uint32_t nbits) const
     8.6  {
     8.7 -  if (mode == WifiPhy::Get6mba ())
     8.8 +  if (mode == WifiPhy::Get6mba () || mode == WifiPhy::Get3mb10Mhz () || mode == WifiPhy::Get1_5mb5Mhz ())
     8.9      {
    8.10        return GetFecBpskBer (snr, 
    8.11                              nbits,
    8.12 @@ -186,7 +186,7 @@
    8.13                              11 // adFree
    8.14                              );      
    8.15      }
    8.16 -  else if (mode == WifiPhy::Get9mba ())
    8.17 +  else if (mode == WifiPhy::Get9mba () || mode == WifiPhy::Get4_5mb10Mhz () || mode == WifiPhy::Get2_25mb5Mhz ())
    8.18      {
    8.19        return GetFecBpskBer (snr, 
    8.20                              nbits,
    8.21 @@ -196,7 +196,7 @@
    8.22                              8 // adFree
    8.23                              );
    8.24      }
    8.25 -  else if (mode == WifiPhy::Get12mba ())
    8.26 +  else if (mode == WifiPhy::Get12mba () || mode == WifiPhy::Get6mb10Mhz () || mode == WifiPhy::Get3mb5Mhz ())
    8.27      {
    8.28        return GetFecQamBer (snr, 
    8.29                             nbits,
    8.30 @@ -208,7 +208,7 @@
    8.31                             0   // adFreePlusOne
    8.32                             );
    8.33      }
    8.34 -  else if (mode == WifiPhy::Get18mba ())
    8.35 +  else if (mode == WifiPhy::Get18mba () || mode == WifiPhy::Get9mb10Mhz () || mode == WifiPhy::Get4_5mb5Mhz ())
    8.36      {
    8.37        return GetFecQamBer (snr, 
    8.38                             nbits,
    8.39 @@ -220,7 +220,7 @@
    8.40                             31 // adFreePlusOne
    8.41                             );
    8.42      }
    8.43 -  else if (mode == WifiPhy::Get24mba ())
    8.44 +  else if (mode == WifiPhy::Get24mba () || mode == WifiPhy::Get12mb10Mhz () || mode == WifiPhy::Get6mb5Mhz ())
    8.45      {
    8.46        return GetFecQamBer (snr, 
    8.47                             nbits,
    8.48 @@ -232,7 +232,7 @@
    8.49                             0   // adFreePlusOne
    8.50                             );
    8.51      }
    8.52 -  else if (mode == WifiPhy::Get36mba ())
    8.53 +  else if (mode == WifiPhy::Get36mba () || mode == WifiPhy::Get18mb10Mhz () || mode == WifiPhy::Get9mb5Mhz ())
    8.54      {
    8.55        return GetFecQamBer (snr, 
    8.56                             nbits,
    8.57 @@ -244,7 +244,7 @@
    8.58                             31  // adFreePlusOne
    8.59                             );
    8.60      }
    8.61 -  else if (mode == WifiPhy::Get48mba ())
    8.62 +  else if (mode == WifiPhy::Get48mba () || mode == WifiPhy::Get24mb10Mhz () || mode == WifiPhy::Get12mb5Mhz ())
    8.63      {
    8.64        return GetFecQamBer (snr, 
    8.65                             nbits,
    8.66 @@ -256,7 +256,7 @@
    8.67                             16  // adFreePlusOne
    8.68                             );
    8.69      }
    8.70 -  else if (mode == WifiPhy::Get54mba ())
    8.71 +  else if (mode == WifiPhy::Get54mba () || mode == WifiPhy::Get27mb10Mhz () || mode == WifiPhy::Get13_5mb5Mhz ())
    8.72      {
    8.73        return GetFecQamBer (snr, 
    8.74                             nbits,
     9.1 --- a/src/devices/wifi/yans-wifi-phy.cc	Mon Jul 13 09:57:32 2009 +0200
     9.2 +++ b/src/devices/wifi/yans-wifi-phy.cc	Mon Jul 13 14:30:12 2009 +0200
     9.3 @@ -111,6 +111,8 @@
     9.4                     MakeEnumAccessor (&YansWifiPhy::SetStandard),
     9.5                     MakeEnumChecker (WIFI_PHY_STANDARD_80211a, "802.11a",
     9.6                                      WIFI_PHY_STANDARD_80211b, "802.11b",
     9.7 +                                    WIFI_PHY_STANDARD_80211_10Mhz,"802.11_10Mhz",
     9.8 +                                    WIFI_PHY_STANDARD_80211_5Mhz,"802-11_5Mhz",
     9.9                                      WIFI_PHY_STANDARD_holland, "holland"))
    9.10      .AddAttribute ("State", "The state of the PHY layer",
    9.11                     PointerValue (),
    9.12 @@ -156,6 +158,12 @@
    9.13    case WIFI_PHY_STANDARD_80211b:
    9.14      Configure80211b ();
    9.15      break;
    9.16 +  case WIFI_PHY_STANDARD_80211_10Mhz: 
    9.17 +    Configure80211_10Mhz ();
    9.18 +    break;
    9.19 +  case WIFI_PHY_STANDARD_80211_5Mhz:
    9.20 +    Configure80211_5Mhz ();
    9.21 +    break;
    9.22    case WIFI_PHY_STANDARD_holland:
    9.23      ConfigureHolland ();
    9.24      break;
    9.25 @@ -461,6 +469,36 @@
    9.26  }
    9.27  
    9.28  void
    9.29 +YansWifiPhy::Configure80211_10Mhz (void)
    9.30 +{
    9.31 +  NS_LOG_FUNCTION (this);
    9.32 +  m_interference.Configure80211_10MhzParameters ();
    9.33 +  m_modes.push_back (WifiPhy::Get3mb10Mhz ());
    9.34 +  m_modes.push_back (WifiPhy::Get4_5mb10Mhz ());
    9.35 +  m_modes.push_back (WifiPhy::Get6mb10Mhz ());
    9.36 +  m_modes.push_back (WifiPhy::Get9mb10Mhz ());
    9.37 +  m_modes.push_back (WifiPhy::Get12mb10Mhz ());
    9.38 +  m_modes.push_back (WifiPhy::Get18mb10Mhz ());
    9.39 +  m_modes.push_back (WifiPhy::Get24mb10Mhz ());
    9.40 +  m_modes.push_back (WifiPhy::Get27mb10Mhz  ());
    9.41 +}
    9.42 +
    9.43 +void
    9.44 +YansWifiPhy::Configure80211_5Mhz (void)
    9.45 +{
    9.46 +  NS_LOG_FUNCTION (this);
    9.47 +  m_interference.Configure80211_5MhzParameters ();
    9.48 +  m_modes.push_back (WifiPhy::Get1_5mb5Mhz ());
    9.49 +  m_modes.push_back (WifiPhy::Get2_25mb5Mhz ());
    9.50 +  m_modes.push_back (WifiPhy::Get3mb5Mhz ());
    9.51 +  m_modes.push_back (WifiPhy::Get4_5mb5Mhz ());
    9.52 +  m_modes.push_back (WifiPhy::Get6mb5Mhz ());
    9.53 +  m_modes.push_back (WifiPhy::Get9mb5Mhz ());
    9.54 +  m_modes.push_back (WifiPhy::Get12mb5Mhz ());
    9.55 +  m_modes.push_back (WifiPhy::Get13_5mb5Mhz  ());
    9.56 +}
    9.57 +
    9.58 +void
    9.59  YansWifiPhy::ConfigureHolland (void)
    9.60  {
    9.61    NS_LOG_FUNCTION (this);
    10.1 --- a/src/devices/wifi/yans-wifi-phy.h	Mon Jul 13 09:57:32 2009 +0200
    10.2 +++ b/src/devices/wifi/yans-wifi-phy.h	Mon Jul 13 14:30:12 2009 +0200
    10.3 @@ -125,6 +125,8 @@
    10.4    virtual void DoDispose (void);
    10.5    void Configure80211a (void);
    10.6    void Configure80211b (void);
    10.7 +  void Configure80211_10Mhz (void);
    10.8 +  void Configure80211_5Mhz ();
    10.9    void ConfigureHolland (void);
   10.10    double GetEdThresholdW (void) const;
   10.11    double DbmToW (double dbm) const;