24 #include "ns3/uinteger.h"
25 #include "ns3/double.h"
26 #include "ns3/string.h"
27 #include "ns3/pointer.h"
28 #include "ns3/config.h"
30 #include "ns3/rng-seed-manager.h"
31 #include "ns3/mobility-helper.h"
32 #include "ns3/wifi-net-device.h"
33 #include "ns3/spectrum-wifi-helper.h"
34 #include "ns3/multi-model-spectrum-channel.h"
35 #include "ns3/constant-obss-pd-algorithm.h"
36 #include "ns3/he-configuration.h"
37 #include "ns3/wifi-utils.h"
46 std::string sub = context.substr (10);
47 uint32_t pos = sub.find (
"/Device");
48 uint32_t nodeId = atoi (sub.substr (0, pos).c_str ());
84 void DoRun (
void)
override;
110 void SetExpectedTxPower (
double txPowerDbm);
115 void SetupSimulation ();
120 void CheckResults ();
125 void ResetResults ();
130 void ClearDropReasons ();
149 void CheckPhyDropReasons (
Ptr<WifiNetDevice> device, std::vector<WifiPhyRxfailureReason> expectedDropReasons);
157 void NotifyPhyTxBegin (std::string context,
Ptr<const Packet> p,
double txPowerW);
207 :
TestCase (
"InterBssConstantObssPd"),
208 m_numSta1PacketsSent (0),
209 m_numSta2PacketsSent (0),
210 m_numAp1PacketsSent (0),
211 m_numAp2PacketsSent (0),
212 m_numSta1PacketsReceived (0),
213 m_numSta2PacketsReceived (0),
214 m_numAp1PacketsReceived (0),
215 m_numAp2PacketsReceived (0),
216 m_payloadSize1 (1000),
217 m_payloadSize2 (1500),
218 m_payloadSize3 (2000),
220 m_obssPdLevelDbm (-72),
221 m_obssRxPowerDbm (-82),
222 m_expectedTxPowerDbm (15),
238 positionAlloc->Add (Vector (0.0, 0.0, 0.0));
239 positionAlloc->Add (Vector (d1 + d2, 0.0, 0.0));
240 positionAlloc->Add (Vector (d1 + d2 + d3 + d4, 0.0, 0.0));
241 positionAlloc->Add (Vector (d1, 0.0, 0.0));
242 positionAlloc->Add (Vector (d1 + d2 + d3, 0.0, 0.0));
243 positionAlloc->Add (Vector (d1 + d2 + d3 + d4 + d5, 0.0, 0.0));
244 return positionAlloc;
259 std::vector<WifiPhyRxfailureReason> dropReasons;
374 Simulator::Stop (
Seconds (2.6));
507 phy->GetAttribute (
"State", ptr);
509 currentState = state->GetState ();
515 std::vector<WifiPhyRxfailureReason> expectedDropReasons)
517 std::vector<WifiPhyRxfailureReason> currentDropReasons;
536 NS_TEST_ASSERT_MSG_EQ (currentDropReasons.size (), expectedDropReasons.size (),
"Number of drop reasons " << currentDropReasons.size () <<
" does not match expected one " << expectedDropReasons.size () <<
" at " <<
Simulator::Now ());
537 for (std::size_t i = 0; i < currentDropReasons.size (); ++i)
539 NS_TEST_ASSERT_MSG_EQ (currentDropReasons[i], expectedDropReasons[i],
"Drop reason " << i <<
": " << currentDropReasons[i] <<
" does not match expected reason " << expectedDropReasons[i] <<
" at " <<
Simulator::Now ());
546 RngSeedManager::SetSeed (1);
547 RngSeedManager::SetRun (3);
548 int64_t streamNumber = 50;
564 phy.DisablePreambleDetectionModel ();
565 phy.SetFrameCaptureModel (
"ns3::SimpleFrameCaptureModel");
567 channel->SetPropagationDelayModel (CreateObject<ConstantSpeedPropagationDelayModel> ());
568 channel->AddPropagationLossModel (lossModel);
572 phy.Set (
"ChannelSettings",
StringValue (
"{36, 20, BAND_5GHZ, 0}"));
576 wifi.SetRemoteStationManager (
"ns3::ConstantRateWifiManager",
580 wifi.SetObssPdAlgorithm (
"ns3::ConstantObssPdAlgorithm",
585 mac.SetType (
"ns3::StaWifiMac",
592 mac.SetType (
"ns3::ApWifiMac",
619 mobility.SetPositionAllocator (positionAlloc);
620 mobility.SetMobilityModel (
"ns3::ConstantPositionMobilityModel");
635 Simulator::Destroy ();
TestInterBssConstantObssPdAlgo()
unsigned int m_numSta2PacketsSent
number of sent packets from STA2
unsigned int m_numAp2PacketsReceived
number of received packets from AP2
unsigned int m_numSta1PacketsSent
number of sent packets from STA1
double m_obssRxPowerDbm
forced RX power in dBm for OBSS
unsigned int m_payloadSize2
size in bytes of packet payload in BSS 2
Ptr< ListPositionAllocator > AllocatePositions(double d1, double d2, double d3, double d4, double d5)
Allocate the node positions.
void ClearDropReasons()
Clear the drop reasons.
std::vector< WifiPhyRxfailureReason > m_dropReasonsAp2
drop reasons for AP2
void RunOne()
Run one function.
void SetupSimulation()
Setup the simulation.
void CheckPhyDropReasons(Ptr< WifiNetDevice > device, std::vector< WifiPhyRxfailureReason > expectedDropReasons)
Check if the Phy drop reasons for a device are as expected.
void SetExpectedTxPower(double txPowerDbm)
Set the expected transmit power in dBm.
unsigned int m_payloadSize3
size in bytes of packet payload in BSS 3
void NotifyPhyTxBegin(std::string context, Ptr< const Packet > p, double txPowerW)
Notify Phy transmit begin.
unsigned int m_payloadSize1
size in bytes of packet payload in BSS 1
void ResetResults()
Reset the results.
unsigned int m_numSta2PacketsReceived
number of received packets from STA2
unsigned int m_numAp2PacketsSent
number of sent packets from AP2
void DoRun(void) override
Implementation to actually run this TestCase.
void CheckPhyState(Ptr< WifiNetDevice > device, WifiPhyState expectedState)
Check if the Phy State for a device is an expected value.
void CheckResults()
Check the results.
void NotifyPhyRxDrop(std::string context, Ptr< const Packet > p, WifiPhyRxfailureReason reason)
Notify Phy receive drops.
uint8_t m_bssColor1
color for BSS 1
NetDeviceContainer m_staDevices
STA devices.
std::vector< WifiPhyRxfailureReason > m_dropReasonsSta1
drop reasons for STA1
void NotifyPhyRxEnd(std::string context, Ptr< const Packet > p)
Notify Phy receive ends.
void SendOnePacket(Ptr< WifiNetDevice > tx_dev, Ptr< WifiNetDevice > rx_dev, uint32_t payloadSize)
Send one packet function.
std::vector< WifiPhyRxfailureReason > m_dropReasonsSta2
drop reasons for STA2
NetDeviceContainer m_apDevices
AP devices.
uint8_t m_bssColor3
color for BSS 3
unsigned int m_numAp1PacketsSent
number of sent packets from AP1
uint8_t m_bssColor2
color for BSS 2
double m_txPowerDbm
configured transmit power in dBm
std::vector< WifiPhyRxfailureReason > m_dropReasonsAp1
drop reasons for AP1
unsigned int m_numSta1PacketsReceived
number of received packets from STA1
~TestInterBssConstantObssPdAlgo()
unsigned int m_numAp1PacketsReceived
number of received packets from AP1
double m_obssPdLevelDbm
OBSS-PD level in dBm.
double m_expectedTxPowerDbm
expected transmit power in dBm
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Helper class used to assign positions and mobility models to nodes.
Keep track of the current position and velocity of an object.
holds a vector of ns3::NetDevice pointers
uint32_t GetN(void) const
Get the number of Ptr<NetDevice> stored in this container.
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
keep track of a set of node pointers.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
uint32_t GetId(void) const
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
Hold objects of type Ptr<T>.
Make it easy to create and manage PHY objects for the spectrum model.
The IEEE 802.11 SSID Information Element.
AttributeValue implementation for Ssid.
Hold variables of type string.
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Hold an unsigned integer type.
helps to create WifiNetDevice objects
create MAC layers for a ns3::WifiNetDevice.
bool Send(Ptr< Packet > packet, const Address &dest, uint16_t protocolNumber) override
Address GetAddress(void) const override
Ptr< WifiPhy > GetPhy(void) const
Ptr< HeConfiguration > GetHeConfiguration(void) const
Ptr< Node > GetNode(void) const override
This objects implements the PHY state machine of the Wifi device.
void Connect(std::string path, const CallbackBase &cb)
void Set(std::string path, const AttributeValue &value)
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Time Now(void)
create an ns3::Time instance which contains the current simulation time.
bool TestDoubleIsEqual(const double x1, const double x2, const double epsilon)
Compare two double precision floating point numbers and declare them equal if they are within some ep...
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
#define NS_TEST_EXPECT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report if not.
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit.
Time Seconds(double value)
Construct a Time in the indicated unit.
WifiPhyRxfailureReason
Enumeration of the possible reception failure reasons.
static uint32_t ConvertContextToNodeId(std::string context)
static InterBssTestSuite interBssTestSuite
void SendOnePacket(Ptr< LrWpanPhy > sender, Ptr< LrWpanPhy > receiver)
Send one packet.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
double WToDbm(double w)
Convert from Watts to dBm.
Callback< R, Ts... > MakeCallback(R(T::*memPtr)(Ts...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
uint32_t pktSize
packet size used for the simulation (in bytes)
WifiPhyState
The state of the PHY layer.
@ CCA_BUSY
The PHY layer has sense the medium busy through the CCA mechanism.
@ RX
The PHY layer is receiving a packet.
@ TX
The PHY layer is sending a packet.
@ IDLE
The PHY layer is IDLE.