|
A Discrete-Event Network Simulator
|
API
|
Go to the documentation of this file.
23 #include "ns3/wifi-net-device.h"
24 #include "ns3/ap-wifi-mac.h"
25 #include "ns3/ampdu-subframe-header.h"
26 #include "ns3/mobility-model.h"
28 #include "ns3/pointer.h"
29 #include "ns3/radiotap-header.h"
30 #include "ns3/config.h"
31 #include "ns3/names.h"
32 #include "ns3/net-device-queue-interface.h"
33 #include "ns3/wifi-mac-queue.h"
34 #include "ns3/qos-utils.h"
35 #include "ns3/ht-configuration.h"
36 #include "ns3/vht-configuration.h"
37 #include "ns3/he-configuration.h"
38 #include "ns3/obss-pd-algorithm.h"
63 NS_LOG_FUNCTION (stream << context << p << mode << preamble << txLevel);
224 uint16_t channelFreqMhz,
229 uint32_t dlt =
file->GetDataLinkType ();
237 NS_FATAL_ERROR (
"PcapSniffTxEvent(): DLT_PRISM_HEADER not implemented");
250 NS_ABORT_MSG (
"PcapSniffTxEvent(): Unexpected data link type " << dlt);
258 uint16_t channelFreqMhz,
264 uint32_t dlt =
file->GetDataLinkType ();
272 NS_FATAL_ERROR (
"PcapSniffRxEvent(): DLT_PRISM_HEADER not implemented");
279 GetRadiotapHeader (header, p, channelFreqMhz, txVector, aMpdu, staId, signalNoise);
285 NS_ABORT_MSG (
"PcapSniffRxEvent(): Unexpected data link type " << dlt);
293 uint16_t channelFreqMhz,
308 uint16_t channelFreqMhz,
339 header.
SetRate (
static_cast<uint8_t
> (rate));
342 uint16_t channelFlags = 0;
356 if (channelFreqMhz < 2500)
389 if (txVector.
GetNess () & 0x01)
393 if (txVector.
GetNess () & 0x02)
415 uint32_t extractedLength;
418 packet = packet->
CreateFragment (0,
static_cast<uint32_t
> (extractedLength));
430 uint8_t vhtBandwidth = 0;
431 uint8_t vhtMcsNss[4] = {0,0,0,0};
432 uint8_t vhtCoding = 0;
433 uint8_t vhtGroupId = 0;
434 uint16_t vhtPartialAid = 0;
466 vhtMcsNss[0] |= (txVector.
GetNss (staId) & 0x0f);
469 header.
SetVhtFields (vhtKnown, vhtFlags, vhtBandwidth, vhtMcsNss, vhtCoding, vhtGroupId, vhtPartialAid);
505 data4 |= ((staId << 4) & 0x7ff0);
560 header.
SetHeFields (data1, data2, data3, data4, data5, 0);
566 std::array<uint8_t, 4> ruChannel1, ruChannel2;
587 NS_ABORT_MSG (
"WifiPhyHelper::SetPcapFormat(): Unexpected format");
600 NS_LOG_FUNCTION (
this << prefix << nd << promiscuous << explicitFilename);
608 NS_LOG_INFO (
"WifiHelper::EnablePcapInternal(): Device " << &device <<
" not of type ns3::WifiNetDevice");
613 NS_ABORT_MSG_IF (
phy == 0,
"WifiPhyHelper::EnablePcapInternal(): Phy layer in WifiNetDevice must be set");
617 std::string filename;
618 if (explicitFilename)
638 bool explicitFilename)
646 NS_LOG_INFO (
"WifiHelper::EnableAsciiInternal(): Device " << device <<
" not of type ns3::WifiNetDevice");
656 std::ostringstream oss;
669 std::string filename;
670 if (explicitFilename)
685 oss <<
"/NodeList/" << nodeid <<
"/DeviceList/" << deviceid <<
"/$ns3::WifiNetDevice/Phy/State/RxOk";
689 oss <<
"/NodeList/" << nodeid <<
"/DeviceList/" << deviceid <<
"/$ns3::WifiNetDevice/Phy/State/Tx";
701 oss <<
"/NodeList/" << nodeid <<
"/DeviceList/" << deviceid <<
"/$ns3::WifiNetDevice/Phy/State/RxOk";
705 oss <<
"/NodeList/" << nodeid <<
"/DeviceList/" << deviceid <<
"/$ns3::WifiNetDevice/Phy/State/Tx";
812 phy->ConfigureStandardAndBand (it->second.phyStandard, it->second.phyBand);
822 obssPdAlgorithm->ConnectWifiNetDevice (device);
834 rmac->GetAttributeFailSafe (
"QosSupported", qosSupported);
835 if (qosSupported.
Get ())
837 ndqi = CreateObjectWithAttributes<NetDeviceQueueInterface> (
"NTxQueues",
843 ndqi->GetTxQueue (
static_cast<std::size_t
> (ac))->ConnectQueueTraces (wmq);
849 ndqi = CreateObject<NetDeviceQueueInterface> ();
851 wmq = rmac->GetTxop ()->GetWifiMacQueue ();
852 ndqi->GetTxQueue (0)->ConnectQueueTraces (wmq);
878 Ptr<Node> node = Names::Find<Node> (nodeName);
983 int64_t currentStream = stream;
992 currentStream +=
wifi->GetPhy ()->AssignStreams (currentStream);
995 currentStream +=
wifi->GetRemoteStationManager ()->AssignStreams (currentStream);
1003 rmac->GetAttribute (
"Txop", ptr);
1007 rmac->GetAttribute (
"VO_Txop", ptr);
1011 rmac->GetAttribute (
"VI_Txop", ptr);
1015 rmac->GetAttribute (
"BE_Txop", ptr);
1019 rmac->GetAttribute (
"BK_Txop", ptr);
1027 currentStream += apmac->AssignStreams (currentStream);
1032 return (currentStream - stream);
holds a vector of ns3::NetDevice pointers
a unique identifier for an interface.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
double noise
noise power in dBm
Ptr< PcapFileWrapper > CreateFile(std::string filename, std::ios::openmode filemode, DataLinkType dataLinkType, uint32_t snapLen=std::numeric_limits< uint32_t >::max(), int32_t tzCorrection=0)
Create and initialize a pcap file.
bool IsStbc(void) const
Check if STBC is used or not.
uint8_t GetBssColor(void) const
Get the BSS color.
AttributeValue implementation for Boolean.
virtual void EnablePcapInternal(std::string prefix, Ptr< NetDevice > nd, bool promiscuous, bool explicitFilename) override
Enable pcap output the indicated net device.
static void PcapSniffTxEvent(Ptr< PcapFileWrapper > file, Ptr< const Packet > packet, uint16_t channelFreqMhz, WifiTxVector txVector, MpduInfo aMpdu, uint16_t staId=SU_STA_ID)
uint32_t GetId(void) const
void AddHeader(const Header &header)
Add header to this packet.
Ptr< WifiPhy > GetPhy(void) const
Ptr< Packet > CreateFragment(uint32_t start, uint32_t length) const
Create a new packet which contains a fragment of the original packet.
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 Time Now(void)
Return the current simulation virtual time.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
virtual void EnableAsciiInternal(Ptr< OutputStreamWrapper > stream, std::string prefix, Ptr< NetDevice > nd, bool explicitFilename) override
Enable ASCII trace output on the indicated net device.
void SetMac(const Ptr< WifiMac > mac)
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.
@ WIFI_MOD_CLASS_HT
HT (Clause 19)
@ WIFI_MOD_CLASS_HE
HE (Clause 27)
static void EnableLogComponents(void)
Helper to enable all WifiNetDevice log components with one statement.
@ LOG_PREFIX_NODE
Prefix all trace prints with simulation node.
void SetHeConfiguration(Ptr< HeConfiguration > heConfiguration)
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
static void EnablePrinting(void)
Enable printing packets metadata.
@ LOG_LEVEL_ALL
Print everything.
Hold a value for an Attribute.
ObjectFactory m_stationManager
station manager
void SetVhtConfiguration(Ptr< VhtConfiguration > vhtConfiguration)
WifiModulationClass GetModulationClass() const
ObjectFactory m_errorRateModel
error rate model
void LogComponentEnable(char const *name, enum LogLevel level)
Enable the logging output associated with that log component.
void LogComponentEnableAll(enum LogLevel level)
Enable the logging output for all registered log components.
hold a list of per-remote-station state.
ObjectFactory m_preambleDetectionModel
preamble detection model
Hold objects of type Ptr<T>.
@ DLT_IEEE802_11_RADIO
Include Radiotap link layer information.
std::ostream * GetStream(void)
Return a pointer to an ostream previously set in the wrapper.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
bool IsTypeIdSet(void) const
Check if the ObjectFactory has been configured with a TypeId.
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model.
void SetObssPdAlgorithm(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 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())
void SetSelectQueueCallback(SelectQueueCallback f)
WifiStandard m_standard
wifi standard
SignalNoiseDbm structure.
Hold together all Wifi-related objects.
void SetHtConfiguration(Ptr< HtConfiguration > htConfiguration)
uint32_t mpduRefNumber
MPDU ref number.
bool GetPrimary80MHz(void) const
Get the primary 80 MHz flag.
void DisablePreambleDetectionModel()
Disable the preamble detection model.
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
PcapHelper::DataLinkType GetPcapDataLinkType(void) const
Get the data link type of PCAP traces to be used.
@ WIFI_PHY_STANDARD_80211ax
HE PHY (clause 26)
void ConnectWithoutContext(std::string path, const CallbackBase &cb)
Iterator Begin(void) const
Get an iterator which refers to the first NetDevice in the container.
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.
represent a single transmission mode
PcapHelper::DataLinkType m_pcapDlt
PCAP data link type.
Iterator Begin(void) const
Get an iterator which refers to the first Node in the container.
ObjectFactory m_frameCaptureModel
frame capture model
WifiHelper()
Create a Wifi helper in an empty state: all its parameters must be set before calling ns3::WifiHelper...
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
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.
virtual Ptr< Node > GetNode(void) const =0
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
Ptr< WifiMacQueue > GetWifiMacQueue() const
Return the packet queue associated with this Txop.
Instantiate subclasses of ns3::Object.
RuType
The different HE Resource Unit (RU) types.
void AggregateObject(Ptr< Object > other)
Aggregate two Objects together.
bool IsAggregation(void) const
Checks whether the PSDU contains A-MPDU.
std::function< std::size_t(Ptr< QueueItem >)> SelectQueueCallback
Callback invoked to determine the MAC queue selected for a given packet.
uint8_t GetNess(void) const
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.
WifiPreamble GetPreambleType(void) const
std::size_t GetIndex(void) const
Get the RU index.
@ DLT_IEEE802_11
IEEE 802.11 Wireless LAN headers on packets.
HeMuUserInfo GetHeMuUserInfo(uint16_t staId) const
Get the HE MU user-specific transmission information for the given STA-ID.
ObjectFactory m_obssPdAlgorithm
OBSS_PD algorithm.
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message.
uint32_t AddDevice(Ptr< NetDevice > device)
Associate a NetDevice to this node.
Manage pcap files for device models.
Iterator End(void) const
Get an iterator which indicates past-the-last NetDevice in the container.
static void AsciiPhyTransmitSinkWithoutContext(Ptr< OutputStreamWrapper > stream, Ptr< const Packet > p, WifiMode mode, WifiPreamble preamble, uint8_t txLevel)
ASCII Phy transmit sink without context.
uint16_t GetChannelWidth(void) const
ObjectFactory m_phy
PHY object.
Handle packet fragmentation and retransmissions for QoS data frames as well as MSDU aggregation (A-MS...
virtual Ptr< WifiPhy > Create(Ptr< Node > node, Ptr< NetDevice > device) const =0
HeRu::RuSpec ru
RU specification.
static void GetRadiotapHeader(RadiotapHeader &header, Ptr< Packet > packet, uint16_t channelFreqMhz, WifiTxVector txVector, MpduInfo aMpdu, uint16_t staId)
Get the Radiotap header for a transmitted packet.
@ WIFI_PHY_STANDARD_80211n
HT PHY (clause 20)
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())
@ WIFI_PHY_STANDARD_80211ac
VHT PHY (clause 22)
uint8_t SelectQueueByDSField(Ptr< QueueItem > item)
Determine the TX queue for a given packet.
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 ...
WifiPreamble
The type of preamble to be used by an IEEE 802.11 transmission.
std::vector< Ptr< NetDevice > >::const_iterator Iterator
NetDevice container iterator.
Manage ASCII trace files for device models.
std::vector< Ptr< Node > >::const_iterator Iterator
Node container iterator.
void SetPcapDataLinkType(SupportedPcapDataLinkTypes dlt)
Set the data link type of PCAP traces to be used.
@ LOG_PREFIX_TIME
Prefix all trace prints with simulation time.
uint16_t GetGuardInterval(void) const
void Connect(std::string path, const CallbackBase &cb)
OBSS PD algorithm interface.
@ WIFI_PHY_BAND_2_4GHZ
The 2.4 GHz band.
static void AsciiPhyReceiveSinkWithoutContext(Ptr< OutputStreamWrapper > stream, Ptr< const Packet > p, double snr, WifiMode mode, enum WifiPreamble preamble)
ASCII Phy receive sink without context.
uint8_t GetNss(uint16_t staId=SU_STA_ID) const
If this TX vector is associated with an SU PPDU, return the number of spatial streams.
virtual void SetStandard(WifiStandard standard)
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
SelectQueueCallback m_selectQueueCallback
select queue callback
Callback< R > MakeBoundCallback(R(*fnPtr)(TX), ARG a1)
Make Callbacks with one bound argument.
void SetPreambleDetectionModel(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())
Ptr< Packet > Copy(void) const
performs a COW copy of the packet.
void SetRemoteStationManager(const Ptr< WifiRemoteStationManager > manager)
void Set(const std::string &name, const AttributeValue &value, Args &&... args)
Set an attribute to be set during construction.
double f(double x, void *params)
RuType GetRuType(void) const
Get the RU type.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
Keep track of the current position and velocity of an object.
keep track of a set of node pointers.
SupportedPcapDataLinkTypes
An enumeration of the pcap data link types (DLTs) which this helper supports.
Iterator End(void) const
Get an iterator which indicates past-the-last Node in the container.
void SetFrameCaptureModel(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())
void SetTypeId(TypeId tid)
Set the TypeId of the Objects to be created by this factory.
Hold an unsigned integer type.
@ LAST_MPDU_IN_AGGREGATE
The MPDU is the last aggregate in an A-MPDU with multiple MPDUs.
Ptr< Object > Create(void) const
Create an Object instance of the configured TypeId.
@ DLT_PRISM_HEADER
Include Prism monitor mode information.
create MAC layers for a ns3::WifiNetDevice.
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...
const std::map< WifiStandard, WifiStandardInfo > wifiStandards
map a given standard configured by the user to the corresponding WifiStandardInfo
MpduType type
type of MPDU
double signal
signal strength in dBm
WifiStandard
Identifies the allowed configurations that a Wifi device is configured to use.
uint64_t GetDataRate(uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const
@ WIFI_MOD_CLASS_VHT
VHT (Clause 22)
virtual Ptr< WifiMac > Create(Ptr< NetDevice > device, WifiStandard standard) const
DataLinkType
This enumeration holds the data link types that will be written to the pcap file.
virtual uint32_t GetIfIndex(void) const =0
void Set(std::string name, const AttributeValue &v)
double GetSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
WifiMode GetMode(uint16_t staId=SU_STA_ID) const
If this TX vector is associated with an SU PPDU, return the selected payload transmission mode.
void SetPhy(const Ptr< WifiPhy > phy)
uint8_t GetMcsValue(void) const
virtual NetDeviceContainer Install(const WifiPhyHelper &phy, const WifiMacHelper &mac, NodeContainer::Iterator first, NodeContainer::Iterator last) const
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
Handle packet fragmentation and retransmissions for data and management frames.