diff --git a/src/mesh/helper/mesh-helper.cc b/src/mesh/helper/mesh-helper.cc index 5c2bc62e4..fa32c23fe 100644 --- a/src/mesh/helper/mesh-helper.cc +++ b/src/mesh/helper/mesh-helper.cc @@ -22,6 +22,7 @@ #include "ns3/simulator.h" #include "ns3/mesh-point-device.h" #include "ns3/wifi-net-device.h" +#include "ns3/minstrel-wifi-manager.h" #include "ns3/mesh-wifi-interface-mac.h" namespace ns3 { @@ -225,6 +226,18 @@ MeshHelper::AssignStreams (NetDeviceContainer c, int64_t stream) for (std::vector >::iterator i = ifaces.begin (); i != ifaces.end (); i++) { wifi = DynamicCast (*i); + + // Handle any random numbers in the PHY objects. + currentStream += wifi->GetPhy ()->AssignStreams (currentStream); + + // Handle any random numbers in the station managers. + Ptr manager = wifi->GetRemoteStationManager (); + Ptr minstrel = DynamicCast (manager); + if (minstrel) + { + currentStream += minstrel->AssignStreams (currentStream); + } + // Handle any random numbers in the mesh mac and plugins mac = DynamicCast (wifi->GetMac ()); if (mac) { diff --git a/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap b/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap index 1761ec571..31f025ede 100644 Binary files a/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap and b/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap differ diff --git a/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap b/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap index 23d82eca9..e54926173 100644 Binary files a/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap and b/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap differ diff --git a/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap b/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap index e54a635f9..185e7d991 100644 Binary files a/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap and b/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap differ diff --git a/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap b/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap index 54c565168..7a6404b20 100644 Binary files a/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap and b/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap differ diff --git a/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap b/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap index 92375fd08..c31166af3 100644 Binary files a/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap and b/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap differ diff --git a/src/mesh/test/dot11s/hwmp-proactive-regression.cc b/src/mesh/test/dot11s/hwmp-proactive-regression.cc index 1c44d2b3b..1f7aa655d 100644 --- a/src/mesh/test/dot11s/hwmp-proactive-regression.cc +++ b/src/mesh/test/dot11s/hwmp-proactive-regression.cc @@ -104,21 +104,26 @@ HwmpProactiveRegressionTest::InstallApplications () void HwmpProactiveRegressionTest::CreateDevices () { + int64_t streamsUsed = 0; // 1. setup WiFi YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); // This test suite output was originally based on YansErrorRateModel wifiPhy.SetErrorRateModel ("ns3::YansErrorRateModel"); YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); - wifiPhy.SetChannel (wifiChannel.Create ()); + Ptr chan = wifiChannel.Create (); + wifiPhy.SetChannel (chan); // 2. setup mesh MeshHelper mesh = MeshHelper::Default (); mesh.SetStackInstaller ("ns3::Dot11sStack", "Root", Mac48AddressValue (Mac48Address ("00:00:00:00:00:0d"))); mesh.SetMacType ("RandomStart", TimeValue (Seconds (0.1))); mesh.SetNumberOfInterfaces (1); NetDeviceContainer meshDevices = mesh.Install (wifiPhy, *m_nodes); - // Five nodes, one device per node, 3 streams per mac - int64_t streamsUsed = mesh.AssignStreams (meshDevices, 0); - NS_TEST_EXPECT_MSG_EQ (streamsUsed, (3*5), "Stream assignment unexpected value"); + // Five devices, 4 streams per device + streamsUsed += mesh.AssignStreams (meshDevices, streamsUsed); + NS_TEST_ASSERT_MSG_EQ (streamsUsed, (meshDevices.GetN () * 4), "Stream mismatch"); + // No streams used here, by default + streamsUsed += wifiChannel.AssignStreams (chan, streamsUsed); + NS_TEST_ASSERT_MSG_EQ (streamsUsed, (meshDevices.GetN () * 4), "Stream mismatch"); // 3. setup TCP/IP InternetStackHelper internetStack; diff --git a/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap b/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap index eb87c31c1..12da92e47 100644 Binary files a/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap and b/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap differ diff --git a/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap b/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap index fcdb52227..a7b4dedc1 100644 Binary files a/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap and b/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap differ diff --git a/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap b/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap index 0904156bd..225dc6858 100644 Binary files a/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap and b/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap differ diff --git a/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap b/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap index d509ad2b0..584b2eef9 100644 Binary files a/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap and b/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap differ diff --git a/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap b/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap index 4e87ebf8f..6c5841339 100644 Binary files a/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap and b/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap differ diff --git a/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap b/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap index 485495037..bedd4b6a8 100644 Binary files a/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap and b/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap differ diff --git a/src/mesh/test/dot11s/hwmp-reactive-regression.cc b/src/mesh/test/dot11s/hwmp-reactive-regression.cc index ad2d014f7..10ce35a04 100644 --- a/src/mesh/test/dot11s/hwmp-reactive-regression.cc +++ b/src/mesh/test/dot11s/hwmp-reactive-regression.cc @@ -101,21 +101,26 @@ HwmpReactiveRegressionTest::InstallApplications () void HwmpReactiveRegressionTest::CreateDevices () { + int64_t streamsUsed = 0; // 1. setup WiFi YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); // This test suite output was originally based on YansErrorRateModel wifiPhy.SetErrorRateModel ("ns3::YansErrorRateModel"); YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); - wifiPhy.SetChannel (wifiChannel.Create ()); + Ptr chan = wifiChannel.Create (); + wifiPhy.SetChannel (chan); + // 2. setup mesh MeshHelper mesh = MeshHelper::Default (); mesh.SetStackInstaller ("ns3::Dot11sStack"); mesh.SetMacType ("RandomStart", TimeValue (Seconds (0.1))); mesh.SetNumberOfInterfaces (1); NetDeviceContainer meshDevices = mesh.Install (wifiPhy, *m_nodes); - // Six nodes, one device per node, 3 streams per mac - int64_t streamsUsed = mesh.AssignStreams (meshDevices, 0); - NS_TEST_EXPECT_MSG_EQ (streamsUsed, (6*3), "Stream assignment unexpected value"); + // Six devices, 4 streams per device + streamsUsed += mesh.AssignStreams (meshDevices, streamsUsed); + NS_TEST_EXPECT_MSG_EQ (streamsUsed, (meshDevices.GetN () * 4), "Stream assignment mismatch"); + streamsUsed += wifiChannel.AssignStreams (chan, streamsUsed); + NS_TEST_EXPECT_MSG_EQ (streamsUsed, (meshDevices.GetN () * 4), "Stream assignment mismatch"); // 3. setup TCP/IP InternetStackHelper internetStack; diff --git a/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap b/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap index 6287d979e..851d21b2a 100644 Binary files a/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap and b/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap differ diff --git a/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap b/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap index 08adc5c94..c53d402e5 100644 Binary files a/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap and b/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap differ diff --git a/src/mesh/test/dot11s/hwmp-simplest-regression.cc b/src/mesh/test/dot11s/hwmp-simplest-regression.cc index 166c53fde..62f5f2bc2 100644 --- a/src/mesh/test/dot11s/hwmp-simplest-regression.cc +++ b/src/mesh/test/dot11s/hwmp-simplest-regression.cc @@ -115,19 +115,23 @@ HwmpSimplestRegressionTest::InstallApplications () void HwmpSimplestRegressionTest::CreateDevices () { + int64_t streamsUsed = 0; // 1. setup WiFi YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); - wifiPhy.SetChannel (wifiChannel.Create ()); + Ptr chan = wifiChannel.Create (); + wifiPhy.SetChannel (chan); // 2. setup mesh MeshHelper mesh = MeshHelper::Default (); mesh.SetStackInstaller ("ns3::Dot11sStack"); mesh.SetMacType ("RandomStart", TimeValue (Seconds (0.1))); mesh.SetNumberOfInterfaces (1); NetDeviceContainer meshDevices = mesh.Install (wifiPhy, *m_nodes); - // Two nodes, one device per node, three streams per device - int64_t streamsUsed = mesh.AssignStreams (meshDevices, 0); - NS_TEST_EXPECT_MSG_EQ (streamsUsed, (2*3), "Stream assignment unexpected value"); + // Two devices, four streams per mesh device + streamsUsed += mesh.AssignStreams (meshDevices, streamsUsed); + NS_TEST_ASSERT_MSG_EQ (streamsUsed, (meshDevices.GetN () * 4), "Stream assignment mismatch"); + streamsUsed += wifiChannel.AssignStreams (chan, streamsUsed); + NS_TEST_ASSERT_MSG_EQ (streamsUsed, (meshDevices.GetN () * 4), "Stream assignment mismatch"); // 3. setup TCP/IP InternetStackHelper internetStack; diff --git a/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap b/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap index f0a7e31ba..4a0cb28ee 100644 Binary files a/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap and b/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap differ diff --git a/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap b/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap index 5493318f5..23310d712 100644 Binary files a/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap and b/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap differ diff --git a/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap b/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap index deb3d25e7..a54e86d27 100644 Binary files a/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap and b/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap differ diff --git a/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap b/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap index f9c992c6c..da1767563 100644 Binary files a/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap and b/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap differ diff --git a/src/mesh/test/dot11s/hwmp-target-flags-regression.cc b/src/mesh/test/dot11s/hwmp-target-flags-regression.cc index 1ef53f375..cbecb6366 100644 --- a/src/mesh/test/dot11s/hwmp-target-flags-regression.cc +++ b/src/mesh/test/dot11s/hwmp-target-flags-regression.cc @@ -120,21 +120,26 @@ HwmpDoRfRegressionTest::InstallApplications () void HwmpDoRfRegressionTest::CreateDevices () { + int64_t streamsUsed = 0; // 1. setup WiFi YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); // This test suite output was originally based on YansErrorRateModel wifiPhy.SetErrorRateModel ("ns3::YansErrorRateModel"); YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); - wifiPhy.SetChannel (wifiChannel.Create ()); + Ptr chan = wifiChannel.Create (); + wifiPhy.SetChannel (chan); // 2. setup mesh MeshHelper mesh = MeshHelper::Default (); mesh.SetStackInstaller ("ns3::Dot11sStack"); mesh.SetMacType ("RandomStart", TimeValue (Seconds (0.1))); mesh.SetNumberOfInterfaces (1); NetDeviceContainer meshDevices = mesh.Install (wifiPhy, *m_nodes); - // Four nodes, one device per node, three streams per mac - int64_t streamsUsed = mesh.AssignStreams (meshDevices, 0); - NS_TEST_EXPECT_MSG_EQ (streamsUsed, (4*3), "Stream assignment unexpected value"); + // Four devices, four streams per mac + streamsUsed += mesh.AssignStreams (meshDevices, streamsUsed); + NS_TEST_ASSERT_MSG_EQ (streamsUsed, (meshDevices.GetN () * 4), "Stream assignment mismatch"); + streamsUsed += wifiChannel.AssignStreams (chan, streamsUsed); + NS_TEST_ASSERT_MSG_EQ (streamsUsed, (meshDevices.GetN () * 4), "Stream assignment mismatch"); + // 3. setup TCP/IP InternetStackHelper internetStack; internetStack.Install (*m_nodes); diff --git a/src/mesh/test/dot11s/pmp-regression-test-0-1.pcap b/src/mesh/test/dot11s/pmp-regression-test-0-1.pcap index 1e4f6787b..cd23c55bd 100644 Binary files a/src/mesh/test/dot11s/pmp-regression-test-0-1.pcap and b/src/mesh/test/dot11s/pmp-regression-test-0-1.pcap differ diff --git a/src/mesh/test/dot11s/pmp-regression-test-1-1.pcap b/src/mesh/test/dot11s/pmp-regression-test-1-1.pcap index 1614b6f0a..f1bc1333f 100644 Binary files a/src/mesh/test/dot11s/pmp-regression-test-1-1.pcap and b/src/mesh/test/dot11s/pmp-regression-test-1-1.pcap differ diff --git a/src/mesh/test/dot11s/pmp-regression.cc b/src/mesh/test/dot11s/pmp-regression.cc index 7ff8f3754..586bc0037 100644 --- a/src/mesh/test/dot11s/pmp-regression.cc +++ b/src/mesh/test/dot11s/pmp-regression.cc @@ -87,19 +87,23 @@ PeerManagementProtocolRegressionTest::CreateNodes () void PeerManagementProtocolRegressionTest::CreateDevices () { + int64_t streamsUsed = 0; // 1. setup WiFi YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); - wifiPhy.SetChannel (wifiChannel.Create ()); + Ptr chan = wifiChannel.Create (); + wifiPhy.SetChannel (chan); // 2. setup mesh MeshHelper mesh = MeshHelper::Default (); mesh.SetStackInstaller ("ns3::Dot11sStack"); mesh.SetMacType ("RandomStart", TimeValue (Seconds (0.1))); mesh.SetNumberOfInterfaces (1); NetDeviceContainer meshDevices = mesh.Install (wifiPhy, *m_nodes); - // Three nodes, one device per node, two streams (one for mac, one for plugin) - int64_t streamsUsed = mesh.AssignStreams (meshDevices, 0); - NS_TEST_EXPECT_MSG_EQ (streamsUsed, (3*2), "Stream assignment unexpected value"); + // Two devices, four streams per device (one for mac, one for phy, + // two for plugins) + streamsUsed += mesh.AssignStreams (meshDevices, 0); + NS_TEST_ASSERT_MSG_EQ (streamsUsed, (meshDevices.GetN () * 4), "Stream assignment mismatch"); + wifiChannel.AssignStreams (chan, streamsUsed); // 3. write PCAP if needed wifiPhy.EnablePcapAll (CreateTempDirFilename (PREFIX)); } diff --git a/src/mesh/test/flame/flame-regression-test-0-1.pcap b/src/mesh/test/flame/flame-regression-test-0-1.pcap index 66572ed1e..319901521 100644 Binary files a/src/mesh/test/flame/flame-regression-test-0-1.pcap and b/src/mesh/test/flame/flame-regression-test-0-1.pcap differ diff --git a/src/mesh/test/flame/flame-regression-test-1-1.pcap b/src/mesh/test/flame/flame-regression-test-1-1.pcap index c1bf48b78..aa94c4f91 100644 Binary files a/src/mesh/test/flame/flame-regression-test-1-1.pcap and b/src/mesh/test/flame/flame-regression-test-1-1.pcap differ diff --git a/src/mesh/test/flame/flame-regression-test-2-1.pcap b/src/mesh/test/flame/flame-regression-test-2-1.pcap index d4295d792..f4b9104a0 100644 Binary files a/src/mesh/test/flame/flame-regression-test-2-1.pcap and b/src/mesh/test/flame/flame-regression-test-2-1.pcap differ diff --git a/src/mesh/test/flame/flame-regression.cc b/src/mesh/test/flame/flame-regression.cc index baeaec72b..2356ed5fd 100644 --- a/src/mesh/test/flame/flame-regression.cc +++ b/src/mesh/test/flame/flame-regression.cc @@ -91,21 +91,25 @@ FlameRegressionTest::CreateNodes () void FlameRegressionTest::CreateDevices () { + int64_t streamsUsed = 0; // 1. setup WiFi YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); // This test suite output was originally based on YansErrorRateModel wifiPhy.SetErrorRateModel ("ns3::YansErrorRateModel"); YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); - wifiPhy.SetChannel (wifiChannel.Create ()); + Ptr chan = wifiChannel.Create (); + wifiPhy.SetChannel (chan); // 2. setup mesh MeshHelper mesh = MeshHelper::Default (); mesh.SetStackInstaller ("ns3::FlameStack"); mesh.SetMacType ("RandomStart", TimeValue (Seconds (0.1))); mesh.SetNumberOfInterfaces (1); NetDeviceContainer meshDevices = mesh.Install (wifiPhy, *m_nodes); - // Three nodes, one device per node - int64_t streamsUsed = mesh.AssignStreams (meshDevices, 0); - NS_TEST_EXPECT_MSG_EQ (streamsUsed, 3, "Stream assignment unexpected value"); + // Three devices, two streams per device + streamsUsed += mesh.AssignStreams (meshDevices, streamsUsed); + NS_TEST_ASSERT_MSG_EQ (streamsUsed, (meshDevices.GetN () * 2), "Stream assignment unexpected value"); + streamsUsed += wifiChannel.AssignStreams (chan, streamsUsed); + NS_TEST_ASSERT_MSG_EQ (streamsUsed, (meshDevices.GetN () * 2), "Stream assignment unexpected value"); // 3. setup TCP/IP InternetStackHelper internetStack; internetStack.Install (*m_nodes);