20 #include "ns3/pointer.h" 21 #include "ns3/string.h" 22 #include "ns3/config.h" 23 #include "ns3/names.h" 24 #include "ns3/abort.h" 25 #include "ns3/wave-net-device.h" 26 #include "ns3/minstrel-wifi-manager.h" 27 #include "ns3/radiotap-header.h" 28 #include "ns3/unused.h" 29 #include "ns3/wifi-ack-policy-selector.h" 55 NS_LOG_FUNCTION (stream << context << p << mode << preamble << txLevel);
142 NS_LOG_INFO (
"YansWavePhyHelper::EnablePcapInternal(): Device " << &device <<
" not of type ns3::WaveNetDevice");
146 std::vector<Ptr<WifiPhy> > phys = device->
GetPhys ();
147 NS_ABORT_MSG_IF (phys.size () == 0,
"EnablePcapInternal(): Phy layer in WaveNetDevice must be set");
151 std::string filename;
152 if (explicitFilename)
163 std::vector<Ptr<WifiPhy> >::iterator i;
164 for (i = phys.begin (); i != phys.end (); ++i)
177 bool explicitFilename)
187 NS_LOG_INFO (
"EnableAsciiInternal(): Device " << device <<
" not of type ns3::WaveNetDevice");
197 uint32_t nodeid = nd->GetNode ()->GetId ();
198 uint32_t deviceid = nd->GetIfIndex ();
199 std::ostringstream oss;
216 std::string filename;
217 if (explicitFilename)
234 oss <<
"/NodeList/" << nodeid <<
"/DeviceList/" << deviceid <<
"/$ns3::WaveNetDevice/PhyEntities/*/$ns3::WifiPhy/State/RxOk";
238 oss <<
"/NodeList/" << nodeid <<
"/DeviceList/" << deviceid <<
"/$ns3::WaveNetDevice/PhyEntities/*/$ns3::WifiPhy/State/Tx";
252 oss <<
"/NodeList/" << nodeid <<
"/DeviceList/" << deviceid <<
"/$ns3::WaveNetDevice/PhyEntities/*/$ns3::WifiPhy/RxOk";
256 oss <<
"/NodeList/" << nodeid <<
"/DeviceList/" << deviceid <<
"/$ns3::WaveNetDevice/PhyEntities/*/$ns3::WifiPhy/State/Tx";
279 "ControlMode",
StringValue (
"OfdmRate6MbpsBW10MHz"),
280 "NonUnicastMode",
StringValue (
"OfdmRate6MbpsBW10MHz"));
291 if (channelNumbers.size () == 0)
295 for (std::vector<uint32_t>::iterator i = channelNumbers.begin (); i != channelNumbers.end (); ++i)
299 NS_FATAL_ERROR (
"the channel number " << (*i) <<
" is not a valid WAVE channel number");
314 NS_FATAL_ERROR (
"the number of assigned WAVE PHY entities is more than the number of valid WAVE channels");
396 catch (
const std::bad_cast &)
398 NS_FATAL_ERROR (
"WifiMacHelper should be the class or subclass of QosWaveMacHelper");
435 if (qosSupported.
Get ())
439 ackSelector->SetQosTxop (ptr.
Get<
QosTxop> ());
440 ptr.
Get<
QosTxop> ()->SetAckPolicySelector (ackSelector);
444 ackSelector->SetQosTxop (ptr.
Get<
QosTxop> ());
445 ptr.
Get<
QosTxop> ()->SetAckPolicySelector (ackSelector);
449 ackSelector->SetQosTxop (ptr.
Get<
QosTxop> ());
450 ptr.
Get<
QosTxop> ()->SetAckPolicySelector (ackSelector);
454 ackSelector->SetQosTxop (ptr.
Get<
QosTxop> ());
455 ptr.
Get<
QosTxop> ()->SetAckPolicySelector (ackSelector);
457 device->
AddMac (*k, ocbMac);
477 Ptr<Node> node = Names::Find<Node> (nodeName);
501 int64_t currentStream = stream;
510 std::vector<Ptr<WifiPhy> > phys = wave->
GetPhys ();
511 for (std::vector<
Ptr<WifiPhy> >::iterator j = phys.begin (); j != phys.end (); ++j)
513 currentStream += (*j)->AssignStreams (currentStream);
517 std::map<uint32_t, Ptr<OcbWifiMac> > macs = wave->
GetMacs ();
518 for ( std::map<uint32_t,
Ptr<OcbWifiMac> >::iterator k = macs.begin (); k != macs.end (); ++k)
527 currentStream += minstrel->AssignStreams (currentStream);
531 rmac->GetAttribute (
"Txop", ptr);
535 rmac->GetAttribute (
"VO_Txop", ptr);
539 rmac->GetAttribute (
"VI_Txop", ptr);
543 rmac->GetAttribute (
"BE_Txop", ptr);
547 rmac->GetAttribute (
"BK_Txop", ptr);
553 return (currentStream - stream);
static void EnableLogComponents(void)
Helper to enable all WaveNetDevice log components with one statement.
void CreateMacForChannel(std::vector< uint32_t > channelNumbers)
ObjectFactory m_channelScheduler
channel scheduler
ObjectFactory m_ackPolicySelector[4]
ack policy selector for all ACs
Manage ASCII trace files for device models.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
static std::vector< uint32_t > GetWaveChannels(void)
virtual void ConfigureStandard(enum WifiStandard standard)
AttributeValue implementation for Boolean.
int64_t AssignStreams(NetDeviceContainer c, int64_t stream)
Assign a fixed random variable stream number to the random variables used by the Phy and Mac aspects ...
static void AsciiPhyReceiveSinkWithoutContext(Ptr< OutputStreamWrapper > stream, Ptr< const Packet > p, double snr, WifiMode mode, enum WifiPreamble preamble)
ASCII Phy receive sink without context.
std::vector< Ptr< Node > >::const_iterator Iterator
Node container iterator.
Iterator End(void) const
Get an iterator which indicates past-the-last NetDevice in the container.
Hold variables of type string.
Hold a value for an Attribute.
Manage pcap files for device models.
void SetAckPolicySelectorForAc(AcIndex ac, std::string type, std::string n0="", const AttributeValue &v0=EmptyAttributeValue(), std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue())
Callback< R > MakeBoundCallback(R(*fnPtr)(TX), ARG a1)
Make Callbacks with one bound argument.
Handle packet fragmentation and retransmissions for QoS data frames as well as MSDU aggregation (A-MS...
double GetSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
void Set(const std::string &name, const AttributeValue &value, Args &&... args)
Set an attribute to be set during construction.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
static bool IsWaveChannel(uint32_t channelNumber)
void SetTypeId(TypeId tid)
Set the TypeId of the Objects to be created by this factory.
#define NS_UNUSED(x)
Mark a local variable as unused.
This class holds together multiple, ns3::WifiPhy, and ns3::OcbWifiMac (including ns3::WifiRemoteStati...
static void AsciiPhyReceiveSinkWithContext(Ptr< OutputStreamWrapper > stream, std::string context, Ptr< const Packet > p, double snr, WifiMode mode, enum WifiPreamble preamble)
ASCII Phy receive sink with context.
static WaveHelper Default(void)
void EnableForWave(Ptr< WaveNetDevice > device)
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
Ptr< OutputStreamWrapper > CreateFileStream(std::string filename, std::ios::openmode filemode=std::ios::out)
Create and initialize an output stream object we'll use to write the traced bits. ...
Iterator End(void) const
Get an iterator which indicates past-the-last Node in the container.
bool GetAttributeFailSafe(std::string name, AttributeValue &value) const
Get the value of an attribute without raising erros.
std::string GetFilenameFromDevice(std::string prefix, Ptr< NetDevice > device, bool useObjectNames=true)
Let the ascii trace helper figure out a reasonable filename to use for an ascii trace file associated...
virtual void SetAddress(Address address)
Set the address of this interface.
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
WifiPreamble
The type of preamble to be used by an IEEE 802.11 transmission.
void SetRemoteStationManager(std::string type, std::string n0="", const AttributeValue &v0=EmptyAttributeValue(), std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue())
static uint32_t GetNumberOfWaveChannels(void)
std::string GetFilenameFromDevice(std::string prefix, Ptr< NetDevice > device, bool useObjectNames=true)
Let the pcap helper figure out a reasonable filename to use for a pcap file associated with a device...
std::vector< uint32_t > m_macsForChannelNumber
MACs for channel number.
std::map< uint32_t, Ptr< OcbWifiMac > > GetMacs(void) const
void LogComponentEnable(char const *name, enum LogLevel level)
Enable the logging output associated with that log component.
static Mac48Address Allocate(void)
Allocate a new Mac48Address.
static void EnablePrinting(void)
Enable printing packets metadata.
virtual void EnablePcapInternal(std::string prefix, Ptr< NetDevice > nd, bool promiscuous, bool explicitFilename)
Enable pcap output the indicated net device.
Ptr< Object > Create(void) const
Create an Object instance of the configured TypeId.
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
Iterator Begin(void) const
Get an iterator which refers to the first NetDevice in the container.
static void PcapSniffTxEvent(Ptr< PcapFileWrapper > file, Ptr< const Packet > packet, uint16_t channelFreqMhz, WifiTxVector txVector, MpduInfo aMpdu, uint16_t staId=SU_STA_ID)
void SetChannelScheduler(Ptr< ChannelScheduler > channelScheduler)
helps to create WaveNetDevice objects
void SetChannelManager(Ptr< ChannelManager > channelManager)
holds a vector of ns3::NetDevice pointers
OFDM PHY (Clause 17 - amendment for 10 MHz and 5 MHz channels)
void SetChannelScheduler(std::string type, std::string n0="", const AttributeValue &v0=EmptyAttributeValue(), std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue())
void ConnectWithoutContext(std::string path, const CallbackBase &cb)
Qos Wave Mac Helper class.
PcapHelper::DataLinkType GetPcapDataLinkType(void) const
Get the data link type of PCAP traces to be used.
hold a list of per-remote-station state.
virtual void EnableAsciiInternal(Ptr< OutputStreamWrapper > stream, std::string prefix, Ptr< NetDevice > nd, bool explicitFilename)
Enable ascii trace output on the indicated net device.
void Connect(std::string path, const CallbackBase &cb)
static uint32_t GetCch(void)
virtual void SetWifiRemoteStationManager(const Ptr< WifiRemoteStationManager > stationManager)
Every class exported by the ns3 library is enclosed in the ns3 namespace.
keep track of a set of node pointers.
Hold objects of type Ptr<T>.
void CreatePhys(uint32_t phys)
virtual NetDeviceContainer Install(const WifiPhyHelper &phy, const WifiMacHelper &mac, NodeContainer c) const
create MAC layers for a ns3::WifiNetDevice.
To trace WaveNetDevice, we have to overwrite the trace functions of class YansWifiPhyHelper.
static Time Now(void)
Return the current simulation virtual time.
void SetErrorRateModel(std::string name, std::string n0="", const AttributeValue &v0=EmptyAttributeValue(), std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue())
virtual Ptr< WifiMac > Create(Ptr< NetDevice > device) const
void AddPhy(Ptr< WifiPhy > phy)
ObjectFactory m_stationManager
station manager
Instantiate subclasses of ns3::Object.
static void PcapSniffRxEvent(Ptr< PcapFileWrapper > file, Ptr< const Packet > packet, uint16_t channelFreqMhz, WifiTxVector txVector, MpduInfo aMpdu, SignalNoiseDbm signalNoise, uint16_t staId=SU_STA_ID)
static void EnableLogComponents(void)
Helper to enable all WifiNetDevice log components with one statement.
virtual Ptr< WifiPhy > Create(Ptr< Node > node, Ptr< NetDevice > device) const =0
uint32_t AddDevice(Ptr< NetDevice > device)
Associate a NetDevice to this node.
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message.
static YansWavePhyHelper Default(void)
Create a phy helper in a default working state.
void SetVsaManager(Ptr< VsaManager > vsaManager)
std::vector< Ptr< NetDevice > >::const_iterator Iterator
NetDevice container iterator.
void AddMac(uint32_t channelNumber, Ptr< OcbWifiMac > mac)
std::vector< Ptr< WifiPhy > > GetPhys(void) const
void SetChannelCoordinator(Ptr< ChannelCoordinator > channelCoordinator)
WifiAckPolicySelector is in charge of selecting the acknowledgment policy for PSDUs containing QoS Da...
static void AsciiPhyTransmitSinkWithContext(Ptr< OutputStreamWrapper > stream, std::string context, Ptr< const Packet > p, WifiMode mode, WifiPreamble preamble, uint8_t txLevel)
ASCII Phy transmit sink with context.
AcIndex
This enumeration defines the Access Categories as an enumeration with values corresponding to the AC ...
std::ostream * GetStream(void)
Return a pointer to an ostream previously set in the wrapper.
This class will assign channel access for requests from higher layers.
Iterator Begin(void) const
Get an iterator which refers to the first Node in the container.
uint32_t m_physNumber
Phy number.
Handle packet fragmentation and retransmissions for data and management frames.
static void AsciiPhyTransmitSinkWithoutContext(Ptr< OutputStreamWrapper > stream, Ptr< const Packet > p, WifiMode mode, WifiPreamble preamble, uint8_t txLevel)
ASCII Phy transmit sink without context.