diff --git a/examples/wireless/wifi-dsss-validation.cc b/examples/wireless/wifi-dsss-validation.cc index 23dcea37f..5c6c0ac0a 100644 --- a/examples/wireless/wifi-dsss-validation.cc +++ b/examples/wireless/wifi-dsss-validation.cc @@ -35,7 +35,7 @@ using namespace ns3; int main(int argc, char* argv[]) { - uint32_t FrameSize = 1500; // bytes + uint32_t frameSizeBytes = 1500; std::ofstream file("frame-success-rate-dsss.plt"); const std::vector modes{ @@ -46,7 +46,7 @@ main(int argc, char* argv[]) }; CommandLine cmd(__FILE__); - cmd.AddValue("FrameSize", "The frame size in bytes", FrameSize); + cmd.AddValue("FrameSize", "The frame size in bytes", frameSizeBytes); cmd.Parse(argc, argv); Gnuplot plot = Gnuplot("frame-success-rate-dsss.eps"); @@ -56,27 +56,27 @@ main(int argc, char* argv[]) Ptr table = CreateObject(); WifiTxVector txVector; - for (uint32_t i = 0; i < modes.size(); i++) - { - std::cout << modes[i] << std::endl; - Gnuplot2dDataset dataset(modes[i]); - txVector.SetMode(modes[i]); + uint32_t frameSizeBits = frameSizeBytes * 8; - for (double snr = -10.0; snr <= 20.0; snr += 0.1) + for (const auto& mode : modes) + { + std::cout << mode << std::endl; + Gnuplot2dDataset dataset(mode); + txVector.SetMode(mode); + + WifiMode wifiMode(mode); + + for (double snrDb = -10.0; snrDb <= 20.0; snrDb += 0.1) { - double psYans = yans->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - FrameSize * 8); + double snr = std::pow(10.0, snrDb / 10.0); + + double psYans = yans->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits); if (psYans < 0.0 || psYans > 1.0) { // error exit(1); } - double psNist = nist->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - FrameSize * 8); + double psNist = nist->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits); if (psNist < 0.0 || psNist > 1.0) { std::cout << psNist << std::endl; @@ -87,10 +87,7 @@ main(int argc, char* argv[]) { exit(1); } - double psTable = table->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - FrameSize * 8); + double psTable = table->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits); if (psTable < 0.0 || psTable > 1.0) { std::cout << psTable << std::endl; @@ -101,7 +98,7 @@ main(int argc, char* argv[]) { exit(1); } - dataset.Add(snr, psYans); + dataset.Add(snrDb, psYans); } plot.AddDataset(dataset); diff --git a/examples/wireless/wifi-error-models-comparison.cc b/examples/wireless/wifi-error-models-comparison.cc index 01259408b..03bd46988 100644 --- a/examples/wireless/wifi-error-models-comparison.cc +++ b/examples/wireless/wifi-error-models-comparison.cc @@ -86,66 +86,61 @@ main(int argc, char* argv[]) mode << format << "Mcs" << +endMcs; modes.push_back(mode.str()); - for (uint32_t i = 0; i < modes.size(); i++) + for (const auto& mode : modes) { - std::cout << modes[i] << std::endl; - Gnuplot2dDataset yansdataset(modes[i]); - Gnuplot2dDataset nistdataset(modes[i]); - Gnuplot2dDataset tabledataset(modes[i]); - txVector.SetMode(modes[i]); + std::cout << mode << std::endl; + Gnuplot2dDataset yansdataset(mode); + Gnuplot2dDataset nistdataset(mode); + Gnuplot2dDataset tabledataset(mode); + txVector.SetMode(mode); - for (double snr = -5.0; snr <= (endMcs * 5); snr += 0.1) + WifiMode wifiMode(mode); + + for (double snrDb = -5.0; snrDb <= (endMcs * 5); snrDb += 0.1) { - double ps = yans->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - size); + double snr = std::pow(10.0, snrDb / 10.0); + + double ps = yans->GetChunkSuccessRate(wifiMode, txVector, snr, size); if (ps < 0 || ps > 1) { // error exit(1); } - yansdataset.Add(snr, 1 - ps); - ps = nist->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - size); + yansdataset.Add(snrDb, 1 - ps); + ps = nist->GetChunkSuccessRate(wifiMode, txVector, snr, size); if (ps < 0 || ps > 1) { // error exit(1); } - nistdataset.Add(snr, 1 - ps); - ps = table->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - size); + nistdataset.Add(snrDb, 1 - ps); + ps = table->GetChunkSuccessRate(wifiMode, txVector, snr, size); if (ps < 0 || ps > 1) { // error exit(1); } - tabledataset.Add(snr, 1 - ps); + tabledataset.Add(snrDb, 1 - ps); } if (tableErrorModelEnabled) { std::stringstream ss; - ss << "Table-" << modes[i]; + ss << "Table-" << mode; tabledataset.SetTitle(ss.str()); plot.AddDataset(tabledataset); } if (yansErrorModelEnabled) { std::stringstream ss; - ss << "Yans-" << modes[i]; + ss << "Yans-" << mode; yansdataset.SetTitle(ss.str()); plot.AddDataset(yansdataset); } if (nistErrorModelEnabled) { std::stringstream ss; - ss << "Nist-" << modes[i]; + ss << "Nist-" << mode; nistdataset.SetTitle(ss.str()); plot.AddDataset(nistdataset); } diff --git a/examples/wireless/wifi-ofdm-eht-validation.cc b/examples/wireless/wifi-ofdm-eht-validation.cc index 266ba1d11..38098b929 100644 --- a/examples/wireless/wifi-ofdm-eht-validation.cc +++ b/examples/wireless/wifi-ofdm-eht-validation.cc @@ -37,7 +37,7 @@ using namespace ns3; int main(int argc, char* argv[]) { - uint32_t FrameSize = 1500; // bytes + uint32_t frameSizeBytes = 1500; std::ofstream yansfile("yans-frame-success-rate-be.plt"); std::ofstream nistfile("nist-frame-success-rate-be.plt"); std::ofstream tablefile("table-frame-success-rate-be.plt"); @@ -60,7 +60,7 @@ main(int argc, char* argv[]) }; CommandLine cmd(__FILE__); - cmd.AddValue("FrameSize", "The frame size", FrameSize); + cmd.AddValue("FrameSize", "The frame size", frameSizeBytes); cmd.Parse(argc, argv); Gnuplot yansplot = Gnuplot("yans-frame-success-rate-be.eps"); @@ -72,48 +72,45 @@ main(int argc, char* argv[]) Ptr table = CreateObject(); WifiTxVector txVector; - for (uint32_t i = 0; i < modes.size(); i++) + uint32_t frameSizeBits = frameSizeBytes * 8; + + for (const auto& mode : modes) { - std::cout << modes[i] << std::endl; - Gnuplot2dDataset yansdataset(modes[i]); - Gnuplot2dDataset nistdataset(modes[i]); - Gnuplot2dDataset tabledataset(modes[i]); - txVector.SetMode(modes[i]); + std::cout << mode << std::endl; + Gnuplot2dDataset yansdataset(mode); + Gnuplot2dDataset nistdataset(mode); + Gnuplot2dDataset tabledataset(mode); + txVector.SetMode(mode); - for (double snr = -5.0; snr <= 55.0; snr += 0.1) + WifiMode wifiMode(mode); + + for (double snrDb = -5.0; snrDb <= 55.0; snrDb += 0.1) { - double ps = yans->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - FrameSize * 8); - if (ps < 0.0 || ps > 1.0) - { - // error - exit(1); - } - yansdataset.Add(snr, ps); + double snr = std::pow(10.0, snrDb / 10.0); - ps = nist->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - FrameSize * 8); + double ps = yans->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits); if (ps < 0.0 || ps > 1.0) { // error exit(1); } - nistdataset.Add(snr, ps); + yansdataset.Add(snrDb, ps); - ps = table->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - FrameSize * 8); + ps = nist->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits); if (ps < 0.0 || ps > 1.0) { // error exit(1); } - tabledataset.Add(snr, ps); + nistdataset.Add(snrDb, ps); + + ps = table->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits); + if (ps < 0.0 || ps > 1.0) + { + // error + exit(1); + } + tabledataset.Add(snrDb, ps); } yansplot.AddDataset(yansdataset); diff --git a/examples/wireless/wifi-ofdm-he-validation.cc b/examples/wireless/wifi-ofdm-he-validation.cc index 24a71353b..67d6fc8da 100644 --- a/examples/wireless/wifi-ofdm-he-validation.cc +++ b/examples/wireless/wifi-ofdm-he-validation.cc @@ -35,7 +35,7 @@ using namespace ns3; int main(int argc, char* argv[]) { - uint32_t FrameSize = 1500; // bytes + uint32_t frameSizeBytes = 1500; std::ofstream yansfile("yans-frame-success-rate-ax.plt"); std::ofstream nistfile("nist-frame-success-rate-ax.plt"); std::ofstream tablefile("table-frame-success-rate-ax.plt"); @@ -56,7 +56,7 @@ main(int argc, char* argv[]) }; CommandLine cmd(__FILE__); - cmd.AddValue("FrameSize", "The frame size", FrameSize); + cmd.AddValue("FrameSize", "The frame size", frameSizeBytes); cmd.Parse(argc, argv); Gnuplot yansplot = Gnuplot("yans-frame-success-rate-ax.eps"); @@ -68,48 +68,45 @@ main(int argc, char* argv[]) Ptr table = CreateObject(); WifiTxVector txVector; - for (uint32_t i = 0; i < modes.size(); i++) + uint32_t frameSizeBits = frameSizeBytes * 8; + + for (const auto& mode : modes) { - std::cout << modes[i] << std::endl; - Gnuplot2dDataset yansdataset(modes[i]); - Gnuplot2dDataset nistdataset(modes[i]); - Gnuplot2dDataset tabledataset(modes[i]); - txVector.SetMode(modes[i]); + std::cout << mode << std::endl; + Gnuplot2dDataset yansdataset(mode); + Gnuplot2dDataset nistdataset(mode); + Gnuplot2dDataset tabledataset(mode); + txVector.SetMode(mode); - for (double snr = -5.0; snr <= 40.0; snr += 0.1) + WifiMode wifiMode(mode); + + for (double snrDb = -5.0; snrDb <= 40.0; snrDb += 0.1) { - double ps = yans->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - FrameSize * 8); - if (ps < 0.0 || ps > 1.0) - { - // error - exit(1); - } - yansdataset.Add(snr, ps); + double snr = std::pow(10.0, snrDb / 10.0); - ps = nist->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - FrameSize * 8); + double ps = yans->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits); if (ps < 0.0 || ps > 1.0) { // error exit(1); } - nistdataset.Add(snr, ps); + yansdataset.Add(snrDb, ps); - ps = table->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - FrameSize * 8); + ps = nist->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits); if (ps < 0.0 || ps > 1.0) { // error exit(1); } - tabledataset.Add(snr, ps); + nistdataset.Add(snrDb, ps); + + ps = table->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits); + if (ps < 0.0 || ps > 1.0) + { + // error + exit(1); + } + tabledataset.Add(snrDb, ps); } yansplot.AddDataset(yansdataset); diff --git a/examples/wireless/wifi-ofdm-ht-validation.cc b/examples/wireless/wifi-ofdm-ht-validation.cc index 92a431d24..5cc01a874 100644 --- a/examples/wireless/wifi-ofdm-ht-validation.cc +++ b/examples/wireless/wifi-ofdm-ht-validation.cc @@ -35,7 +35,7 @@ using namespace ns3; int main(int argc, char* argv[]) { - uint32_t FrameSize = 1500; // bytes + uint32_t frameSizeBytes = 1500; std::ofstream yansfile("yans-frame-success-rate-n.plt"); std::ofstream nistfile("nist-frame-success-rate-n.plt"); std::ofstream tablefile("table-frame-success-rate-n.plt"); @@ -52,7 +52,7 @@ main(int argc, char* argv[]) }; CommandLine cmd(__FILE__); - cmd.AddValue("FrameSize", "The frame size in bytes", FrameSize); + cmd.AddValue("FrameSize", "The frame size in bytes", frameSizeBytes); cmd.Parse(argc, argv); Gnuplot yansplot = Gnuplot("yans-frame-success-rate-n.eps"); @@ -64,48 +64,45 @@ main(int argc, char* argv[]) Ptr nist = CreateObject(); Ptr table = CreateObject(); - for (uint32_t i = 0; i < modes.size(); i++) + uint32_t frameSizeBits = frameSizeBytes * 8; + + for (const auto& mode : modes) { - std::cout << modes[i] << std::endl; - Gnuplot2dDataset yansdataset(modes[i]); - Gnuplot2dDataset nistdataset(modes[i]); - Gnuplot2dDataset tabledataset(modes[i]); - txVector.SetMode(modes[i]); + std::cout << mode << std::endl; + Gnuplot2dDataset yansdataset(mode); + Gnuplot2dDataset nistdataset(mode); + Gnuplot2dDataset tabledataset(mode); + txVector.SetMode(mode); - for (double snr = -5.0; snr <= 30.0; snr += 0.1) + WifiMode wifiMode(mode); + + for (double snrDb = -5.0; snrDb <= 30.0; snrDb += 0.1) { - double ps = yans->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - FrameSize * 8); - if (ps < 0.0 || ps > 1.0) - { - // error - exit(1); - } - yansdataset.Add(snr, ps); + double snr = std::pow(10.0, snrDb / 10.0); - ps = nist->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - FrameSize * 8); + double ps = yans->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits); if (ps < 0.0 || ps > 1.0) { // error exit(1); } - nistdataset.Add(snr, ps); + yansdataset.Add(snrDb, ps); - ps = table->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - FrameSize * 8); + ps = nist->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits); if (ps < 0.0 || ps > 1.0) { // error exit(1); } - tabledataset.Add(snr, ps); + nistdataset.Add(snrDb, ps); + + ps = table->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits); + if (ps < 0.0 || ps > 1.0) + { + // error + exit(1); + } + tabledataset.Add(snrDb, ps); } yansplot.AddDataset(yansdataset); diff --git a/examples/wireless/wifi-ofdm-validation.cc b/examples/wireless/wifi-ofdm-validation.cc index 6eb1d212a..907db3a54 100644 --- a/examples/wireless/wifi-ofdm-validation.cc +++ b/examples/wireless/wifi-ofdm-validation.cc @@ -37,7 +37,7 @@ using namespace ns3; int main(int argc, char* argv[]) { - uint32_t FrameSize = 1500; // bytes + uint32_t frameSizeBytes = 1500; std::ofstream yansfile("yans-frame-success-rate-ofdm.plt"); std::ofstream nistfile("nist-frame-success-rate-ofdm.plt"); std::ofstream tablefile("table-frame-success-rate-ofdm.plt"); @@ -54,7 +54,7 @@ main(int argc, char* argv[]) }; CommandLine cmd(__FILE__); - cmd.AddValue("FrameSize", "The frame size in bytes", FrameSize); + cmd.AddValue("FrameSize", "The frame size in bytes", frameSizeBytes); cmd.Parse(argc, argv); Gnuplot yansplot = Gnuplot("yans-frame-success-rate-ofdm.eps"); @@ -66,48 +66,45 @@ main(int argc, char* argv[]) Ptr table = CreateObject(); WifiTxVector txVector; - for (uint32_t i = 0; i < modes.size(); i++) + uint32_t frameSizeBits = frameSizeBytes * 8; + + for (const auto& mode : modes) { - std::cout << modes[i] << std::endl; - Gnuplot2dDataset yansdataset(modes[i]); - Gnuplot2dDataset nistdataset(modes[i]); - Gnuplot2dDataset tabledataset(modes[i]); - txVector.SetMode(modes[i]); + std::cout << mode << std::endl; + Gnuplot2dDataset yansdataset(mode); + Gnuplot2dDataset nistdataset(mode); + Gnuplot2dDataset tabledataset(mode); + txVector.SetMode(mode); - for (double snr = -5.0; snr <= 30.0; snr += 0.1) + WifiMode wifiMode(mode); + + for (double snrDb = -5.0; snrDb <= 30.0; snrDb += 0.1) { - double ps = yans->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - FrameSize * 8); - if (ps < 0.0 || ps > 1.0) - { - // error - exit(1); - } - yansdataset.Add(snr, ps); + double snr = std::pow(10.0, snrDb / 10.0); - ps = nist->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - FrameSize * 8); + double ps = yans->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits); if (ps < 0.0 || ps > 1.0) { // error exit(1); } - nistdataset.Add(snr, ps); + yansdataset.Add(snrDb, ps); - ps = table->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - FrameSize * 8); + ps = nist->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits); if (ps < 0.0 || ps > 1.0) { // error exit(1); } - tabledataset.Add(snr, ps); + nistdataset.Add(snrDb, ps); + + ps = table->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits); + if (ps < 0.0 || ps > 1.0) + { + // error + exit(1); + } + tabledataset.Add(snrDb, ps); } yansplot.AddDataset(yansdataset); diff --git a/examples/wireless/wifi-ofdm-vht-validation.cc b/examples/wireless/wifi-ofdm-vht-validation.cc index 8e2bded0f..a42e96b99 100644 --- a/examples/wireless/wifi-ofdm-vht-validation.cc +++ b/examples/wireless/wifi-ofdm-vht-validation.cc @@ -36,7 +36,7 @@ using namespace ns3; int main(int argc, char* argv[]) { - uint32_t FrameSize = 1500; // bytes + uint32_t frameSizeBytes = 1500; std::ofstream yansfile("yans-frame-success-rate-ac.plt"); std::ofstream nistfile("nist-frame-success-rate-ac.plt"); std::ofstream tablefile("table-frame-success-rate-ac.plt"); @@ -54,7 +54,7 @@ main(int argc, char* argv[]) }; CommandLine cmd(__FILE__); - cmd.AddValue("FrameSize", "The frame size in bytes", FrameSize); + cmd.AddValue("FrameSize", "The frame size in bytes", frameSizeBytes); cmd.Parse(argc, argv); Gnuplot yansplot = Gnuplot("yans-frame-success-rate-ac.eps"); @@ -66,48 +66,45 @@ main(int argc, char* argv[]) Ptr table = CreateObject(); WifiTxVector txVector; - for (uint32_t i = 0; i < modes.size(); i++) + uint32_t frameSizeBits = frameSizeBytes * 8; + + for (const auto& mode : modes) { - std::cout << modes[i] << std::endl; - Gnuplot2dDataset yansdataset(modes[i]); - Gnuplot2dDataset nistdataset(modes[i]); - Gnuplot2dDataset tabledataset(modes[i]); - txVector.SetMode(modes[i]); + std::cout << mode << std::endl; + Gnuplot2dDataset yansdataset(mode); + Gnuplot2dDataset nistdataset(mode); + Gnuplot2dDataset tabledataset(mode); + txVector.SetMode(mode); - for (double snr = -5.0; snr <= 30.0; snr += 0.1) + WifiMode wifiMode(mode); + + for (double snrDb = -5.0; snrDb <= 30.0; snrDb += 0.1) { - double ps = yans->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - FrameSize * 8); - if (ps < 0.0 || ps > 1.0) - { - // error - exit(1); - } - yansdataset.Add(snr, ps); + double snr = std::pow(10.0, snrDb / 10.0); - ps = nist->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - FrameSize * 8); + double ps = yans->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits); if (ps < 0.0 || ps > 1.0) { // error exit(1); } - nistdataset.Add(snr, ps); + yansdataset.Add(snrDb, ps); - ps = table->GetChunkSuccessRate(WifiMode(modes[i]), - txVector, - std::pow(10.0, snr / 10.0), - FrameSize * 8); + ps = nist->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits); if (ps < 0.0 || ps > 1.0) { // error exit(1); } - tabledataset.Add(snr, ps); + nistdataset.Add(snrDb, ps); + + ps = table->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits); + if (ps < 0.0 || ps > 1.0) + { + // error + exit(1); + } + tabledataset.Add(snrDb, ps); } yansplot.AddDataset(yansdataset); diff --git a/src/internet/helper/internet-stack-helper.cc b/src/internet/helper/internet-stack-helper.cc index 67b7ecd19..cc84eb4e6 100644 --- a/src/internet/helper/internet-stack-helper.cc +++ b/src/internet/helper/internet-stack-helper.cc @@ -404,11 +404,13 @@ Ipv4L3ProtocolRxTxSink(Ptr p, Ptr ipv4, uint32_t interface) bool InternetStackHelper::PcapHooked(Ptr ipv4) { + auto id = ipv4->GetObject()->GetId(); + for (InterfaceFileMapIpv4::const_iterator i = g_interfaceFileMapIpv4.begin(); i != g_interfaceFileMapIpv4.end(); ++i) { - if ((*i).first.first == ipv4->GetObject()->GetId()) + if ((*i).first.first == id) { return true; } @@ -510,11 +512,13 @@ Ipv6L3ProtocolRxTxSink(Ptr p, Ptr ipv6, uint32_t interface) bool InternetStackHelper::PcapHooked(Ptr ipv6) { + auto id = ipv6->GetObject()->GetId(); + for (InterfaceFileMapIpv6::const_iterator i = g_interfaceFileMapIpv6.begin(); i != g_interfaceFileMapIpv6.end(); ++i) { - if ((*i).first.first == ipv6->GetObject()->GetId()) + if ((*i).first.first == id) { return true; } @@ -774,11 +778,13 @@ Ipv4L3ProtocolRxSinkWithContext(Ptr stream, bool InternetStackHelper::AsciiHooked(Ptr ipv4) { + auto id = ipv4->GetObject()->GetId(); + for (InterfaceStreamMapIpv4::const_iterator i = g_interfaceStreamMapIpv4.begin(); i != g_interfaceStreamMapIpv4.end(); ++i) { - if ((*i).first.first == ipv4->GetObject()->GetId()) + if ((*i).first.first == id) { return true; } @@ -1118,11 +1124,13 @@ Ipv6L3ProtocolRxSinkWithContext(Ptr stream, bool InternetStackHelper::AsciiHooked(Ptr ipv6) { + auto id = ipv6->GetObject()->GetId(); + for (InterfaceStreamMapIpv6::const_iterator i = g_interfaceStreamMapIpv6.begin(); i != g_interfaceStreamMapIpv6.end(); ++i) { - if ((*i).first.first == ipv6->GetObject()->GetId()) + if ((*i).first.first == id) { return true; } diff --git a/src/propagation/model/cost231-propagation-loss-model.cc b/src/propagation/model/cost231-propagation-loss-model.cc index 427844cad..a58f092c6 100644 --- a/src/propagation/model/cost231-propagation-loss-model.cc +++ b/src/propagation/model/cost231-propagation-loss-model.cc @@ -155,20 +155,19 @@ Cost231PropagationLossModel::GetLoss(Ptr a, Ptr b) return 0.0; } - double frequency_MHz = m_frequency * 1e-6; + double logFrequencyMhz = std::log10(m_frequency * 1e-6); + double logDistanceKm = std::log10(distance * 1e-3); + double logBSAntennaHeight = std::log10(m_BSAntennaHeight); - double distance_km = distance * 1e-3; - - double C_H = 0.8 + ((1.11 * std::log10(frequency_MHz)) - 0.7) * m_SSAntennaHeight - - (1.56 * std::log10(frequency_MHz)); + double C_H = + 0.8 + ((1.11 * logFrequencyMhz) - 0.7) * m_SSAntennaHeight - (1.56 * logFrequencyMhz); // from the COST231 wiki entry // See also http://www.lx.it.pt/cost231/final_report.htm // Ch. 4, eq. 4.4.3, pg. 135 - double loss_in_db = - 46.3 + (33.9 * std::log10(frequency_MHz)) - (13.82 * std::log10(m_BSAntennaHeight)) - C_H + - ((44.9 - 6.55 * std::log10(m_BSAntennaHeight)) * std::log10(distance_km)) + m_shadowing; + double loss_in_db = 46.3 + (33.9 * logFrequencyMhz) - (13.82 * logBSAntennaHeight) - C_H + + ((44.9 - 6.55 * logBSAntennaHeight) * logDistanceKm) + m_shadowing; NS_LOG_DEBUG("dist =" << distance << ", Path Loss = " << loss_in_db); diff --git a/src/propagation/model/okumura-hata-propagation-loss-model.cc b/src/propagation/model/okumura-hata-propagation-loss-model.cc index 6020b8d0d..1a3c60964 100644 --- a/src/propagation/model/okumura-hata-propagation-loss-model.cc +++ b/src/propagation/model/okumura-hata-propagation-loss-model.cc @@ -25,6 +25,7 @@ #include "ns3/log.h" #include "ns3/mobility-model.h" +#include #include namespace ns3 @@ -80,19 +81,26 @@ OkumuraHataPropagationLossModel::GetLoss(Ptr a, PtrGetDistanceFrom(b) / 1000.0; + double log_fMhz = std::log10(fmhz); + double dist = a->GetDistanceFrom(b); + + Vector aPosition = a->GetPosition(); + Vector bPosition = b->GetPosition(); + + double hb = std::max(aPosition.z, bPosition.z); + double hm = std::min(aPosition.z, bPosition.z); + + NS_ASSERT_MSG(hb > 0 && hm > 0, "nodes' height must be greater then 0"); + + double log_hb = std::log10(hb); + double log_aHeight = 13.82 * log_hb; + double log_bHeight = 0.0; + if (m_frequency <= 1.500e9) { // standard Okumura Hata // see eq. (4.4.1) in the COST 231 final report - double log_f = std::log10(fmhz); - double hb = - (a->GetPosition().z > b->GetPosition().z ? a->GetPosition().z : b->GetPosition().z); - double hm = - (a->GetPosition().z < b->GetPosition().z ? a->GetPosition().z : b->GetPosition().z); - NS_ASSERT_MSG(hb > 0 && hm > 0, "nodes' height must be greater then 0"); - double log_aHeight = 13.82 * std::log10(hb); - double log_bHeight = 0.0; + if (m_citySize == LargeCity) { if (fmhz < 200) @@ -106,21 +114,21 @@ OkumuraHataPropagationLossModel::GetLoss(Ptr a, PtrGetDistanceFrom(b))) - << " logb " << log_bHeight); - loss = 69.55 + (26.16 * log_f) - log_aHeight + - (((44.9 - (6.55 * std::log10(hb)))) * std::log10(dist)) - log_bHeight; + NS_LOG_INFO(this << " logf " << 26.16 * log_fMhz << " loga " << log_aHeight << " X " + << ((44.9 - (6.55 * log_hb)) * std::log10(dist)) << " logb " + << log_bHeight); + loss = 69.55 + (26.16 * log_fMhz) - log_aHeight + + ((44.9 - (6.55 * log_hb)) * std::log10(dist / 1e3)) - log_bHeight; if (m_environment == SubUrbanEnvironment) { loss += -2 * (std::pow(std::log10(fmhz / 28), 2)) - 5.4; } else if (m_environment == OpenAreasEnvironment) { - loss += -4.70 * std::pow(std::log10(fmhz), 2) + 18.33 * std::log10(fmhz) - 40.94; + loss += -4.70 * std::pow(log_fMhz, 2) + 18.33 * log_fMhz - 40.94; } } else @@ -128,28 +136,20 @@ OkumuraHataPropagationLossModel::GetLoss(Ptr a, PtrGetPosition().z > b->GetPosition().z ? a->GetPosition().z : b->GetPosition().z); - double hm = - (a->GetPosition().z < b->GetPosition().z ? a->GetPosition().z : b->GetPosition().z); - NS_ASSERT_MSG(hb > 0 && hm > 0, "nodes' height must be greater then 0"); - double log_aHeight = 13.82 * std::log10(hb); - double log_bHeight = 0.0; double C = 0.0; if (m_citySize == LargeCity) { - log_bHeight = 3.2 * std::pow((std::log10(11.75 * hm)), 2); + log_bHeight = 3.2 * std::pow(std::log10(11.75 * hm), 2); C = 3; } else { - log_bHeight = (1.1 * log_f - 0.7) * hm - (1.56 * log_f - 0.8); + log_bHeight = (1.1 * log_fMhz - 0.7) * hm - (1.56 * log_fMhz - 0.8); } - loss = 46.3 + (33.9 * log_f) - log_aHeight + - (((44.9 - (6.55 * std::log10(hb)))) * std::log10(dist)) - log_bHeight + C; + loss = 46.3 + (33.9 * log_fMhz) - log_aHeight + + ((44.9 - (6.55 * log_hb)) * std::log10(dist / 1e3)) - log_bHeight + C; } return loss; } diff --git a/src/spectrum/test/two-ray-splm-test-suite.cc b/src/spectrum/test/two-ray-splm-test-suite.cc index 66e903333..4ed3d37bc 100644 --- a/src/spectrum/test/two-ray-splm-test-suite.cc +++ b/src/spectrum/test/two-ray-splm-test-suite.cc @@ -153,8 +153,10 @@ FtrFadingModelAverageTest::DoRun() // Generate a set of values for the FTR model parameters for (uint8_t j = 0; j < NUM_VALUES; j++) { - sigma[j] = std::pow(2, j); - k[j] = std::pow(2, j); + double power = std::pow(2, j); + + sigma[j] = power; + k[j] = power; delta[j] = double(j) / NUM_VALUES; // Delta must be in [0, 1] } diff --git a/src/uan/model/uan-noise-model-default.cc b/src/uan/model/uan-noise-model-default.cc index 629fb8895..664517aca 100644 --- a/src/uan/model/uan-noise-model-default.cc +++ b/src/uan/model/uan-noise-model-default.cc @@ -57,7 +57,7 @@ UanNoiseModelDefault::GetTypeId() } // Common acoustic noise formulas. These can be found -// in "Priniciples of Underwater Sound" by Robert J. Urick +// in "Principles of Underwater Sound" by Robert J. Urick double UanNoiseModelDefault::GetNoiseDbHz(double fKhz) const { @@ -71,18 +71,18 @@ UanNoiseModelDefault::GetNoiseDbHz(double fKhz) const double thermalDb; double noiseDb; - turbDb = 17.0 - 30.0 * std::log10(fKhz); + double log_fKhz = std::log10(fKhz); + + turbDb = 17.0 - 30.0 * log_fKhz; turb = std::pow(10.0, turbDb * 0.1); - shipDb = - 40.0 + 20.0 * (m_shipping - 0.5) + 26.0 * std::log10(fKhz) - 60.0 * std::log10(fKhz + 0.03); + shipDb = 40.0 + 20.0 * (m_shipping - 0.5) + 26.0 * log_fKhz - 60.0 * std::log10(fKhz + 0.03); ship = std::pow(10.0, (shipDb * 0.1)); - windDb = 50.0 + 7.5 * std::pow(m_wind, 0.5) + 20.0 * std::log10(fKhz) - - 40.0 * std::log10(fKhz + 0.4); + windDb = 50.0 + 7.5 * std::pow(m_wind, 0.5) + 20.0 * log_fKhz - 40.0 * std::log10(fKhz + 0.4); wind = std::pow(10.0, windDb * 0.1); - thermalDb = -15 + 20 * std::log10(fKhz); + thermalDb = -15 + 20 * log_fKhz; thermal = std::pow(10, thermalDb * 0.1); noiseDb = 10 * std::log10(turb + ship + wind + thermal);