From 9fef12b95587ca82eca613fadab910cf83d585fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deronne?= Date: Fri, 12 Dec 2014 11:58:51 -0800 Subject: [PATCH] bug 1969: Support short guard interval durations in 802.11n --- src/wifi/model/wifi-phy.cc | 2 +- src/wifi/test/tx-duration-test.cc | 17 ++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/wifi/model/wifi-phy.cc b/src/wifi/model/wifi-phy.cc index ddf22ce54..80701c0e5 100644 --- a/src/wifi/model/wifi-phy.cc +++ b/src/wifi/model/wifi-phy.cc @@ -493,7 +493,7 @@ WifiPhy::CalculateTxDuration (uint32_t size, WifiTxVector txvector, WifiPreamble + GetPlcpHtSigHeaderDurationMicroSeconds (payloadMode, preamble) + GetPlcpHtTrainingSymbolDurationMicroSeconds (payloadMode, preamble,txvector) + GetPayloadDurationMicroSeconds (size, txvector, frequency); - return MicroSeconds (duration); + return NanoSeconds (duration*1000); } diff --git a/src/wifi/test/tx-duration-test.cc b/src/wifi/test/tx-duration-test.cc index d3ddab2f6..77ff0afad 100644 --- a/src/wifi/test/tx-duration-test.cc +++ b/src/wifi/test/tx-duration-test.cc @@ -46,7 +46,7 @@ private: * * @param size size of payload in octets (includes everything after the PLCP header) * @param payloadMode the WifiMode used - * @param knownDurationMicroSeconds the known payload size + * @param knownDurationMicroSeconds the known duration value of the transmission in microseconds * * @return true if values correspond, false otherwise */ @@ -59,7 +59,7 @@ private: * @param size size of payload in octets (includes everything after the PLCP header) * @param payloadMode the WifiMode used * @param preamble the WifiPreamble used - * @param knownDurationMicroSeconds the known value of the transmission + * @param knownDurationMicroSeconds the known duration value of the transmission in microseconds * * @return true if values correspond, false otherwise */ @@ -89,7 +89,7 @@ TxDurationTest::CheckPayloadDuration (uint32_t size, WifiMode payloadMode, uint3 { testedFrequency = CHANNEL_36_MHZ; } - uint32_t calculatedDurationMicroSeconds = WifiPhy::GetPayloadDurationMicroSeconds (size, txVector, testedFrequency); + double calculatedDurationMicroSeconds = WifiPhy::GetPayloadDurationMicroSeconds (size, txVector, testedFrequency); if (calculatedDurationMicroSeconds != knownDurationMicroSeconds) { std::cerr << " size=" << size @@ -131,7 +131,7 @@ TxDurationTest::CheckTxDuration (uint32_t size, WifiMode payloadMode, WifiPreamb { testedFrequency = CHANNEL_36_MHZ; } - double calculatedDurationMicroSeconds = WifiPhy::CalculateTxDuration (size, txVector, preamble, testedFrequency).GetMicroSeconds (); + double calculatedDurationMicroSeconds = ((double)WifiPhy::CalculateTxDuration (size, txVector, preamble, testedFrequency).GetNanoSeconds ())/1000; if (calculatedDurationMicroSeconds != knownDurationMicroSeconds) { std::cerr << " size=" << size @@ -146,7 +146,7 @@ TxDurationTest::CheckTxDuration (uint32_t size, WifiMode payloadMode, WifiPreamb { // Durations vary depending on frequency; test also 2.4 GHz (bug 1971) testedFrequency = CHANNEL_1_MHZ; - calculatedDurationMicroSeconds = WifiPhy::CalculateTxDuration (size, txVector, preamble, testedFrequency).GetMicroSeconds (); + calculatedDurationMicroSeconds = ((double)WifiPhy::CalculateTxDuration (size, txVector, preamble, testedFrequency).GetNanoSeconds ())/1000; if (calculatedDurationMicroSeconds != knownDurationMicroSeconds + 6) { std::cerr << " size=" << size @@ -245,10 +245,9 @@ TxDurationTest::DoRun (void) && CheckTxDuration (1536,WifiPhy::GetOfdmRate65MbpsBW20MHz (), WIFI_PREAMBLE_HT_MF,228) && CheckTxDuration (76, WifiPhy::GetOfdmRate65MbpsBW20MHz (), WIFI_PREAMBLE_HT_MF,48) && CheckTxDuration (14, WifiPhy::GetOfdmRate65MbpsBW20MHz (), WIFI_PREAMBLE_HT_MF,40 ) - //should be 218.8, 38,8 and 31.6 but microseconds are only represented as integers will have to change Time to change that - && CheckTxDuration (1536, WifiPhy::GetOfdmRate65MbpsBW20MHzShGi (), WIFI_PREAMBLE_HT_GF,218) - && CheckTxDuration (76, WifiPhy::GetOfdmRate65MbpsBW20MHzShGi (), WIFI_PREAMBLE_HT_GF,38) - && CheckTxDuration (14, WifiPhy::GetOfdmRate65MbpsBW20MHzShGi (), WIFI_PREAMBLE_HT_GF,31); + && CheckTxDuration (1536, WifiPhy::GetOfdmRate65MbpsBW20MHzShGi (), WIFI_PREAMBLE_HT_GF,218.8) + && CheckTxDuration (76, WifiPhy::GetOfdmRate65MbpsBW20MHzShGi (), WIFI_PREAMBLE_HT_GF,38.8) + && CheckTxDuration (14, WifiPhy::GetOfdmRate65MbpsBW20MHzShGi (), WIFI_PREAMBLE_HT_GF,31.6); NS_TEST_EXPECT_MSG_EQ (retval, true, "an 802.11n duration failed"); }