wifi: Update documentation

This commit is contained in:
Stefano Avallone
2022-01-08 19:22:21 +01:00
parent a640191ae5
commit 6c334e036a
2 changed files with 72 additions and 74 deletions

View File

@@ -35,7 +35,7 @@ on the IEEE 802.11 standard [ieee80211]_. We will go into more detail below but
The set of 802.11 models provided in |ns3| attempts to provide an accurate
MAC-level implementation of the 802.11 specification and to provide a
packet-level abstraction of the PHY-level for different PHYs, corresponding to
packet-level abstraction of the PHY-level for different PHYs, corresponding to
802.11a/b/e/g/n/ac/ax specifications.
In |ns3|, nodes can have multiple WifiNetDevices on separate channels, and the
@@ -56,18 +56,18 @@ The implementation is modular and provides roughly three sublayers of models:
In |ns3|, the lower-level MAC is comprised of a **Frame Exchange Manager** hierarchy,
a **Channel Access Manager** and a **MAC middle** entity.
* the so-called **MAC high models**: they implement non-time-critical processes
in Wifi such as the MAC-level beacon generation, probing, and association
in Wifi such as the MAC-level beacon generation, probing, and association
state machines, and a set of **Rate control algorithms**. In the literature,
this sublayer is sometimes called the **upper MAC** and consists of more
software-oriented implementations vs. time-critical hardware implementations.
this sublayer is sometimes called the **upper MAC** and consists of more
software-oriented implementations vs. time-critical hardware implementations.
Next, we provide an design overview of each layer, shown in
Next, we provide an design overview of each layer, shown in
Figure :ref:`wifi-architecture`.
.. _wifi-architecture:
.. figure:: figures/WifiArchitecture.*
*WifiNetDevice architecture*
MAC high models
@@ -76,7 +76,7 @@ MAC high models
There are presently three **MAC high models** that provide for the three
(non-mesh; the mesh equivalent, which is a sibling of these with common
parent ``ns3::RegularWifiMac``, is not discussed here) Wi-Fi topological
elements - Access Point (AP) (``ns3::ApWifiMac``),
elements - Access Point (AP) (``ns3::ApWifiMac``),
non-AP Station (STA) (``ns3::StaWifiMac``), and STA in an Independent
Basic Service Set (IBSS) - also commonly referred to as an ad hoc
network (``ns3::AdhocWifiMac``).
@@ -95,7 +95,7 @@ configuration, an attribute ``QosSupported`` that allows
configuration of 802.11e/WMM-style QoS support.
There are also several **rate control algorithms** that can be used by the
MAC low layer. A complete list of available rate control algorithms is
MAC low layer. A complete list of available rate control algorithms is
provided in a separate section.
MAC low layer
@@ -111,13 +111,13 @@ The **MAC low layer** is split into three main components:
#. ``ns3::Txop`` and ``ns3::QosTxop`` which handle the packet queue.
The ``ns3::Txop`` object is used by high MACs that are not QoS-enabled,
and for transmission of frames (e.g., of type Management)
that the standard says should access the medium using the DCF.
that the standard says should access the medium using the DCF.
``ns3::QosTxop`` is used by QoS-enabled high MACs.
PHY layer models
================
In short, the physical layer models are mainly responsible for modeling
In short, the physical layer models are mainly responsible for modeling
the reception of packets and for tracking energy consumption. There
are typically three main components to packet reception:
@@ -146,10 +146,10 @@ include multiple technologies coexisting on the same channel.
Scope and Limitations
*********************
The IEEE 802.11 standard [ieee80211]_ is a large specification,
and not all aspects are covered by |ns3|; the documentation of |ns3|'s
conformance by itself would lead to a very long document. This section
attempts to summarize compliance with the standard and with behavior
The IEEE 802.11 standard [ieee80211]_ is a large specification,
and not all aspects are covered by |ns3|; the documentation of |ns3|'s
conformance by itself would lead to a very long document. This section
attempts to summarize compliance with the standard and with behavior
found in practice.
The physical layer and channel models operate on a per-packet basis, with
@@ -169,6 +169,7 @@ The following details pertain to the physical layer and channel models:
* 802.11n/ac/ax beamforming is not supported
* 802.11n RIFS is not supported
* 802.11 PCF/HCF/HCCA are not implemented
* Channel Switch Announcement is not supported
* Authentication and encryption are missing
* Processing delays are not modeled
* Channel bonding implementation only supports the use of the configured channel width
@@ -198,7 +199,7 @@ We organize these more detailed sections from the bottom-up, in terms of
layering, by describing the channel and PHY models first, followed by
the MAC models.
We focus first on the choice between physical layer frameworks. |ns3|
We focus first on the choice between physical layer frameworks. |ns3|
contains support for a Wi-Fi-only physical layer model called YansWifiPhy
that offers no frequency-level decomposition of the signal. For simulations
that involve only Wi-Fi signals on the Wi-Fi channel, and that do not
@@ -211,12 +212,12 @@ similarly configured.
The SpectrumWifiPhy framework uses the :ref:`sec-spectrum-module` channel
framework.
The YansWifiChannel is the only concrete channel model class in
the |ns3| wifi module. The
``ns3::YansWifiChannel`` implementation uses the propagation loss and
The YansWifiChannel is the only concrete channel model class in
the |ns3| wifi module. The
``ns3::YansWifiChannel`` implementation uses the propagation loss and
delay models provided within the |ns3| :ref:`Propagation` module.
In particular, a number of propagation models can be added (chained together,
if multiple loss models are added) to the channel object, and a propagation
if multiple loss models are added) to the channel object, and a propagation
delay model also added. Packets sent from a ``ns3::YansWifiPhy`` object
onto the channel with a particular signal power, are copied to all of the
other ``ns3::YansWifiPhy`` objects after the signal power is reduced due
@@ -225,11 +226,11 @@ transmission (serialization) delay and propagation delay due to
any channel propagation delay model (typically due to speed-of-light
delay between the positions of the devices).
Only objects of ``ns3::YansWifiPhy`` may be attached to a
``ns3::YansWifiChannel``; therefore, objects modeling other
Only objects of ``ns3::YansWifiPhy`` may be attached to a
``ns3::YansWifiChannel``; therefore, objects modeling other
(interfering) technologies such as LTE are not allowed. Furthermore,
packets from different channels do not interact; if a channel is logically
configured for e.g. channels 5 and 6, the packets do not cause
configured for e.g. channels 5 and 6, the packets do not cause
adjacent channel interference (even if their channel numbers overlap).
WifiPhy and related models
@@ -247,7 +248,7 @@ and energy consumption. The ``ns3::WifiPhy`` hooks to the ``ns3::FrameExchangeM
object in the WifiNetDevice.
There are currently two implementations of the ``WifiPhy``: the
``ns3::YansWifiPhy`` and the ``ns3::SpectrumWifiPhy``. They each work in
``ns3::YansWifiPhy`` and the ``ns3::SpectrumWifiPhy``. They each work in
conjunction with five other objects:
* **PhyEntity**: Contains the amendment-specific part of the PHY processing
@@ -348,14 +349,14 @@ Class ``ns3::YansWifiPhy`` is responsible for taking packets passed to
it from the MAC (the ``ns3::FrameExchangeManager`` object) and sending them onto the
``ns3::YansWifiChannel`` to which it is attached. It is also responsible
to receive packets from that channel, and, if reception is deemed to have
been successful, to pass them up to the MAC.
been successful, to pass them up to the MAC.
The energy of the signal intended to be received is
The energy of the signal intended to be received is
calculated from the transmission power and adjusted based on the Tx gain
of the transmitter, Rx gain of the receiver, and any path loss propagation
model in effect.
Class ``ns3::WifiPhyStateHelper`` manages the state machine of the PHY
Class ``ns3::WifiPhyStateHelper`` manages the state machine of the PHY
layer, and allows other objects to hook as *listeners* to monitor PHY
state. The main use of listeners is for the MAC layer to know when
the PHY is busy or not (for transmission and collision avoidance).
@@ -390,7 +391,7 @@ spatial reuse considerations. Users are cautioned about the behavior of
raising this threshold; namely, that all packets with power below this
threshold will be discarded upon reception.
In ``StartReceivePreamble ()``, the packet is immediately added
In ``StartReceivePreamble ()``, the packet is immediately added
to the interference helper for signal-to-noise
tracking, and then further reception steps are decided upon the state of
the PHY. In the case that the PHY is transmitting, for instance, the
@@ -411,13 +412,13 @@ an event ``PhyEntity::EndReceiveField ()`` is scheduled for the end of the
preamble and the PHY is put into the CCA_BUSY state. Currently, there is only a
simple threshold-based preamble detection model in ns-3,
called ``ThresholdPreambleDetectionModel``. If there is no preamble detection
model, the preamble is assumed to have been detected.
model, the preamble is assumed to have been detected.
It is important to note that, starting with the ns-3.30 release, the default
in the WifiPhyHelper is to add the ``ThresholdPreambleDetectionModel`` with
a threshold RSSI of -82 dBm, and a threshold SNR of 4 dB. Both the RSSI
and SNR must be above these respective values for the preamble to be
successfully detected. The default sensitivity has been reduced in ns-3.30
compared with that of previous releases, so some packet receptions that were
compared with that of previous releases, so some packet receptions that were
previously successful will now fail on this check. More details on the
modeling behind this change are provided in [lanante2019]_.
@@ -436,7 +437,7 @@ corresponding to the PHY header is evaluated for probability of error
based on the observed SNR. The InterferenceHelper object returns a value
for "probability of error (PER)" for this header based on the SNR that has
been tracked by the InterferenceHelper. The ``PhyEntity`` then draws
a random number from a uniform distribution and compares it against the
a random number from a uniform distribution and compares it against the
PER and decides success or failure.
This is iteratively performed up to the beginning of the data field
@@ -449,8 +450,8 @@ If, in the course of reception, a packet is errored or dropped due to
the PHY being in a state in which it cannot receive a packet, the packet
is added to the interference helper, and the aggregate of the energy of
all such signals is compared against an energy detection threshold to
determine whether the PHY should enter a CCA_BUSY state.
The ``WifiPhy::CcaEdThreshold`` attribute
determine whether the PHY should enter a CCA_BUSY state.
The ``WifiPhy::CcaEdThreshold`` attribute
corresponds to what the standard calls the "ED threshold" for CCA Mode 1.
In section 16.4.8.5 in the 802.11-2012 standard: "CCA Mode 1: Energy above
threshold. CCA shall report a busy medium upon detection of any energy above
@@ -490,12 +491,12 @@ the ``WifiPhy`` for a reception decision.
.. _snir:
.. figure:: figures/snir.*
*SNIR function over time*
From the SNIR function we can derive the Bit Error Rate (BER) and Packet
From the SNIR function we can derive the Bit Error Rate (BER) and Packet
Error Rate (PER) for
the modulation and coding scheme being used for the transmission.
the modulation and coding scheme being used for the transmission.
If MIMO is used and the number of spatial streams is lower than the number
of active antennas at the receiver, then a gain is applied to the calculated
@@ -606,16 +607,16 @@ The obtained results are very close to TGax curves as shown in Figure
.. figure:: figures/default-table-based-error-model-validation.*
:scale: 75%
*Comparison of table-based OFDM Error Model with TGax results.*
Legacy ErrorRateModels
######################
The original error rate model was called the ``ns3::YansErrorRateModel`` and
was based on analytical results. For 802.11b modulations, the 1 Mbps mode
was based on analytical results. For 802.11b modulations, the 1 Mbps mode
is based on DBPSK. BER is from equation 5.2-69 from [proakis2001]_.
The 2 Mbps model is based on DQPSK. Equation 8 of [ferrari2004]_.
The 2 Mbps model is based on DQPSK. Equation 8 of [ferrari2004]_.
More details are provided in [lacage2006yans]_.
The ``ns3::NistErrorRateModel`` was later added.
@@ -665,7 +666,7 @@ and classes found in the spectrum module:
* ``wifi-spectrum-value-helper.{cc,h}``
The current ``SpectrumWifiPhy`` class
The current ``SpectrumWifiPhy`` class
reuses the existing interference manager and error rate models originally
built for ``YansWifiPhy``, but allows, as a first step, foreign (non Wi-Fi)
signals to be treated as additive noise.
@@ -694,7 +695,7 @@ a few ``SpectrumModel``-related classes. The class
spectrum framework and spread their energy across the bands. The
spectrum is sub-divided into sub-bands (the width of an OFDM
subcarrier, which depends on the technology). The power allocated to a particular channel
is spread across the sub-bands roughly according to how power would
is spread across the sub-bands roughly according to how power would
be allocated to sub-carriers. Adjacent channels are models by the use of
OFDM transmit spectrum masks as defined in the standards.
@@ -788,11 +789,11 @@ following conditions are met:
The backoff procedure of DCF is described in section 10.3.4.3 of [ieee80211-2016]_.
* “A STA shall invoke the backoff procedure to transfer a frame
when finding the medium busy as indicated by either the physical or
when finding the medium busy as indicated by either the physical or
virtual CS mechanism.”
* “A backoff procedure shall be performed immediately after the end of
every transmission with the More Fragments bit set to 0 of an MPDU of
type Data, Management, or Control with subtype PS-Poll, even if no
* “A backoff procedure shall be performed immediately after the end of
every transmission with the More Fragments bit set to 0 of an MPDU of
type Data, Management, or Control with subtype PS-Poll, even if no
additional transmissions are currently queued.”
The EDCA backoff procedure is slightly different than the DCF backoff procedure
@@ -1204,10 +1205,10 @@ Depending on your goal, the common tasks are (in no particular order):
* Creating or modifying the default Wi-Fi frames/headers by making changes to ``wifi-mac-header.*``.
* MAC low modification. For example, handling new/modified control frames (think RTS/CTS/ACK/Block ACK),
making changes to two-way transaction/four-way transaction. Users usually make changes to
making changes to two-way transaction/four-way transaction. Users usually make changes to
``frame-exchange-manager.*`` or its subclasses to accomplish this.
Handling of control frames is performed in ``FrameExchangeManager::ReceiveMpdu``.
* MAC high modification. For example, handling new management frames (think beacon/probe),
* MAC high modification. For example, handling new management frames (think beacon/probe),
beacon/probe generation. Users usually make changes to ``regular-wifi-mac.*``,``sta-wifi-mac.*``, ``ap-wifi-mac.*``, or ``adhoc-wifi-mac.*`` to accomplish this.
* Wi-Fi queue management. The files ``txop.*`` and ``qos-txop.*`` are of interest for this task.
* Channel access management. Users should modify the files ``channel-access-manager.*``, which grant access to

View File

@@ -35,15 +35,15 @@ from the bottom layer (Channel) up to the device layer (WifiNetDevice).
To create a WifiNetDevice, users need to follow these steps:
* Decide on which physical layer framework, the ``SpectrumWifiPhy`` or
``YansWifiPhy``, to use. This will affect which Channel and Phy type to use.
* Decide on which physical layer framework, the ``SpectrumWifiPhy`` or
``YansWifiPhy``, to use. This will affect which Channel and Phy type to use.
* Configure the Channel: Channel takes care of getting signal
from one device to other devices on the same Wi-Fi channel.
The main configurations of WifiChannel are propagation loss model and propagation delay model.
* Configure the WifiPhy: WifiPhy takes care of actually sending and receiving wireless
signal from Channel. Here, WifiPhy decides whether each frame will be successfully
decoded or not depending on the received signal strength and noise. Thus, the main
configuration of WifiPhy is the error rate model, which is the one that actually
configuration of WifiPhy is the error rate model, which is the one that actually
calculates the probability of successfully decoding the frame based on the signal.
* Configure WifiMac: this step is more related to the architecture and device level.
The users configure the wifi architecture (i.e. ad-hoc or ap-sta) and whether QoS (802.11e),
@@ -74,7 +74,7 @@ default values in the simulator, and infrastructure mode::
// and install Wifi devices. Configure a Wifi standard to use, which
// will align various parameters in the Phy and Mac to standard defaults.
WifiHelper wifi;
wifi.SetStandard (WIFI_STANDARD_80211n_5GHZ);
wifi.SetStandard (WIFI_STANDARD_80211n);
// Declare NetDeviceContainers to hold the container returned by the helper
NetDeviceContainer wifiStaDevices;
NetDeviceContainer wifiApDevice;
@@ -85,8 +85,8 @@ default values in the simulator, and infrastructure mode::
mac.SetType ("ns3::ApWifiMac");
wifiApDevice = wifi.Install (phy, mac, wifiApNode);
At this point, the 11 nodes have Wi-Fi devices configured, attached to a
common channel. The rest of this section describes how additional
At this point, the 11 nodes have Wi-Fi devices configured, attached to a
common channel. The rest of this section describes how additional
configuration may be performed.
YansWifiChannelHelper
@@ -269,12 +269,9 @@ The following values for WifiStandard are defined in
WIFI_STANDARD_80211b,
WIFI_STANDARD_80211g,
WIFI_STANDARD_80211p,
WIFI_STANDARD_80211n_2_4GHZ,
WIFI_STANDARD_80211n_5GHZ,
WIFI_STANDARD_80211n,
WIFI_STANDARD_80211ac,
WIFI_STANDARD_80211ax_2_4GHZ,
WIFI_STANDARD_80211ax_5GHZ,
WIFI_STANDARD_80211ax_6GHZ
WIFI_STANDARD_80211ax
By default, the WifiHelper (the typical use case for WifiPhy creation) will
configure the WIFI_STANDARD_80211a standard by default. Other values
@@ -323,7 +320,7 @@ Following are a few examples to clarify these rules:
::
WifiHelper wifi;
wifi.SetStandard (WIFI_STANDARD_80211n_5GHZ);
wifi.SetStandard (WIFI_STANDARD_80211n);
YansWifiPhyHelper phyHelper;
phyHelper.Set ("ChannelSettings", StringValue ("{0, 40, WIFI_PHY_BAND_5GHZ, 0}"));
// channel number unspecified
@@ -332,7 +329,7 @@ Following are a few examples to clarify these rules:
::
WifiHelper wifi;
wifi.SetStandard (WIFI_STANDARD_80211ax_2_4GHZ);
wifi.SetStandard (WIFI_STANDARD_80211ax);
YansWifiPhyHelper phyHelper;
phyHelper.Set ("ChannelSettings", StringValue ("{0, 0, WIFI_PHY_BAND_2_4GHZ, 0}"));
// both channel number and width unspecified
@@ -388,10 +385,10 @@ map of ChannelNumber to the center frequency and channel width commonly
known for that channel in practice. For example:
* Channel 1, when IEEE 802.11b is configured, corresponds to a channel
width of 22 MHz and a center frequency of 2412 MHz.
width of 22 MHz and a center frequency of 2412 MHz.
* Channel 36, when IEEE 802.11n is configured at 5 GHz, corresponds to
a channel width of 20 MHz and a center frequency of 5180 MHz.
* Channel 36, when IEEE 802.11n is configured at 5 GHz, corresponds to
a channel width of 20 MHz and a center frequency of 5180 MHz.
The following channel numbers are well-defined for 2.4 GHz standards:
@@ -453,7 +450,7 @@ The following channel numbers are well-defined for 6 GHz standards (802.11ax onl
The channel number may be set either before or after creation of the
WifiPhy object.
WifiPhy object.
If an unknown channel number (other than zero) is configured, the
simulator will exit with an error; for instance, such as:
@@ -474,7 +471,7 @@ such as:
::
WifiHelper wifi;
wifi.SetStandard (WIFI_STANDARD_80211n_5GHZ);
wifi.SetStandard (WIFI_STANDARD_80211n);
...
Ptr<WifiPhy> wifiPhy = ...;
wifiPhy->SetAttribute ("ChannelSettings", StringValue ("{14, 20, BAND_5GHZ, 0}"));
@@ -577,7 +574,7 @@ For example the following user code configures a MAC that will be a non-AP STA w
in an infrastructure network where the AP has SSID ``ns-3-ssid``::
WifiHelper wifi;
wifi.SetStandard (WIFI_STANDARD_80211n_5GHZ);
wifi.SetStandard (WIFI_STANDARD_80211n);
WifiMacHelper wifiMacHelper;
Ssid ssid = Ssid ("ns-3-ssid");
@@ -638,7 +635,7 @@ UP Access Category
=== ===============
TOS and DSCP values map onto user priorities and access categories according
to the following table.
to the following table.
============ ============ == ===============
DiffServ PHB TOS (binary) UP Access Category
@@ -671,7 +668,7 @@ So, for example,::
destAddress.SetTos (0xc0);
will map to CS6, User Priority 6, and Access Category AC_VO.
Also, the ns3-wifi-ac-mapping test suite (defined in
Also, the ns3-wifi-ac-mapping test suite (defined in
src/test/ns3wifi/wifi-ac-mapping-test-suite.cc) can provide additional
useful information.
@@ -709,7 +706,7 @@ The ``WifiHelper::SetStandard`` method sets various default timing parameters as
In order to change parameters that are overwritten by ``WifiHelper::SetStandard``, this should be done post-install using ``Config::Set``::
WifiHelper wifi;
wifi.SetStandard (WIFI_STANDARD_80211n_2_4GHZ);
wifi.SetStandard (WIFI_STANDARD_80211n);
wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue("HtMcs7"), "ControlMode", StringValue("HtMcs0"));
//Install PHY and MAC
@@ -763,7 +760,7 @@ HT is an acronym for High Throughput, a term synonymous with the IEEE 802.11n
standard. Once the ``ns3::WifiHelper::Install`` has been called and the
user sets the standard to a variant that supports HT capabilities (802.11n,
802.11ac, or 802.11ax), an HT configuration object will automatically be
created for the device. The configuration object is used to store and
created for the device. The configuration object is used to store and
manage HT-specific attributes.
802.11n/ac PHY layer can use either long (800 ns) or short (400 ns) OFDM guard intervals. To configure this parameter for a given device, the following lines of code could be used (in this example, it enables the support of a short guard interval for the first station)::
@@ -791,7 +788,7 @@ manage; therefore, this object is a placeholder for future growth.
HE configuration
================
IEEE 802.11ax is also known as High Efficiency (HE). Once the ``ns3::WifiHelper::Install`` has been called and IEEE 802.11ax configured as the standard, an
IEEE 802.11ax is also known as High Efficiency (HE). Once the ``ns3::WifiHelper::Install`` has been called and IEEE 802.11ax configured as the standard, an
HE configuration object will automatically be created to manage HE-specific
attributes for 802.11ax devices.
@@ -845,7 +842,7 @@ Finally, we manually place them by using the ``ns3::ListPositionAllocator``::
YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
// ns-3 supports RadioTap and Prism tracing extensions for 802.11
wifiPhy.SetPcapDataLinkType (WifiPhyHelper::DLT_IEEE802_11_RADIO);
wifiPhy.SetPcapDataLinkType (WifiPhyHelper::DLT_IEEE802_11_RADIO);
YansWifiChannelHelper wifiChannel;
wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
@@ -873,7 +870,7 @@ Finally, we manually place them by using the ``ns3::ListPositionAllocator``::
// other set up (e.g. InternetStack, Application)
Infrastructure (access point and clients) WifiNetDevice configuration
Infrastructure (access point and clients) WifiNetDevice configuration
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
This is a typical example of how a user might configure an access point and a set of clients.
@@ -890,9 +887,9 @@ Each node is equipped with 802.11b Wi-Fi device::
WifiHelper wifi;
wifi.SetStandard (WIFI_STANDARD_80211b);
YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
// ns-3 supports RadioTap and Prism tracing extensions for 802.11
wifiPhy.SetPcapDataLinkType (WifiPhyHelper::DLT_IEEE802_11_RADIO);
wifiPhy.SetPcapDataLinkType (WifiPhyHelper::DLT_IEEE802_11_RADIO);
YansWifiChannelHelper wifiChannel;
// reference loss must be changed since 802.11b is operating at 2.4GHz