Left: | ||
Right: |
OLD | NEW |
---|---|
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ | 1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
2 /* | 2 /* |
3 * Copyright (c) 2009 Duy Nguyen | 3 * Copyright (c) 2009 Duy Nguyen |
4 * Copyright (c) 2015 Ghada Badawy | 4 * Copyright (c) 2015 Ghada Badawy |
5 * | 5 * |
6 * This program is free software; you can redistribute it and/or modify | 6 * This program is free software; you can redistribute it and/or modify |
7 * it under the terms of the GNU General Public License version 2 as | 7 * it under the terms of the GNU General Public License version 2 as |
8 * published by the Free Software Foundation; | 8 * published by the Free Software Foundation; |
9 * | 9 * |
10 * This program is distributed in the hope that it will be useful, | 10 * This program is distributed in the hope that it will be useful, |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
243 | 243 |
244 if (HasVhtSupported ()) | 244 if (HasVhtSupported ()) |
245 { | 245 { |
246 // Initialize all VHT groups | 246 // Initialize all VHT groups |
247 for (uint16_t chWidth = 20; chWidth <= MAX_VHT_WIDTH; chWidth *= 2) | 247 for (uint16_t chWidth = 20; chWidth <= MAX_VHT_WIDTH; chWidth *= 2) |
248 { | 248 { |
249 for (uint8_t sgi = 0; sgi <= 1; sgi++) | 249 for (uint8_t sgi = 0; sgi <= 1; sgi++) |
250 { | 250 { |
251 for (uint8_t streams = 1; streams <= MAX_SUPPORTED_STREAMS; st reams++) | 251 for (uint8_t streams = 1; streams <= MAX_SUPPORTED_STREAMS; st reams++) |
252 { | 252 { |
253 uint32_t groupId = GetVhtGroupId (streams, sgi, chWidth); | 253 uint8_t channelWidth = static_cast<uint8_t> (chWidth); |
254 uint32_t groupId = GetVhtGroupId (streams, sgi, channelWid th); | |
254 | 255 |
255 m_minstrelGroups[groupId].streams = streams; | 256 m_minstrelGroups[groupId].streams = streams; |
256 m_minstrelGroups[groupId].sgi = sgi; | 257 m_minstrelGroups[groupId].sgi = sgi; |
257 m_minstrelGroups[groupId].chWidth = chWidth; | 258 m_minstrelGroups[groupId].chWidth = channelWidth; |
258 m_minstrelGroups[groupId].isVht = true; | 259 m_minstrelGroups[groupId].isVht = true; |
259 m_minstrelGroups[groupId].isSupported = false; | 260 m_minstrelGroups[groupId].isSupported = false; |
260 | 261 |
261 // Check capabilities of the device | 262 // Check capabilities of the device |
262 if (!(!GetPhy ()->GetShortGuardInterval () && m_minstrelGr oups[groupId].sgi) ///Is SGI supported by the transmitter? | 263 if (!(!GetPhy ()->GetShortGuardInterval () && m_minstrelGr oups[groupId].sgi) ///Is SGI supported by the transmitter? |
263 && (GetPhy ()->GetChannelWidth () >= m_minstrelGroups[ groupId].chWidth) ///Is channel width supported by the transmitter ? | 264 && (GetPhy ()->GetChannelWidth () >= m_minstrelGroups[ groupId].chWidth) ///Is channel width supported by the transmitter ? |
264 && (GetPhy ()->GetMaxSupportedTxSpatialStreams () >= m _minstrelGroups[groupId].streams)) ///Are streams supported by the transmitter? | 265 && (GetPhy ()->GetMaxSupportedTxSpatialStreams () >= m _minstrelGroups[groupId].streams)) ///Are streams supported by the transmitter? |
265 { | 266 { |
266 m_minstrelGroups[groupId].isSupported = true; | 267 m_minstrelGroups[groupId].isSupported = true; |
267 | 268 |
268 // Calculate tx time for all rates of the group | 269 // Calculate tx time for all rates of the group |
269 WifiModeList vhtMcsList = GetVhtDeviceMcsList (); | 270 WifiModeList vhtMcsList = GetVhtDeviceMcsList (); |
270 for (uint8_t i = 0; i < MAX_VHT_GROUP_RATES; i++) | 271 for (uint8_t i = 0; i < MAX_VHT_GROUP_RATES; i++) |
271 { | 272 { |
272 WifiMode mode = vhtMcsList[i]; | 273 WifiMode mode = vhtMcsList[i]; |
273 // Check for invalid VHT MCSs and do not add time to array. | 274 // Check for invalid VHT MCSs and do not add time to array. |
274 if (IsValidMcs (GetPhy (), streams, chWidth, mode) ) | 275 if (IsValidMcs (GetPhy (), streams, channelWidth, mode)) |
275 { | 276 { |
276 AddFirstMpduTxTime (groupId, mode, CalculateFi rstMpduTxDuration (GetPhy (), streams, sgi, chWidth, mode)); | 277 AddFirstMpduTxTime (groupId, mode, CalculateFi rstMpduTxDuration (GetPhy (), streams, sgi, channelWidth, mode)); |
277 AddMpduTxTime (groupId, mode, CalculateMpduTxD uration (GetPhy (), streams, sgi, chWidth, mode)); | 278 AddMpduTxTime (groupId, mode, CalculateMpduTxD uration (GetPhy (), streams, sgi, channelWidth, mode)); |
278 } | 279 } |
279 } | 280 } |
280 NS_LOG_DEBUG ("Initialized group " << groupId << ": (" << +streams << "," << +sgi << "," << +chWidth << ")"); | 281 NS_LOG_DEBUG ("Initialized group " << groupId << ": (" << +streams << "," << +sgi << "," << +chWidth << ")"); |
281 } | 282 } |
282 } | 283 } |
283 } | 284 } |
284 } | 285 } |
285 } | 286 } |
286 } | 287 } |
287 } | 288 } |
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
825 station->m_samplePacketsCount += nSuccessfulMpdus + nFailedMpdus; | 826 station->m_samplePacketsCount += nSuccessfulMpdus + nFailedMpdus; |
826 } | 827 } |
827 if (station->m_totalPacketsCount == ~0) | 828 if (station->m_totalPacketsCount == ~0) |
828 { | 829 { |
829 station->m_samplePacketsCount = 0; | 830 station->m_samplePacketsCount = 0; |
830 station->m_totalPacketsCount = 0; | 831 station->m_totalPacketsCount = 0; |
831 } | 832 } |
832 | 833 |
833 if (!station->m_sampleWait && !station->m_sampleTries && station->m_sampleCoun t > 0) | 834 if (!station->m_sampleWait && !station->m_sampleTries && station->m_sampleCoun t > 0) |
834 { | 835 { |
835 station->m_sampleWait = 16 + 2 * station->m_avgAmpduLen; | 836 station->m_sampleWait = static_cast<uint32_t> (16 + 2 * station->m_avgAmpd uLen); |
836 station->m_sampleTries = 1; | 837 station->m_sampleTries = 1; |
837 station->m_sampleCount--; | 838 station->m_sampleCount--; |
838 } | 839 } |
839 } | 840 } |
840 | 841 |
841 WifiTxVector | 842 WifiTxVector |
842 MinstrelHtWifiManager::DoGetDataTxVector (WifiRemoteStation *st) | 843 MinstrelHtWifiManager::DoGetDataTxVector (WifiRemoteStation *st) |
843 { | 844 { |
844 NS_LOG_FUNCTION (this << st); | 845 NS_LOG_FUNCTION (this << st); |
845 MinstrelHtWifiRemoteStation *station = (MinstrelHtWifiRemoteStation *) st; | 846 MinstrelHtWifiRemoteStation *station = (MinstrelHtWifiRemoteStation *) st; |
(...skipping 14 matching lines...) Expand all Loading... | |
860 } | 861 } |
861 | 862 |
862 return vector; | 863 return vector; |
863 } | 864 } |
864 else | 865 else |
865 { | 866 { |
866 NS_LOG_DEBUG ("DoGetDataMode m_txrate= " << station->m_txrate); | 867 NS_LOG_DEBUG ("DoGetDataMode m_txrate= " << station->m_txrate); |
867 | 868 |
868 uint32_t rateId = GetRateId (station->m_txrate); | 869 uint32_t rateId = GetRateId (station->m_txrate); |
869 uint32_t groupId = GetGroupId (station->m_txrate); | 870 uint32_t groupId = GetGroupId (station->m_txrate); |
870 uint32_t mcsIndex = station->m_groupsTable[groupId].m_ratesTable[rateId].m csIndex; | 871 uint8_t mcsIndex = static_cast<uint8_t> (station->m_groupsTable[groupId].m _ratesTable[rateId].mcsIndex); |
871 | 872 |
872 NS_LOG_DEBUG ("DoGetDataMode rateId= " << rateId << " groupId= " << groupI d << " mode= " << GetMcsSupported (station, mcsIndex)); | 873 NS_LOG_DEBUG ("DoGetDataMode rateId= " << rateId << " groupId= " << groupI d << " mode= " << GetMcsSupported (station, mcsIndex)); |
873 | 874 |
874 McsGroup group = m_minstrelGroups[groupId]; | 875 McsGroup group = m_minstrelGroups[groupId]; |
875 | 876 |
876 // Check consistency of rate selected. | 877 // Check consistency of rate selected. |
877 if ((group.sgi && !GetShortGuardInterval (station)) || group.chWidth > Get ChannelWidth (station) || group.streams > GetNumberOfSupportedStreams (station )) | 878 if ((group.sgi && !GetShortGuardInterval (station)) || group.chWidth > Get ChannelWidth (station) || group.streams > GetNumberOfSupportedStreams (station )) |
878 { | 879 { |
879 NS_ASSERT_MSG (false, "Inconsistent group selected. Group: (" << +grou p.streams << | 880 NS_ASSERT_MSG (false, "Inconsistent group selected. Group: (" << +grou p.streams << |
880 "," << +group.sgi << "," << +group.chWidth << ")" << | 881 "," << +group.sgi << "," << +group.chWidth << ")" << |
881 " Station capabilities: (" << GetNumberOfSupportedStrea ms (station) << | 882 " Station capabilities: (" << GetNumberOfSupportedStrea ms (station) << |
882 "," << GetShortGuardInterval (station) << "," << GetCha nnelWidth (station) << ")"); | 883 "," << GetShortGuardInterval (station) << "," << GetCha nnelWidth (station) << ")"); |
883 } | 884 } |
884 | 885 |
885 uint64_t dataRate = GetMcsSupported (station, mcsIndex).GetDataRate (group .chWidth, group.sgi ? 400 : 800, group.streams); | 886 uint64_t dataRate = GetMcsSupported (station, mcsIndex).GetDataRate (group .chWidth, group.sgi ? 400 : 800, group.streams); |
886 if (!station->m_isSampling) | 887 if (!station->m_isSampling) |
887 { | 888 { |
888 m_rateChange (dataRate, station->m_state->m_address); | 889 m_rateChange (dataRate, station->m_state->m_address); |
889 } | 890 } |
890 WifiMode mode = GetMcsSupported (station, mcsIndex); | 891 WifiMode mode = GetMcsSupported (station, mcsIndex); |
891 return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransm ission (mode, GetAddress (station)), group.sgi ? 400 : 800, GetNumberOfAntennas (), group.streams, GetNess (station), GetChannelWidthForTransmission (mode, grou p.chWidth), GetAggregation (station) && !station->m_isSampling, false); | 892 return WifiTxVector (mode, GetDefaultTxPowerLevel (), GetPreambleForTransm ission (mode, GetAddress (station)), group.sgi ? 400 : 800, GetNumberOfAntennas (), group.streams, static_cast<uint8_t> (GetNess (station)), GetChannelWidthForT ransmission (mode, group.chWidth), GetAggregation (station) && !station->m_isSam pling, false); |
892 } | 893 } |
893 } | 894 } |
894 | 895 |
895 WifiTxVector | 896 WifiTxVector |
896 MinstrelHtWifiManager::DoGetRtsTxVector (WifiRemoteStation *st) | 897 MinstrelHtWifiManager::DoGetRtsTxVector (WifiRemoteStation *st) |
897 { | 898 { |
898 NS_LOG_FUNCTION (this << st); | 899 NS_LOG_FUNCTION (this << st); |
899 MinstrelHtWifiRemoteStation *station = (MinstrelHtWifiRemoteStation *) st; | 900 MinstrelHtWifiRemoteStation *station = (MinstrelHtWifiRemoteStation *) st; |
900 | 901 |
901 if (!station->m_initialized) | 902 if (!station->m_initialized) |
(...skipping 18 matching lines...) Expand all Loading... | |
920 * directed to the same receiving STA. If no rate in the BSSBasicRateSet p arameter meets | 921 * directed to the same receiving STA. If no rate in the BSSBasicRateSet p arameter meets |
921 * these conditions, the control frame shall be transmitted at a rate no h igher than the | 922 * these conditions, the control frame shall be transmitted at a rate no h igher than the |
922 * highest mandatory rate of the attached PHY that is less than or equal t o the rate | 923 * highest mandatory rate of the attached PHY that is less than or equal t o the rate |
923 * or non-HT reference rate (see 9.7.9) of the previously transmitted fram e that was | 924 * or non-HT reference rate (see 9.7.9) of the previously transmitted fram e that was |
924 * directed to the same receiving STA." | 925 * directed to the same receiving STA." |
925 */ | 926 */ |
926 | 927 |
927 // As we are in Minstrel HT, assume the last rate was an HT rate. | 928 // As we are in Minstrel HT, assume the last rate was an HT rate. |
928 uint32_t rateId = GetRateId (station->m_txrate); | 929 uint32_t rateId = GetRateId (station->m_txrate); |
929 uint32_t groupId = GetGroupId (station->m_txrate); | 930 uint32_t groupId = GetGroupId (station->m_txrate); |
930 uint32_t mcsIndex = station->m_groupsTable[groupId].m_ratesTable[rateId].m csIndex; | 931 uint8_t mcsIndex = static_cast<uint8_t> (station->m_groupsTable[groupId].m _ratesTable[rateId].mcsIndex); |
931 | 932 |
932 WifiMode lastRate = GetMcsSupported (station, mcsIndex); | 933 WifiMode lastRate = GetMcsSupported (station, mcsIndex); |
933 uint64_t lastDataRate = lastRate.GetNonHtReferenceRate (); | 934 uint64_t lastDataRate = lastRate.GetNonHtReferenceRate (); |
934 uint8_t nBasicRates = GetNBasicModes (); | 935 uint8_t nBasicRates = GetNBasicModes (); |
935 | 936 |
936 WifiMode rtsRate; | 937 WifiMode rtsRate; |
937 bool rateFound = false; | 938 bool rateFound = false; |
938 | 939 |
939 for (uint8_t i = 0; i < nBasicRates; i++) | 940 for (uint8_t i = 0; i < nBasicRates; i++) |
940 { | 941 { |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1225 station->m_groupsTable[j].m_maxTpRate = GetLowestIndex (station, j); | 1226 station->m_groupsTable[j].m_maxTpRate = GetLowestIndex (station, j); |
1226 station->m_groupsTable[j].m_maxTpRate2 = GetLowestIndex (station, j); | 1227 station->m_groupsTable[j].m_maxTpRate2 = GetLowestIndex (station, j); |
1227 station->m_groupsTable[j].m_maxProbRate = GetLowestIndex (station, j); | 1228 station->m_groupsTable[j].m_maxProbRate = GetLowestIndex (station, j); |
1228 | 1229 |
1229 for (uint8_t i = 0; i < m_numRates; i++) | 1230 for (uint8_t i = 0; i < m_numRates; i++) |
1230 { | 1231 { |
1231 if (station->m_groupsTable[j].m_ratesTable[i].supported) | 1232 if (station->m_groupsTable[j].m_ratesTable[i].supported) |
1232 { | 1233 { |
1233 station->m_groupsTable[j].m_ratesTable[i].retryUpdated = false ; | 1234 station->m_groupsTable[j].m_ratesTable[i].retryUpdated = false ; |
1234 | 1235 |
1235 NS_LOG_DEBUG (i << " " << GetMcsSupported (station, station-> m_groupsTable[j].m_ratesTable[i].mcsIndex) << | 1236 NS_LOG_DEBUG (i << " " << GetMcsSupported (station, static_ca st<uint8_t> (station->m_groupsTable[j].m_ratesTable[i].mcsIndex)) << |
S. Deronne
2018/03/30 06:56:54
My bad, I will change mcsIndex to uint8_t, I had f
| |
1236 "\t attempt=" << station->m_groupsTable[j].m_rat esTable[i].numRateAttempt << | 1237 "\t attempt=" << station->m_groupsTable[j].m_rat esTable[i].numRateAttempt << |
1237 "\t success=" << station->m_groupsTable[j].m_rat esTable[i].numRateSuccess); | 1238 "\t success=" << station->m_groupsTable[j].m_rat esTable[i].numRateSuccess); |
1238 | 1239 |
1239 /// If we've attempted something. | 1240 /// If we've attempted something. |
1240 if (station->m_groupsTable[j].m_ratesTable[i].numRateAttempt > 0) | 1241 if (station->m_groupsTable[j].m_ratesTable[i].numRateAttempt > 0) |
1241 { | 1242 { |
1242 station->m_groupsTable[j].m_ratesTable[i].numSamplesSkippe d = 0; | 1243 station->m_groupsTable[j].m_ratesTable[i].numSamplesSkippe d = 0; |
1243 /** | 1244 /** |
1244 * Calculate the probability of success. | 1245 * Calculate the probability of success. |
1245 * Assume probability scales from 0 to 100. | 1246 * Assume probability scales from 0 to 100. |
1246 */ | 1247 */ |
1247 tempProb = (100 * station->m_groupsTable[j].m_ratesTable[i ].numRateSuccess) / station->m_groupsTable[j].m_ratesTable[i].numRateAttempt; | 1248 tempProb = (100 * station->m_groupsTable[j].m_ratesTable[i ].numRateSuccess) / station->m_groupsTable[j].m_ratesTable[i].numRateAttempt; |
1248 | 1249 |
1249 /// Bookeeping. | 1250 /// Bookeeping. |
1250 station->m_groupsTable[j].m_ratesTable[i].prob = tempProb; | 1251 station->m_groupsTable[j].m_ratesTable[i].prob = tempProb; |
1251 | 1252 |
1252 if (station->m_groupsTable[j].m_ratesTable[i].successHist == 0) | 1253 if (station->m_groupsTable[j].m_ratesTable[i].successHist == 0) |
1253 { | 1254 { |
1254 station->m_groupsTable[j].m_ratesTable[i].ewmaProb = t empProb; | 1255 station->m_groupsTable[j].m_ratesTable[i].ewmaProb = t empProb; |
1255 } | 1256 } |
1256 else | 1257 else |
1257 { | 1258 { |
1258 station->m_groupsTable[j].m_ratesTable[i].ewmsdProb = CalculateEwmsd (station->m_groupsTable[j].m_ratesTable[i].ewmsdProb, | 1259 station->m_groupsTable[j].m_ratesTable[i].ewmsdProb = CalculateEwmsd (station->m_groupsTable[j].m_ratesTable[i].ewmsdProb, |
1259 tempProb, station->m_groupsTable[j].m_ratesTable[i].ewmaProb, | 1260 tempProb, station->m_groupsTable[j].m_ratesTable[i].ewmaProb, |
1260 m_ewmaLevel); | 1261 static_cast<uint32_t> (m_ewmaLevel)); |
S. Deronne
2018/03/30 06:56:54
change fct signature of move m_ewmaLevel as uint32
ammo6818-vandals.uidaho.edu
2018/04/05 17:51:01
changed called function parameter to double
| |
1261 /// EWMA probability | 1262 /// EWMA probability |
1262 tempProb = (tempProb * (100 - m_ewmaLevel) + station-> m_groupsTable[j].m_ratesTable[i].ewmaProb * m_ewmaLevel) / 100; | 1263 tempProb = (tempProb * (100 - m_ewmaLevel) + station-> m_groupsTable[j].m_ratesTable[i].ewmaProb * m_ewmaLevel) / 100; |
1263 station->m_groupsTable[j].m_ratesTable[i].ewmaProb = t empProb; | 1264 station->m_groupsTable[j].m_ratesTable[i].ewmaProb = t empProb; |
1264 } | 1265 } |
1265 | 1266 |
1266 station->m_groupsTable[j].m_ratesTable[i].throughput = Cal culateThroughput (station, j, i, tempProb); | 1267 station->m_groupsTable[j].m_ratesTable[i].throughput = Cal culateThroughput (station, j, i, tempProb); |
1267 | 1268 |
1268 station->m_groupsTable[j].m_ratesTable[i].successHist += s tation->m_groupsTable[j].m_ratesTable[i].numRateSuccess; | 1269 station->m_groupsTable[j].m_ratesTable[i].successHist += s tation->m_groupsTable[j].m_ratesTable[i].numRateSuccess; |
1269 station->m_groupsTable[j].m_ratesTable[i].attemptHist += s tation->m_groupsTable[j].m_ratesTable[i].numRateAttempt; | 1270 station->m_groupsTable[j].m_ratesTable[i].attemptHist += s tation->m_groupsTable[j].m_ratesTable[i].numRateAttempt; |
1270 } | 1271 } |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1563 | 1564 |
1564 if (station->m_groupsTable[groupId].m_ratesTable[rateId].ewmaProb < 1) | 1565 if (station->m_groupsTable[groupId].m_ratesTable[rateId].ewmaProb < 1) |
1565 { | 1566 { |
1566 station->m_groupsTable[groupId].m_ratesTable[rateId].retryCount = 1; | 1567 station->m_groupsTable[groupId].m_ratesTable[rateId].retryCount = 1; |
1567 } | 1568 } |
1568 else | 1569 else |
1569 { | 1570 { |
1570 station->m_groupsTable[groupId].m_ratesTable[rateId].retryCount = 2; | 1571 station->m_groupsTable[groupId].m_ratesTable[rateId].retryCount = 2; |
1571 station->m_groupsTable[groupId].m_ratesTable[rateId].retryUpdated = true; | 1572 station->m_groupsTable[groupId].m_ratesTable[rateId].retryUpdated = true; |
1572 | 1573 |
1573 dataTxTime = GetFirstMpduTxTime (groupId, GetMcsSupported (station, statio n->m_groupsTable[groupId].m_ratesTable[rateId].mcsIndex)) + | 1574 uint8_t mcsIndex = static_cast<uint8_t> (station->m_groupsTable[groupId].m _ratesTable[rateId].mcsIndex); |
1574 GetMpduTxTime (groupId, GetMcsSupported (station, station->m_groupsTable [groupId].m_ratesTable[rateId].mcsIndex)) * (station->m_avgAmpduLen - 1); | 1575 |
1576 dataTxTime = GetFirstMpduTxTime (groupId, GetMcsSupported (station, mcsInd ex)) + | |
1577 GetMpduTxTime (groupId, GetMcsSupported (station, mcsIndex)) * static_ca st<int64_t> ((station->m_avgAmpduLen - 1)); | |
1575 | 1578 |
1576 /* Contention time for first 2 tries */ | 1579 /* Contention time for first 2 tries */ |
1577 cwTime = (cw / 2) * slotTime; | 1580 cwTime = (cw / 2) * slotTime; |
1578 cw = Min ((cw + 1) * 2, cwMax); | 1581 cw = Min ((cw + 1) * 2, cwMax); |
1579 cwTime += (cw / 2) * slotTime; | 1582 cwTime += (cw / 2) * slotTime; |
1580 cw = Min ((cw + 1) * 2, cwMax); | 1583 cw = Min ((cw + 1) * 2, cwMax); |
1581 | 1584 |
1582 /* Total TX time for data and Contention after first 2 tries */ | 1585 /* Total TX time for data and Contention after first 2 tries */ |
1583 txTime = cwTime + 2 * (dataTxTime + ackTime); | 1586 txTime = cwTime + 2 * (dataTxTime + ackTime); |
1584 | 1587 |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1727 of << std::setw (4) << " MCS" << (group.streams - 1) * 8 + i; | 1730 of << std::setw (4) << " MCS" << (group.streams - 1) * 8 + i; |
1728 } | 1731 } |
1729 else | 1732 else |
1730 { | 1733 { |
1731 of << std::setw (7) << " MCS" << i << "/" << (int) group.streams ; | 1734 of << std::setw (7) << " MCS" << i << "/" << (int) group.streams ; |
1732 } | 1735 } |
1733 | 1736 |
1734 of << " " << std::setw (3) << idx << " "; | 1737 of << " " << std::setw (3) << idx << " "; |
1735 | 1738 |
1736 /* tx_time[rate(i)] in usec */ | 1739 /* tx_time[rate(i)] in usec */ |
1737 txTime = GetFirstMpduTxTime (groupId, GetMcsSupported (station, statio n->m_groupsTable[groupId].m_ratesTable[i].mcsIndex)); | 1740 txTime = GetFirstMpduTxTime (groupId, GetMcsSupported (station, static _cast<uint8_t> (station->m_groupsTable[groupId].m_ratesTable[i].mcsIndex))); |
1738 of << std::setw (6) << txTime.GetMicroSeconds () << " "; | 1741 of << std::setw (6) << txTime.GetMicroSeconds () << " "; |
1739 | 1742 |
1740 of << std::setw (7) << CalculateThroughput (station, groupId, i, 100) / 100 << " " << | 1743 of << std::setw (7) << CalculateThroughput (station, groupId, i, 100) / 100 << " " << |
1741 std::setw (7) << station->m_groupsTable[groupId].m_ratesTable[i].thr oughput / 100 << " " << | 1744 std::setw (7) << station->m_groupsTable[groupId].m_ratesTable[i].thr oughput / 100 << " " << |
1742 std::setw (7) << station->m_groupsTable[groupId].m_ratesTable[i].ewm aProb << " " << | 1745 std::setw (7) << station->m_groupsTable[groupId].m_ratesTable[i].ewm aProb << " " << |
1743 std::setw (7) << station->m_groupsTable[groupId].m_ratesTable[i].ewm sdProb << " " << | 1746 std::setw (7) << station->m_groupsTable[groupId].m_ratesTable[i].ewm sdProb << " " << |
1744 std::setw (7) << station->m_groupsTable[groupId].m_ratesTable[i].pro b << " " << | 1747 std::setw (7) << station->m_groupsTable[groupId].m_ratesTable[i].pro b << " " << |
1745 std::setw (2) << station->m_groupsTable[groupId].m_ratesTable[i].ret ryCount << " " << | 1748 std::setw (2) << station->m_groupsTable[groupId].m_ratesTable[i].ret ryCount << " " << |
1746 std::setw (3) << station->m_groupsTable[groupId].m_ratesTable[i].pre vNumRateSuccess << " " << | 1749 std::setw (3) << station->m_groupsTable[groupId].m_ratesTable[i].pre vNumRateSuccess << " " << |
1747 std::setw (3) << station->m_groupsTable[groupId].m_ratesTable[i].pre vNumRateAttempt << " " << | 1750 std::setw (3) << station->m_groupsTable[groupId].m_ratesTable[i].pre vNumRateAttempt << " " << |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1858 MinstrelHtWifiManager::SetHeSupported (bool enable) | 1861 MinstrelHtWifiManager::SetHeSupported (bool enable) |
1859 { | 1862 { |
1860 //HE is not supported yet by this algorithm. | 1863 //HE is not supported yet by this algorithm. |
1861 if (enable) | 1864 if (enable) |
1862 { | 1865 { |
1863 NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support HE rat es"); | 1866 NS_FATAL_ERROR ("WifiRemoteStationManager selected does not support HE rat es"); |
1864 } | 1867 } |
1865 } | 1868 } |
1866 | 1869 |
1867 } // namespace ns3 | 1870 } // namespace ns3 |
OLD | NEW |