|
A Discrete-Event Network Simulator
|
API
|
Go to the documentation of this file.
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;
126 struct Input m_input;
146 m_txA->Send (psdu, txVector);
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> ();
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;
bool m_droppedB
flag to indicate whether packet B has been dropped
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Ptr< SpectrumWifiPhy > m_txA
transmit A function
void SetMargin(double margin)
Sets the frame capture margin (dB).
Parse command-line arguments.
void Dispose(void)
Dispose of this Object.
void SetTxPowerLevel(uint8_t powerlevel)
Sets the selected transmission power level.
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.
void SetChannelNumber(uint8_t id) override
Set channel number.
bool expectRxBSuccessfull
Every class exported by the ns3 library is enclosed in the ns3 namespace.
static const uint16_t WIFI_MAC_FCS_LENGTH
The length in octects of the IEEE 802.11 MAC FCS field.
void SendB(void) const
Send B function.
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit.
void SetTxPowerStart(double start)
Sets the minimum available transmission power level (dBm).
@ WIFI_PHY_BAND_5GHZ
The 5 GHz band.
void PacketDropped(Ptr< const Packet > packet, WifiPhyRxfailureReason reason)
Function triggered when a packet is dropped.
void SendA(void) const
Send A function.
void SetChannel(const Ptr< SpectrumChannel > channel)
Set the SpectrumChannel this SpectrumWifiPhy is to be connected to.
void SetPosition(const Vector &position)
void SetTxPowerEnd(double end)
Sets the maximum available transmission power level (dBm).
void SetMode(WifiMode mode)
Sets the selected payload transmission mode.
void ConfigureStandardAndBand(WifiPhyStandard standard, WifiPhyBand band) override
Configure the PHY-level parameters for different Wi-Fi standard.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
WifiPhyStandard
Identifies the PHY specification that a Wifi device is configured to use.
This class can be used to hold variables of floating point type such as 'double' or 'float'.
@ WIFI_PHY_STANDARD_80211ax
HE PHY (clause 26)
void CreateWifiSpectrumPhyInterface(Ptr< NetDevice > device)
Method to encapsulate the creation of the WifiSpectrumPhyInterface object (used to bind the WifiSpect...
WifiPhyRxfailureReason
Enumeration of the possible reception failure reasons.
void experiment(std::string queue_disc_type)
represent a single transmission mode
@ WIFI_PHY_STANDARD_80211a
OFDM PHY (Clause 17)
@ WIFI_PHY_STANDARD_80211b
DSSS PHY (Clause 15) and HR/DSSS PHY (Clause 18)
Simulation virtual time values and global simulation resolution.
void SetChannelWidth(uint16_t channelWidth)
Sets the selected channelWidth (in MHz)
Ptr< SpectrumWifiPhy > m_txB
transmit B function
uint32_t AddDevice(Ptr< NetDevice > device)
Associate a NetDevice to this node.
void SetMobility(const Ptr< MobilityModel > mobility)
assign a mobility model to this device
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...
@ WIFI_PHY_STANDARD_80211n
HT PHY (clause 20)
@ WIFI_PHY_STANDARD_80211ac
VHT PHY (clause 22)
WifiPreamble
The type of preamble to be used by an IEEE 802.11 transmission.
#define NS_LOG_ERROR(msg)
Use NS_LOG to output a message of level LOG_ERROR.
bool expectRxASuccessfull
void SetFrameCaptureModel(const Ptr< FrameCaptureModel > frameCaptureModel)
Sets the frame capture model.
@ WIFI_PHY_BAND_2_4GHZ
The 2.4 GHz band.
Time Seconds(double value)
Construct a Time in the indicated unit.
uint64_t m_uidA
UID to use for packet A.
void Run(struct InterferenceExperiment::Input input)
Run function.
void SetDefault(std::string name, const AttributeValue &value)
WifiPhyBand
Identifies the PHY band.
struct Input m_input
input
bool TraceConnectWithoutContext(std::string name, const CallbackBase &cb)
Connect a TraceSource to a Callback without a context.
void SetPreambleType(WifiPreamble preamble)
Sets the preamble type.
void SetErrorRateModel(const Ptr< ErrorRateModel > rate)
Sets the error rate model.
uint64_t m_uidB
UID to use for packet B.
@ WIFI_PHY_STANDARD_80211g
ERP-OFDM PHY (Clause 19, Section 19.5)
void SetPhy(const Ptr< WifiPhy > phy)
uint64_t GetUid(void) const
Returns the packet's Uid.