54 #include "ns3/packet.h" 55 #include "ns3/config.h" 56 #include "ns3/double.h" 57 #include "ns3/simulator.h" 58 #include "ns3/command-line.h" 59 #include "ns3/single-model-spectrum-channel.h" 60 #include "ns3/spectrum-wifi-phy.h" 61 #include "ns3/propagation-loss-model.h" 62 #include "ns3/propagation-delay-model.h" 63 #include "ns3/nist-error-rate-model.h" 64 #include "ns3/constant-position-mobility-model.h" 65 #include "ns3/simple-frame-capture-model.h" 66 #include "ns3/wifi-psdu.h" 67 #include "ns3/wifi-mac-trailer.h" 68 #include "ns3/wifi-net-device.h" 121 void SendA (
void)
const;
123 void SendB (
void)
const;
143 txVector.SetMode (
WifiMode (m_input.txModeA));
144 txVector.SetChannelWidth (m_input.widthA);
145 txVector.SetPreambleType (m_input.preamble);
146 m_txA->Send (psdu, txVector);
159 txVector.SetMode (
WifiMode (m_input.txModeB));
160 txVector.SetChannelWidth (m_input.widthB);
161 txVector.SetPreambleType (m_input.preamble);
162 m_txB->Send (psdu, txVector);
168 if (packet->
GetUid () == m_uidA)
172 else if (packet->
GetUid () == m_uidB)
184 : m_droppedA (false),
195 txModeA (
"OfdmRate54Mbps"),
196 txModeB (
"OfdmRate54Mbps"),
197 txPowerLevelA (16.0206),
198 txPowerLevelB (16.0206),
208 captureEnabled (false),
218 double range =
std::max (std::abs (input.
xA), input.
xB);
222 channel->SetPropagationDelayModel (CreateObject<ConstantSpeedPropagationDelayModel> ());
224 channel->AddPropagationLossModel (loss);
235 m_txA = CreateObject<SpectrumWifiPhy> ();
243 m_txB = CreateObject<SpectrumWifiPhy> ();
249 Ptr<Node> nodeRx = CreateObject<Node> ();
253 rx->SetDevice (devRx);
258 rx->SetErrorRateModel (error);
264 rx->SetMobility (posRx);
269 rx->SetFrameCaptureModel (frameCaptureModel);
274 rx->ConfigureStandardAndBand (input.
standard, input.
band);
276 devA->SetPhy (
m_txA);
278 devB->SetPhy (
m_txB);
293 Simulator::Destroy ();
305 int main (
int argc,
char *argv[])
308 std::string str_standard =
"WIFI_PHY_STANDARD_80211a";
309 std::string str_preamble =
"WIFI_PREAMBLE_LONG";
313 cmd.AddValue (
"delay",
"Delay in microseconds between frame transmission from sender A and frame transmission from sender B", delay);
314 cmd.AddValue (
"xA",
"The position of transmitter A (< 0)", input.
xA);
315 cmd.AddValue (
"xB",
"The position of transmitter B (> 0)", input.
xB);
316 cmd.AddValue (
"packetSizeA",
"Packet size in bytes of transmitter A", input.
packetSizeA);
317 cmd.AddValue (
"packetSizeB",
"Packet size in bytes of transmitter B", input.
packetSizeB);
318 cmd.AddValue (
"txPowerA",
"TX power level of transmitter A", input.
txPowerLevelA);
319 cmd.AddValue (
"txPowerB",
"TX power level of transmitter B", input.
txPowerLevelB);
320 cmd.AddValue (
"txModeA",
"Wifi mode used for payload transmission of sender A", input.
txModeA);
321 cmd.AddValue (
"txModeB",
"Wifi mode used for payload transmission of sender B", input.
txModeB);
322 cmd.AddValue (
"channelA",
"The selected channel number of sender A", input.
channelA);
323 cmd.AddValue (
"channelB",
"The selected channel number of sender B", input.
channelB);
324 cmd.AddValue (
"widthA",
"The selected channel width (MHz) of sender A", input.
widthA);
325 cmd.AddValue (
"widthB",
"The selected channel width (MHz) of sender B", input.
widthB);
326 cmd.AddValue (
"standard",
"IEEE 802.11 flavor", str_standard);
327 cmd.AddValue (
"preamble",
"Type of preamble", str_preamble);
328 cmd.AddValue (
"enableCapture",
"Enable/disable physical layer capture", input.
captureEnabled);
329 cmd.AddValue (
"captureMargin",
"Margin used for physical layer capture", input.
captureMargin);
330 cmd.AddValue (
"checkResults",
"Used to check results at the end of the test",
checkResults);
331 cmd.AddValue (
"expectRxASuccessfull",
"Indicate whether packet A is expected to be successfully received",
expectRxASuccessfull);
332 cmd.AddValue (
"expectRxBSuccessfull",
"Indicate whether packet B is expected to be successfully received",
expectRxBSuccessfull);
333 cmd.Parse (argc, argv);
337 if (input.
xA >= 0 || input.
xB <= 0)
339 std::cout <<
"Value of xA must be smaller than 0 and value of xB must be bigger than 0!" << std::endl;
343 if (str_standard ==
"WIFI_PHY_STANDARD_80211a")
348 else if (str_standard ==
"WIFI_PHY_STANDARD_80211b")
353 else if (str_standard ==
"WIFI_PHY_STANDARD_80211g")
358 else if (str_standard ==
"WIFI_PHY_STANDARD_80211n_2_4GHZ")
363 else if (str_standard ==
"WIFI_PHY_STANDARD_80211n_5GHZ")
368 else if (str_standard ==
"WIFI_PHY_STANDARD_80211ac")
373 else if (str_standard ==
"WIFI_PHY_STANDARD_80211ax_2_4GHZ")
378 else if (str_standard ==
"WIFI_PHY_STANDARD_80211ax_5GHZ")
406 std::cout <<
"Preamble does not exist or is not compatible with the selected standard!" << std::endl;
ERP-OFDM PHY (Clause 19, Section 19.5)
void Dispose(void)
Dispose of this Object.
uint64_t GetUid(void) const
Returns the packet's Uid.
Simulation virtual time values and global simulation resolution.
void SendB(void) const
Send B function.
uint64_t m_uidB
UID to use for packet B.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
bool expectRxBSuccessfull
bool m_droppedB
flag to indicate whether packet B has been dropped
WifiPhyRxfailureReason
Enumeration of the possible reception failure reasons.
static const uint16_t WIFI_MAC_FCS_LENGTH
The length in octects of the IEEE 802.11 MAC FCS field.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
void SetMobility(const Ptr< MobilityModel > mobility)
assign a mobility model to this device
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
bool m_droppedA
flag to indicate whether packet A has been dropped
void SetDevice(const Ptr< NetDevice > device)
Sets the device this PHY is associated with.
WifiPreamble
The type of preamble to be used by an IEEE 802.11 transmission.
WifiPhyStandard
Identifies the PHY specification that a Wifi device is configured to use.
Ptr< SpectrumWifiPhy > m_txB
transmit B function
void PacketDropped(Ptr< const Packet > packet, WifiPhyRxfailureReason reason)
Function triggered when a packet is dropped.
void SetTxPowerEnd(double end)
Sets the maximum available transmission power level (dBm).
Parse command-line arguments.
void SetErrorRateModel(const Ptr< ErrorRateModel > rate)
Sets the error rate model.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
DSSS PHY (Clause 15) and HR/DSSS PHY (Clause 18)
struct Input m_input
input
void Run(struct InterferenceExperiment::Input input)
Run function.
void SetTxPowerLevel(uint8_t powerlevel)
Sets the selected transmission power level.
bool expectRxASuccessfull
void SetPosition(const Vector &position)
WifiPhyBand
Identifies the PHY band.
void experiment(std::string queue_disc_type)
uint32_t AddDevice(Ptr< NetDevice > device)
Associate a NetDevice to this node.
void SetTxPowerStart(double start)
Sets the minimum available transmission power level (dBm).
Time Seconds(double value)
Construct a Time in the indicated unit.
void SetChannelNumber(uint8_t id) override
Set channel number.
void SetDefault(std::string name, const AttributeValue &value)
Ptr< SpectrumWifiPhy > m_txA
transmit A function
uint64_t m_uidA
UID to use for packet A.
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit.
#define NS_LOG_ERROR(msg)
Use NS_LOG to output a message of level LOG_ERROR.
void SetMargin(double margin)
Sets the frame capture margin (dB).
void SetChannel(const Ptr< SpectrumChannel > channel)
Set the SpectrumChannel this SpectrumWifiPhy is to be connected to.
This class can be used to hold variables of floating point type such as 'double' or 'float'...
void ConfigureStandardAndBand(WifiPhyStandard standard, WifiPhyBand band) override
Configure the PHY-level parameters for different Wi-Fi standard.
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...
void CreateWifiSpectrumPhyInterface(Ptr< NetDevice > device)
Method to encapsulate the creation of the WifiSpectrumPhyInterface object (used to bind the WifiSpect...
void SendA(void) const
Send A function.