View | Details | Raw Unified | Return to bug 2296
Collapse All | Expand All

(-)a/src/wifi/model/ap-wifi-mac.cc (-2 / +2 lines)
 Lines 374-380    Link Here 
374
            }
374
            }
375
          capabilities.SetRxMcsBitmask (mcs.GetMcsValue ());
375
          capabilities.SetRxMcsBitmask (mcs.GetMcsValue ());
376
          uint8_t nss = (mcs.GetMcsValue () / 8) + 1;
376
          uint8_t nss = (mcs.GetMcsValue () / 8) + 1;
377
          NS_ASSERT (nss > 0 && nss < 4);
377
          NS_ASSERT (nss > 0 && nss < 5);
378
          if (mcs.GetDataRate (m_phy->GetChannelWidth (), m_phy->GetGuardInterval (), nss) > maxSupportedRate)
378
          if (mcs.GetDataRate (m_phy->GetChannelWidth (), m_phy->GetGuardInterval (), nss) > maxSupportedRate)
379
            {
379
            {
380
              maxSupportedRate = mcs.GetDataRate (m_phy->GetChannelWidth (), m_phy->GetGuardInterval (), nss);
380
              maxSupportedRate = mcs.GetDataRate (m_phy->GetChannelWidth (), m_phy->GetGuardInterval (), nss);
 Lines 727-733    Link Here 
727
                  if (m_htSupported)
727
                  if (m_htSupported)
728
                    {
728
                    {
729
                      HtCapabilities htcapabilities = assocReq.GetHtCapabilities ();
729
                      HtCapabilities htcapabilities = assocReq.GetHtCapabilities ();
730
                      m_stationManager->AddStationHtCapabilities (from,htcapabilities);
730
                      m_stationManager->AddStationHtCapabilities (from, htcapabilities);
731
                      for (uint32_t j = 0; j < m_phy->GetNMcs (); j++)
731
                      for (uint32_t j = 0; j < m_phy->GetNMcs (); j++)
732
                        {
732
                        {
733
                          WifiMode mcs = m_phy->GetMcs (j);
733
                          WifiMode mcs = m_phy->GetMcs (j);
(-)a/src/wifi/model/constant-rate-wifi-manager.cc (-1 / +1 lines)
 Lines 117-123    Link Here 
117
ConstantRateWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
117
ConstantRateWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
118
{
118
{
119
  NS_LOG_FUNCTION (this << st << size);
119
  NS_LOG_FUNCTION (this << st << size);
120
  return WifiTxVector (m_dataMode, GetDefaultTxPowerLevel (), GetLongRetryCount (st), GetShortGuardInterval (st), 1, 0, GetChannelWidth (st), GetAggregation (st), false);
120
  return WifiTxVector (m_dataMode, GetDefaultTxPowerLevel (), GetLongRetryCount (st), GetShortGuardInterval (st), Min(GetNumberOfTransmitAntennas (), GetNumberOfSupportedRxAntennas (st)), 0, GetChannelWidth (st), GetAggregation (st), false);
121
}
121
}
122
122
123
WifiTxVector
123
WifiTxVector
(-)a/src/wifi/model/ht-capabilities.cc (-1 / +17 lines)
 Lines 237-243    Link Here 
237
}
237
}
238
238
239
bool
239
bool
240
HtCapabilities::IsSupportedMcs (uint8_t mcs)
240
HtCapabilities::IsSupportedMcs (uint8_t mcs) const
241
{
241
{
242
  if (m_rxMcsBitmask[mcs] == 1)
242
  if (m_rxMcsBitmask[mcs] == 1)
243
    {
243
    {
 Lines 246-251    Link Here 
246
  return false;
246
  return false;
247
}
247
}
248
248
249
uint8_t
250
HtCapabilities::GetRxHighestSupportedAntennas (void) const
251
{
252
  for (uint8_t nRx = 2; nRx <= 4; nRx++)
253
  {
254
    for (uint8_t mcs = (nRx - 1) * 8; mcs <= ((7 * nRx) + (nRx - 1)); mcs++)
255
    {
256
      if (IsSupportedMcs (mcs) == false)
257
        {
258
          return (nRx - 1);
259
        }
260
    }
261
  }
262
  return 4;
263
}
264
249
uint16_t
265
uint16_t
250
HtCapabilities::GetRxHighestSupportedDataRate (void) const
266
HtCapabilities::GetRxHighestSupportedDataRate (void) const
251
{
267
{
(-)a/src/wifi/model/ht-capabilities.h (-1 / +2 lines)
 Lines 156-162    Link Here 
156
  uint8_t GetMaxAmpduLength (void) const;
156
  uint8_t GetMaxAmpduLength (void) const;
157
157
158
  uint8_t* GetRxMcsBitmask ();
158
  uint8_t* GetRxMcsBitmask ();
159
  bool IsSupportedMcs (uint8_t mcs);
159
  bool IsSupportedMcs (uint8_t mcs) const;
160
  uint8_t GetRxHighestSupportedAntennas (void) const;
160
  uint16_t GetRxHighestSupportedDataRate (void) const;
161
  uint16_t GetRxHighestSupportedDataRate (void) const;
161
  uint8_t GetTxMcsSetDefined (void) const;
162
  uint8_t GetTxMcsSetDefined (void) const;
162
  uint8_t GetTxMaxNSpatialStreams (void) const;
163
  uint8_t GetTxMaxNSpatialStreams (void) const;
(-)a/src/wifi/model/sta-wifi-mac.cc (-2 / +2 lines)
 Lines 586-592    Link Here 
586
              if (m_htSupported)
586
              if (m_htSupported)
587
                {
587
                {
588
                  HtCapabilities htcapabilities = assocResp.GetHtCapabilities ();
588
                  HtCapabilities htcapabilities = assocResp.GetHtCapabilities ();
589
                  m_stationManager->AddStationHtCapabilities (hdr->GetAddr2 (),htcapabilities);
589
                  m_stationManager->AddStationHtCapabilities (hdr->GetAddr2 (), htcapabilities);
590
                }
590
                }
591
              if (m_vhtSupported)
591
              if (m_vhtSupported)
592
                {
592
                {
 Lines 708-714    Link Here 
708
            }
708
            }
709
          capabilities.SetRxMcsBitmask (mcs.GetMcsValue ());
709
          capabilities.SetRxMcsBitmask (mcs.GetMcsValue ());
710
          uint8_t nss = (mcs.GetMcsValue () / 8) + 1;
710
          uint8_t nss = (mcs.GetMcsValue () / 8) + 1;
711
          NS_ASSERT (nss > 0 && nss < 4);
711
          NS_ASSERT (nss > 0 && nss < 5);
712
          if (mcs.GetDataRate (m_phy->GetChannelWidth (), m_phy->GetGuardInterval (), nss) > maxSupportedRate)
712
          if (mcs.GetDataRate (m_phy->GetChannelWidth (), m_phy->GetGuardInterval (), nss) > maxSupportedRate)
713
            {
713
            {
714
              maxSupportedRate = mcs.GetDataRate (m_phy->GetChannelWidth (), m_phy->GetGuardInterval (), nss);
714
              maxSupportedRate = mcs.GetDataRate (m_phy->GetChannelWidth (), m_phy->GetGuardInterval (), nss);
(-)a/src/wifi/model/wifi-mode.cc (-8 / +7 lines)
 Lines 108-118    Link Here 
108
{
108
{
109
  struct WifiModeFactory::WifiModeItem *item = WifiModeFactory::GetFactory ()->Get (m_uid);
109
  struct WifiModeFactory::WifiModeItem *item = WifiModeFactory::GetFactory ()->Get (m_uid);
110
  uint64_t dataRate = 0;
110
  uint64_t dataRate = 0;
111
  if (nss > 1)
112
    {
113
      NS_FATAL_ERROR ("MIMO is not supported");
114
      return 0;
115
    }
116
  if (item->modClass == WIFI_MOD_CLASS_DSSS)
111
  if (item->modClass == WIFI_MOD_CLASS_DSSS)
117
    {
112
    {
118
      dataRate = (11000000 / 11) * log2 (GetConstellationSize (nss));
113
      dataRate = (11000000 / 11) * log2 (GetConstellationSize (nss));
 Lines 164-175    Link Here 
164
    }
159
    }
165
  else if (item->modClass == WIFI_MOD_CLASS_HT || item->modClass == WIFI_MOD_CLASS_VHT)
160
  else if (item->modClass == WIFI_MOD_CLASS_HT || item->modClass == WIFI_MOD_CLASS_VHT)
166
    {
161
    {
167
      if (item->modClass == WIFI_MOD_CLASS_VHT && item->mcsValue == 9)
162
      if (item->modClass == WIFI_MOD_CLASS_VHT && item->mcsValue == 9 && nss != 3)
168
        {
163
        {
169
          //VHT MCS 9 forbidden at 20 MHz
164
          //VHT MCS 9 forbidden at 20 MHz (only allowed when NSS = 3)
170
          NS_ASSERT (channelWidth != 20);
165
          NS_ASSERT (channelWidth != 20);
171
        }
166
        }
172
167
      if (item->modClass == WIFI_MOD_CLASS_VHT && item->mcsValue == 6 && nss == 3)
168
        {
169
          //VHT MCS 6 forbidden at 80 MHz when NSS = 3
170
          NS_ASSERT (channelWidth != 80);
171
        }
173
      double symbolRate;
172
      double symbolRate;
174
      if (!isShortGuardInterval)
173
      if (!isShortGuardInterval)
175
        {
174
        {
(-)a/src/wifi/model/wifi-phy.cc (-6 / +104 lines)
 Lines 513-528    Link Here 
513
          }
513
          }
514
514
515
        //check tables 20-35 and 20-36 in the .11n standard to get cases when nes = 2
515
        //check tables 20-35 and 20-36 in the .11n standard to get cases when nes = 2
516
        //check tables 22-30 to 22-61 in the .11ac standard to get cases when nes > 1
516
        double Nes = 1;
517
        double Nes;
517
        if (payloadMode.GetUniqueName () == "HtMcs21"
518
        if (txVector.GetChannelWidth () == 160
518
           || payloadMode.GetUniqueName () == "HtMcs22"
519
            && (payloadMode.GetUniqueName () == "VhtMcs7" || payloadMode.GetUniqueName () == "VhtMcs8" || payloadMode.GetUniqueName () == "VhtMcs9"))
519
           || payloadMode.GetUniqueName () == "HtMcs23"
520
           || payloadMode.GetUniqueName () == "HtMcs28"
521
           || payloadMode.GetUniqueName () == "HtMcs29"
522
           || payloadMode.GetUniqueName () == "HtMcs30"
523
           || payloadMode.GetUniqueName () == "HtMcs31")
520
          {
524
          {
521
            Nes = 2;
525
            Nes = 2;
522
          }
526
          }
523
        else
527
        //check tables 22-30 to 22-61 in the .11ac standard to get cases when nes > 1
528
        //todo: improve logic to reduce the number of if cases
529
        //todo: extend to NSS > 4 for VHT rates
530
        if (txVector.GetChannelWidth () == 40
531
            && txVector.GetNss () == 3
532
            && payloadMode.GetMcsValue () >= 8)
524
          {
533
          {
525
            Nes = 1;
534
            Nes = 2;
535
          }
536
        if (txVector.GetChannelWidth () == 80
537
            && txVector.GetNss () == 2
538
            && payloadMode.GetMcsValue () >= 7)
539
          {
540
            Nes = 2;
541
          }
542
        if (txVector.GetChannelWidth () == 80
543
            && txVector.GetNss () == 3
544
            && payloadMode.GetMcsValue () >= 7)
545
          {
546
            Nes = 2;
547
          }
548
        if (txVector.GetChannelWidth () == 80
549
            && txVector.GetNss () == 3
550
            && payloadMode.GetMcsValue () == 9)
551
          {
552
            Nes = 3;
553
          }
554
        if (txVector.GetChannelWidth () == 80
555
            && txVector.GetNss () == 4
556
            && payloadMode.GetMcsValue () >= 4)
557
          {
558
            Nes = 2;
559
          }
560
        if (txVector.GetChannelWidth () == 80
561
            && txVector.GetNss () == 4
562
            && payloadMode.GetMcsValue () >= 7)
563
          {
564
            Nes = 3;
565
          }
566
        if (txVector.GetChannelWidth () == 160
567
            && payloadMode.GetMcsValue () >= 7)
568
          {
569
            Nes = 2;
570
          }
571
        if (txVector.GetChannelWidth () == 160
572
            && txVector.GetNss () == 2
573
            && payloadMode.GetMcsValue () >= 4)
574
          {
575
            Nes = 2;
576
          }
577
        if (txVector.GetChannelWidth () == 160
578
            && txVector.GetNss () == 2
579
            && payloadMode.GetMcsValue () >= 7)
580
          {
581
            Nes = 3;
582
          }
583
        if (txVector.GetChannelWidth () == 160
584
            && txVector.GetNss () == 3
585
            && payloadMode.GetMcsValue () >= 3)
586
          {
587
            Nes = 2;
588
          }
589
        if (txVector.GetChannelWidth () == 160
590
            && txVector.GetNss () == 3
591
            && payloadMode.GetMcsValue () >= 5)
592
          {
593
            Nes = 3;
594
          }
595
        if (txVector.GetChannelWidth () == 160
596
            && txVector.GetNss () == 3
597
            && payloadMode.GetMcsValue () >= 7)
598
          {
599
            Nes = 4;
600
          }
601
        if (txVector.GetChannelWidth () == 160
602
            && txVector.GetNss () == 4
603
            && payloadMode.GetMcsValue () >= 2)
604
          {
605
            Nes = 2;
606
          }
607
        if (txVector.GetChannelWidth () == 160
608
            && txVector.GetNss () == 4
609
            && payloadMode.GetMcsValue () >= 4)
610
          {
611
            Nes = 3;
612
          }
613
        if (txVector.GetChannelWidth () == 160
614
            && txVector.GetNss () == 4
615
            && payloadMode.GetMcsValue () >= 5)
616
          {
617
            Nes = 4;
618
          }
619
        if (txVector.GetChannelWidth () == 160
620
            && txVector.GetNss () == 4
621
            && payloadMode.GetMcsValue () >= 7)
622
          {
623
            Nes = 6;
526
          }
624
          }
527
625
528
        //IEEE Std 802.11n, section 20.3.11, equation (20-32)
626
        //IEEE Std 802.11n, section 20.3.11, equation (20-32)
(-)a/src/wifi/model/wifi-remote-station-manager.cc (+8 lines)
 Lines 1326-1331    Link Here 
1326
  state->m_shortGuardInterval = m_wifiPhy->GetGuardInterval ();
1326
  state->m_shortGuardInterval = m_wifiPhy->GetGuardInterval ();
1327
  state->m_greenfield = m_wifiPhy->GetGreenfield ();
1327
  state->m_greenfield = m_wifiPhy->GetGreenfield ();
1328
  state->m_shortPreamble = m_wifiPhy->GetShortPlcpPreamble ();
1328
  state->m_shortPreamble = m_wifiPhy->GetShortPlcpPreamble ();
1329
  state->m_rx = 1;
1329
  state->m_ness = 0;
1330
  state->m_ness = 0;
1330
  state->m_aggregation = false;
1331
  state->m_aggregation = false;
1331
  state->m_stbc = false;
1332
  state->m_stbc = false;
 Lines 1389-1394    Link Here 
1389
      state->m_channelWidth = 20;
1390
      state->m_channelWidth = 20;
1390
    }
1391
    }
1391
  state->m_greenfield = htCapabilities.GetGreenfield ();
1392
  state->m_greenfield = htCapabilities.GetGreenfield ();
1393
  state->m_rx = htCapabilities.GetRxHighestSupportedAntennas ();
1392
}
1394
}
1393
1395
1394
void
1396
void
 Lines 1603-1608    Link Here 
1603
  return station->m_state->m_stbc;
1605
  return station->m_state->m_stbc;
1604
}
1606
}
1605
1607
1608
uint8_t
1609
WifiRemoteStationManager::GetNumberOfSupportedRxAntennas (const WifiRemoteStation *station) const
1610
{
1611
  return station->m_state->m_rx;
1612
}
1613
1606
uint32_t
1614
uint32_t
1607
WifiRemoteStationManager::GetNess (const WifiRemoteStation *station) const
1615
WifiRemoteStationManager::GetNess (const WifiRemoteStation *station) const
1608
{
1616
{
(-)a/src/wifi/model/wifi-remote-station-manager.h (+9 lines)
 Lines 738-743    Link Here 
738
   */
738
   */
739
  bool GetShortPreamble (const WifiRemoteStation *station) const;
739
  bool GetShortPreamble (const WifiRemoteStation *station) const;
740
  /**
740
  /**
741
   * Return the number of receive antennas the station has.
742
   *
743
   * \param station the station being queried
744
   *
745
   * \return the number of receive antennas the station has
746
   */
747
  uint8_t GetNumberOfSupportedRxAntennas (const WifiRemoteStation *station) const;
748
  /**
741
   * \returns the number of Ness the station has.
749
   * \returns the number of Ness the station has.
742
   *
750
   *
743
   * \param station the station being queried
751
   * \param station the station being queried
 Lines 1118-1123    Link Here 
1118
1126
1119
  uint32_t m_channelWidth;    //!< Channel width (in MHz) supported by the remote station
1127
  uint32_t m_channelWidth;    //!< Channel width (in MHz) supported by the remote station
1120
  bool m_shortGuardInterval;  //!< Flag if short guard interval is supported by the remote station
1128
  bool m_shortGuardInterval;  //!< Flag if short guard interval is supported by the remote station
1129
  uint8_t m_rx;               //!< Number of supported RX streams by the remote station
1121
  uint32_t m_ness;            //!< Number of streams in beamforming of the remote station
1130
  uint32_t m_ness;            //!< Number of streams in beamforming of the remote station
1122
  bool m_stbc;                //!< Flag if STBC is used by the remote station
1131
  bool m_stbc;                //!< Flag if STBC is used by the remote station
1123
  bool m_aggregation;         //!< Flag if MPDU aggregation is used by the remote station
1132
  bool m_aggregation;         //!< Flag if MPDU aggregation is used by the remote station
(-)a/src/wifi/model/yans-wifi-phy.cc (-5 / +71 lines)
 Lines 131-144    Link Here 
131
                   MakeUintegerAccessor (&YansWifiPhy::GetFrequency,
131
                   MakeUintegerAccessor (&YansWifiPhy::GetFrequency,
132
                                         &YansWifiPhy::SetFrequency),
132
                                         &YansWifiPhy::SetFrequency),
133
                   MakeUintegerChecker<uint32_t> ())
133
                   MakeUintegerChecker<uint32_t> ())
134
    .AddAttribute ("Transmitters",
134
    .AddAttribute ("TxAntennas",
135
                   "The number of transmitters.",
135
                   "The number of supported Tx antennas.",
136
                   UintegerValue (1),
136
                   UintegerValue (1),
137
                   MakeUintegerAccessor (&YansWifiPhy::GetNumberOfTransmitAntennas,
137
                   MakeUintegerAccessor (&YansWifiPhy::GetNumberOfTransmitAntennas,
138
                                         &YansWifiPhy::SetNumberOfTransmitAntennas),
138
                                         &YansWifiPhy::SetNumberOfTransmitAntennas),
139
                   MakeUintegerChecker<uint32_t> ())
139
                   MakeUintegerChecker<uint32_t> ())
140
    .AddAttribute ("Receivers",
140
    .AddAttribute ("RxAntennas",
141
                   "The number of receivers.",
141
                   "The number of supported Rx antennas.",
142
                   UintegerValue (1),
142
                   UintegerValue (1),
143
                   MakeUintegerAccessor (&YansWifiPhy::GetNumberOfReceiveAntennas,
143
                   MakeUintegerAccessor (&YansWifiPhy::GetNumberOfReceiveAntennas,
144
                                         &YansWifiPhy::SetNumberOfReceiveAntennas),
144
                                         &YansWifiPhy::SetNumberOfReceiveAntennas),
 Lines 997-1002    Link Here 
997
  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs5 ());
997
  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs5 ());
998
  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs6 ());
998
  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs6 ());
999
  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs7 ());
999
  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs7 ());
1000
  if (GetNumberOfTransmitAntennas () > 1)
1001
  {
1002
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs8 ());
1003
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs9 ());
1004
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs10 ());
1005
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs11 ());
1006
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs12 ());
1007
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs13 ());
1008
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs14 ());
1009
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs15 ());
1010
  }
1011
  if (GetNumberOfTransmitAntennas () > 2)
1012
  {
1013
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs16 ());
1014
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs17 ());
1015
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs18 ());
1016
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs19 ());
1017
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs20 ());
1018
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs21 ());
1019
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs22 ());
1020
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs23 ());
1021
  }
1022
  if (GetNumberOfTransmitAntennas () > 3)
1023
  {
1024
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs24 ());
1025
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs25 ());
1026
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs26 ());
1027
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs27 ());
1028
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs28 ());
1029
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs29 ());
1030
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs30 ());
1031
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs31 ());
1032
  }
1000
1033
1001
  m_bssMembershipSelectorSet.push_back (HT_PHY);
1034
  m_bssMembershipSelectorSet.push_back (HT_PHY);
1002
}
1035
}
 Lines 1020-1026    Link Here 
1020
  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs5 ());
1053
  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs5 ());
1021
  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs6 ());
1054
  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs6 ());
1022
  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs7 ());
1055
  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs7 ());
1023
1056
  if (GetNumberOfTransmitAntennas () > 1)
1057
  {
1058
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs8 ());
1059
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs9 ());
1060
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs10 ());
1061
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs11 ());
1062
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs12 ());
1063
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs13 ());
1064
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs14 ());
1065
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs15 ());
1066
  }
1067
  if (GetNumberOfTransmitAntennas () > 2)
1068
  {
1069
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs16 ());
1070
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs17 ());
1071
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs18 ());
1072
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs19 ());
1073
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs20 ());
1074
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs21 ());
1075
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs22 ());
1076
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs23 ());
1077
  }
1078
  if (GetNumberOfTransmitAntennas () > 3)
1079
  {
1080
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs24 ());
1081
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs25 ());
1082
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs26 ());
1083
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs27 ());
1084
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs28 ());
1085
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs29 ());
1086
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs30 ());
1087
    m_deviceMcsSet.push_back (WifiPhy::GetHtMcs31 ());
1088
  }
1089
  
1024
  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs0 ());
1090
  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs0 ());
1025
  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs1 ());
1091
  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs1 ());
1026
  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs2 ());
1092
  m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs2 ());

Return to bug 2296