From b611bb30ec3d951302aa4e7e52670738f146bbf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deronne?= Date: Sat, 10 Aug 2024 15:46:58 +0200 Subject: [PATCH] wifi: Fix example left unadjusted when introducing WifiPhy::ChannelSettings attribute --- src/wifi/examples/wifi-trans-example.cc | 64 +++++++++++++++++-------- 1 file changed, 43 insertions(+), 21 deletions(-) diff --git a/src/wifi/examples/wifi-trans-example.cc b/src/wifi/examples/wifi-trans-example.cc index 81ec1ca0f..dee9c504c 100644 --- a/src/wifi/examples/wifi-trans-example.cc +++ b/src/wifi/examples/wifi-trans-example.cc @@ -53,7 +53,7 @@ SendPacket(Ptr sourceDevice, Address& destination) int main(int argc, char** argv) { - std::string standard = "11a"; + std::string standardStr = "11a"; int bw = 20; double pow = 23; // dBm bool verbose = false; @@ -61,7 +61,7 @@ main(int argc, char** argv) cmd.AddValue("standard", "OFDM-based Wi-Fi standard [11a, 11p_10MHZ, 11p_5MHZ, 11n_2_4GHZ, 11n_5GHZ, 11ac, " "11ax_2_4GHZ, 11ax_5GHZ]", - standard); + standardStr); cmd.AddValue("bw", "Bandwidth (consistent with standard, in MHz)", bw); cmd.AddValue("txPower", "Transmit power (dBm)", pow); cmd.AddValue("verbose", @@ -77,9 +77,14 @@ main(int argc, char** argv) MicroSeconds(800); // leaving enough time for beacon and association procedure Time dataDuration = MicroSeconds(300); // leaving enough time for data transfer (+ acknowledgment) - if (standard == "11a") + WifiStandard standard{WifiStandard::WIFI_STANDARD_UNSPECIFIED}; + WifiPhyBand phyBand{WIFI_PHY_BAND_UNSPECIFIED}; + std::string channelBand; + if (standardStr == "11a") { - wifi.SetStandard(WIFI_STANDARD_80211a); + standard = WIFI_STANDARD_80211a; + phyBand = WIFI_PHY_BAND_5GHZ; + channelBand = "BAND_5GHZ"; ssid = Ssid("ns380211a"); dataRate = "OfdmRate6Mbps"; freq = 5180; @@ -89,9 +94,11 @@ main(int argc, char** argv) return 1; } } - else if (standard == "11p_10MHZ") + else if (standardStr == "11p_10MHZ") { - wifi.SetStandard(WIFI_STANDARD_80211p); + standard = WIFI_STANDARD_80211p; + phyBand = WIFI_PHY_BAND_5GHZ; + channelBand = "BAND_5GHZ"; ssid = Ssid("ns380211p_10MHZ"); dataRate = "OfdmRate3MbpsBW10MHz"; freq = 5860; @@ -103,9 +110,11 @@ main(int argc, char** argv) return 1; } } - else if (standard == "11p_5MHZ") + else if (standardStr == "11p_5MHZ") { - wifi.SetStandard(WIFI_STANDARD_80211p); + standard = WIFI_STANDARD_80211p; + phyBand = WIFI_PHY_BAND_5GHZ; + channelBand = "BAND_5GHZ"; ssid = Ssid("ns380211p_5MHZ"); dataRate = "OfdmRate1_5MbpsBW5MHz"; freq = 5860; @@ -117,9 +126,11 @@ main(int argc, char** argv) return 1; } } - else if (standard == "11n_2_4GHZ") + else if (standardStr == "11n_2_4GHZ") { - wifi.SetStandard(WIFI_STANDARD_80211n); + standard = WIFI_STANDARD_80211n; + phyBand = WIFI_PHY_BAND_2_4GHZ; + channelBand = "BAND_2_4GHZ"; ssid = Ssid("ns380211n_2_4GHZ"); dataRate = "HtMcs0"; freq = 2402 + (bw / 2); // so as to have 2412/2422 for 20/40 @@ -131,9 +142,11 @@ main(int argc, char** argv) return 1; } } - else if (standard == "11n_5GHZ") + else if (standardStr == "11n_5GHZ") { - wifi.SetStandard(WIFI_STANDARD_80211n); + standard = WIFI_STANDARD_80211n; + phyBand = WIFI_PHY_BAND_5GHZ; + channelBand = "BAND_5GHZ"; ssid = Ssid("ns380211n_5GHZ"); dataRate = "HtMcs0"; freq = 5170 + (bw / 2); // so as to have 5180/5190 for 20/40 @@ -144,9 +157,11 @@ main(int argc, char** argv) return 1; } } - else if (standard == "11ac") + else if (standardStr == "11ac") { - wifi.SetStandard(WIFI_STANDARD_80211ac); + standard = WIFI_STANDARD_80211ac; + phyBand = WIFI_PHY_BAND_5GHZ; + channelBand = "BAND_5GHZ"; ssid = Ssid("ns380211ac"); dataRate = "VhtMcs0"; freq = 5170 + (bw / 2); // so as to have 5180/5190/5210/5250 for 20/40/80/160 @@ -158,9 +173,11 @@ main(int argc, char** argv) return 1; } } - else if (standard == "11ax_2_4GHZ") + else if (standardStr == "11ax_2_4GHZ") { - wifi.SetStandard(WIFI_STANDARD_80211ax); + standard = WIFI_STANDARD_80211ax; + phyBand = WIFI_PHY_BAND_2_4GHZ; + channelBand = "BAND_2_4GHZ"; ssid = Ssid("ns380211ax_2_4GHZ"); dataRate = "HeMcs0"; freq = 2402 + (bw / 2); // so as to have 2412/2422/2442 for 20/40/80 @@ -172,9 +189,11 @@ main(int argc, char** argv) return 1; } } - else if (standard == "11ax_5GHZ") + else if (standardStr == "11ax_5GHZ") { - wifi.SetStandard(WIFI_STANDARD_80211ax); + standard = WIFI_STANDARD_80211ax; + phyBand = WIFI_PHY_BAND_5GHZ; + channelBand = "BAND_5GHZ"; ssid = Ssid("ns380211ax_5GHZ"); dataRate = "HeMcs0"; freq = 5170 + (bw / 2); // so as to have 5180/5190/5210/5250 for 20/40/80/160 @@ -226,12 +245,15 @@ main(int argc, char** argv) SpectrumWifiPhyHelper spectrumPhy; spectrumPhy.SetChannel(channel); spectrumPhy.SetErrorRateModel("ns3::NistErrorRateModel"); - spectrumPhy.Set("Frequency", UintegerValue(freq)); - spectrumPhy.Set("ChannelWidth", UintegerValue(bw)); spectrumPhy.Set("TxPowerStart", DoubleValue(pow)); // dBm spectrumPhy.Set("TxPowerEnd", DoubleValue(pow)); + auto channelNumber = WifiPhyOperatingChannel::FindFirst(0, freq, bw, standard, phyBand)->number; + std::ostringstream channelSettings; + channelSettings << "{" << +channelNumber << ", " << bw << ", " << channelBand << ", 0}"; + spectrumPhy.Set("ChannelSettings", StringValue(channelSettings.str())); WifiMacHelper mac; + wifi.SetStandard(standard); wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager", "DataMode", StringValue(dataRate), @@ -285,7 +307,7 @@ main(int argc, char** argv) TimeValue(MicroSeconds(4))); // enough resolution to distinguish OFDM symbols (default 1ms // too long even for PPDUs) std::ostringstream ossFileName; - ossFileName << "spectrum-analyzer-wifi-" << standard << "-" << bw << "MHz"; + ossFileName << "spectrum-analyzer-wifi-" << standardStr << "-" << bw << "MHz"; spectrumAnalyzerHelper.EnableAsciiAll(ossFileName.str()); NetDeviceContainer spectrumAnalyzerDevices = spectrumAnalyzerHelper.Install(spectrumAnalyzerNodes);