add device chapters to manual

This commit is contained in:
Tom Henderson
2008-12-15 07:25:27 -08:00
parent 71efdc0b02
commit d3e7db87dd
6 changed files with 376 additions and 6 deletions

View File

@@ -17,7 +17,8 @@ IMAGES_EPS = \
$(FIGURES)/buffer.eps \
$(FIGURES)/sockets-overview.eps \
$(FIGURES)/testbed.eps \
$(FIGURES)/emulated-channel.eps
$(FIGURES)/emulated-channel.eps \
$(FIGURES)/snir.eps
IMAGES_PNG = ${IMAGES_EPS:.eps=.png}
IMAGES_PDF = ${IMAGES_EPS:.eps=.pdf}
@@ -28,18 +29,21 @@ CHAPTERS = \
manual.texi \
attributes.texi \
callbacks.texi \
csma.texi \
emulation.texi \
node.texi \
objects.texi \
other.texi \
output.texi \
packets.texi \
point-to-point.texi \
random.texi \
realtime.texi \
routing.texi \
sockets.texi \
statistics.texi \
troubleshoot.texi
troubleshoot.texi \
wifi.texi
%.eps : %.dia; $(DIA) -t eps $< -e $@
%.png : %.dia; $(DIA) -t png $< -e $@

BIN
doc/manual/figures/snir.dia Normal file

Binary file not shown.

View File

@@ -89,6 +89,9 @@ see @uref{http://www.nsnam.org/docs/manual.pdf}.
* Node and Internet Stack::
* TCP::
* Routing overview::
* Wifi NetDevice::
* CSMA NetDevice::
* PointToPoint NetDevice::
* Troubleshooting::
@end menu
@@ -104,6 +107,9 @@ see @uref{http://www.nsnam.org/docs/manual.pdf}.
@c @include output.texi
@include tcp.texi
@include routing.texi
@include wifi.texi
@include csma.texi
@include point-to-point.texi
@c @include other.texi
@include troubleshoot.texi

View File

@@ -71,6 +71,7 @@ The PointToPointChannel provides following Attributes:
@itemize @bullet
@item Delay: An ns3::Time specifying the speed of light transmission delay for
the channel.
@end itemize
@node Using the PointToPointNetDevice
@section Using the PointToPointNetDevice
@@ -132,14 +133,14 @@ the device MAC hooks.
When a packet is sent to the Point-to-Point net device for transmission it
always passes through the transmit queue. The transmit queue in the
PoiintToPointNetDevice inherits from Queue, and therefore inherits three
PointToPointNetDevice inherits from Queue, and therefore inherits three
trace sources:
@itemize @bulleg
@itemize @bullet
@item An Enqueue operation source (see ns3::Queue::m_traceEnqueue);
@item A Dequeue operation source (see ns3::Queue::m_traceDequeue);
@item A Drop operation source (see ns3::Queue::m_traceDrop).
@item
@end itemize
The upper-level (MAC) trace hooks for the PointToPointNetDevice are, in fact,
exactly these three trace sources on the single transmit queue of the device.

View File

@@ -313,7 +313,7 @@ For instance, this scheduling call will cause the tables to be rebuilt
at time 5 seconds:
@verbatim
Simulator::Schedule (Seconds (5),&GlobalRouteManager::RecomputeRoutingTables);
@end verbatimT
@end verbatim
@node Global Routing Implementation
@section Global Routing Implementation

359
doc/manual/wifi.texi Normal file
View File

@@ -0,0 +1,359 @@
@node Wifi NetDevice
@chapter Wifi NetDevice
@anchor{chap:wifi}
ns-3 nodes can contain a collection of NetDevice objects, much like an actual
computer contains separate interface cards for Ethernet, Wifi, Bluetooth, etc. This chapter describes the ns-3 WifiNetDevice and related models. By
adding WifiNetDevice objects to ns-3 nodes, one can create models of
802.11-based infrastructure and ad hoc networks.
@menu
* Overview of the model::
* Using the WifiNetDevice::
* The WifiChannel and WifiPhy models::
* The MAC model::
* Wifi Attributes::
* Wifi Tracing::
@end menu
@node Overview of the model
@section Overview of the model
@strong{Note:} This overview is taken largely from the Doxygen for the
WifiNetDevice module.
The set of 802.11 models provided in ns-3 attempts to provide
an accurate MAC-level implementation of the 802.11 specification
and to provide a not-so-slow PHY-level model of the 802.11a
specification.
The current implementation provides roughly four levels of models:
@itemize @bullet
@item the @strong{PHY layer models}
@item the so-called @strong{MAC low models}: they implement DCF
@item the so-called @strong{MAC high models}: they implement the MAC-level
beacon generation, probing, and association state machines, and
@item a set of @strong{Rate control algorithms} used by the MAC low models
@end itemize
There are presently three @strong{MAC high models}:
@enumerate
@item a simple adhoc state machine that does not perform any
kind of beacon generation, probing, or association. This
state machine is implemented by the @code{ns3::AdhocWifiNetDevice}
and @code{ns3::MacHighAdhoc} classes.
@item an active probing and association state machine that handles
automatic re-association whenever too many beacons are missed
is implemented by the @code{ns3::NqstaWifiNetDevice} and
@code{ns3::MacHighNqsta} classes.
@item an access point that generates periodic beacons, and that
accepts every attempt to associate. This AP state machine
is implemented by the @code{ns3::NqapWifiNetDevice} and
@code{ns3::MacHighNqap} classes.
@end enumerate
The @strong{MAC low layer} is split into three components:
@enumerate
@item @code{ns3::MacLow} which takes care of RTS/CTS/DATA/ACK transactions.
@item @code{ns3::DcfManager} and @code{ns3::DcfState} which implements the DCF function.
@item @code{ns3::DcaTxop} which handles the packet queue, packet fragmentation,
and packet retransmissions if they are needed.
@end enumerate
There are also several @strong{rate control algorithms} that can be used by the Mac low layer:
@itemize @bullet
@item @code{ns3::ArfMacStations}
@item @code{ns3::AArfMacStations}
@item @code{ns3::IdealMacStations}
@item @code{ns3::CrMacStations}
@item @code{ns3::OnoeMacStations}
@item @code{ns3::AmrrMacStations}
@end itemize
The PHY layer implements a single model in the
@code{ns3::WifiPhy class}: the
physical layer model implemented there is described fully in a paper
entitled @uref{http://cutebugs.net/files/wns2-yans.pdf,,"Yet Another Network Simulator"}.
In ns-3, nodes can have multiple WifiNetDevices on separate channels,
and the WifiNetDevice can coexist with other device types; this removes
an architectural limitation found in ns-2. Presently, however, there
is no model for cross-channel interference or coupling.
The source code for the Wifi NetDevice lives in the directory
@code{src/devices/wifi}.
@node Using the WifiNetDevice
@section Using the WifiNetDevice
Users who use the low-level ns-3 API and who wish to add a WifiNetDevice
to their node must create an instance of a WifiNetDevice, plus
a number of consitutent objects, and bind them together appropriately
(the WifiNetDevice is very modular in this regard, for future
extensibility). At the low-level API, this can be done
with about 20 lines of code (see @code{ns3::WifiHelper::Install} and
@code{ns3::YansWifiPhyHelper::Create}). They also must create,
at some point, a WifiChannel, which also contains a number of
constituent objects (see @code{ns3::YansWifiChannelHelper::Create}).
However, a few helpers are available for users to add these devices
and channels with only a few lines of code, if they are willing to
use defaults, and the helpers provide additional API to allow the
passing of attribute values to change default values. The scripts
in @code{src/examples} can be browsed to see how this is done.
@subsection YansWifiChannelHelper
The YansWifiChannelHelper has an unusual name. Readers may wonder why
it is named this way. The reference is to the
@uref{http://cutebugs.net/files/wns2-yans.pdf,,yans simulator},
from which this model is taken. The helper can be used to create
a WifiChannel with a default PropagationLoss and PropagationDelay model.
Specifically, the default is a channel model
with a propagation delay equal to a constant, the speed of light,
and a propagation loss based on a log distance model with a reference
loss of 46.6777 dB at reference distance of 1m.
Users will typically type code such as:
@verbatim
YansWifiChannelHelper wifiChannelHelper = YansWifiChannelHelper::Default ();
Ptr<WifiChannel> wifiChannel = wifiChannelHelper.Create ();
@end verbatim
to get the defaults. Note the distinction above in creating a helper
object vs. an actual simulation object.
In ns-3, helper objects (used at the helper API only) are created on the
stack (they could also be created with operator new and later deleted).
However, the actual ns-3 objects typically inherit from
@code{class ns3::Object} and are assigned to a smart pointer. See the
chapter on
@uref{Object model} for a discussion of the ns-3 object model, if you
are not familiar with it.
@emph{Todo: Add notes about how to configure attributes with this helper API}
@subsection YansWifiPhyHelper
Physical devices (base class @code{ns3::Phy}) connect to
@code{ns3::Channel} models in ns-3. We need to create Phy objects appropriate
for the YansWifiChannel; here the @code{YansWifiPhyHelper} will
do the work.
The YansWifiPhyHelper class configures an object factory to create instances
of a @code{YansWifiPhy} and
adds some other objects to it, including possibly a supplemental
ErrorRateModel and a pointer to a MobilityModel. The user code is
typically:
@verbatim
YansWifiPhyHelper wifiPhyHelper = YansWifiPhyHelper::Default ();
wifiPhyHelper.SetChannel (wifiChannel);
@end verbatim
Note that we haven't actually created any WifiPhy objects yet; we've
just prepared the YansWifiPhyHelper by telling it which channel it is
connected to. The phy objects are created in the next step.
@subsection WifiHelper
We're now ready to create WifiNetDevices. First, let's create
a WifiHelper with default settings:
@verbatim
WifiHelper wifiHelper = WifiHelper::Default ();
@end verbatim
What does this do? It sets the RemoteStationManager to
@code{ns3::ArfWifiManager} and the upper MAC to @code{ns3::AdhocWifiMac}
by default (which can be overridden by other arguments).
Now, let's use the wifiPhyHelper created above to install WifiNetDevices
on a set of nodes in a NodeContainer "c":
@verbatim
NetDeviceContainer wifiContainer = WifiHelper::Install (wifiPhyHelper, c);
@end verbatim
This creates the WifiNetDevice which includes also a WifiRemoteStationManager,
a WifiMac, and a WifiPhy (connected to the matching WifiChannel).
There are many ns-3 @uref{Attributes} that can be set on the above
helpers to deviate from the default behavior; the example scripts
show how to do some of this reconfiguration.
@subsection AdHoc WifiNetDevice configuration
This is a typical example of how a user might configure an adhoc network.
@emph{Write me}
@subsection 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.
@emph{Write me}
@node The WifiChannel and WifiPhy models
@section The WifiChannel and WifiPhy models
The WifiChannel subclass can be used to connect together a set of
@code{ns3::WifiNetDevice} network interfaces. The class @code{ns3::WifiPhy}
is the
object within the WifiNetDevice that receives bits from the channel.
A WifiChannel contains
a @code{ns3::PropagationLossModel} and a @code{ns3::PropagationDelayModel}
which can
be overridden by the WifiChannel::SetPropagationLossModel
and the WifiChannel::SetPropagationDelayModel methods. By default,
no propagation models are set.
The WifiPhy models an 802.11a channel, in terms of frequency, modulation,
and bit rates, and interacts with the PropagationLossModel and
PropagationDelayModel found in the channel.
This section summarizes
the description of the BER calculations found in the yans paper
taking into account the
Forward Error Correction present in 802.11a and describes
the algorithm we implemented to decide whether or not a
packet can be successfully received. See @uref{http://cutebugs.net/files/wns2-yans.pdf,,"Yet Another Network Simulator"} for more details.
The PHY layer can be in one of three states:
@enumerate
@item TX: the PHY is currently transmitting a signal
on behalf of its associated MAC
@item RX: the PHY is synchronized on a signal and
is waiting until it has received its last bit to forward
it to the MAC.
@item IDLE: the PHY is not in the TX or RX states.
@end enumerate
When the first bit of a new packet is received while
the PHY is not IDLE (that is, it is already synchronized
on the reception of another earlier packet or it is
sending data itself), the received packet is dropped.
Otherwise, if the PHY is IDLE, we calculate the received
energy of the first bit of this new signal and compare it
against our Energy Detection threshold (as defined
by the Clear Channel Assessment function mode 1).
If the energy of the packet k is higher, then the PHY moves
to RX state and schedules an event when the last bit of
the packet is expected to be received. Otherwise, the
PHY stays in IDLE state and drops the packet.
The energy of the received signal is assumed
to be zero outside of the reception interval of packet k and
is calculated from the transmission power with a path-loss
propagation model in the reception interval.
where the path loss exponent, @math{n}, is chosen equal to 3,
the reference distance, @math{d_0} is choosen equal to
@math{1.0m} and
the reference energy is based based on a Friis
propagation model.
When the last bit of the packet upon which the PHY is
synchronized is received, we need to calculate the
probability that the packet is received with any error
to decide whether or not
the packet on which we were synchronized could
be successfully received or not: a random number
is drawn from a uniform distribution and is compared against
the probability of error.
To evaluate the probability of error, we start from the piecewise linear
functions shown in Figure @ref{fig:snir} and calculate the
SNIR function.
@float Figure,fig:snir
@caption{SNIR function over time}
@image{figures/snir,,3in}
@end float
From the SNIR function we can derive bit error rates for BPSK and QAM
modulations. Then, for each interval l where BER is
constant, we define the upper bound of a probability that an error is
present in the chunk of bits located in the interval l for packet k.
If we assume an AWGN channel,
binary convolutional coding (which is the case in 802.11a)
and hard-decision Viterbi decoding, the error rate is thus derived,
and the packet error probability for packet k can be computed..
@subsection WifiChannel configuration
WifiChannel models include both a PropagationDelayModel and a
PropagationLossModel. The following PropagationDelayModels are available:
@itemize @bullet
@item ConstantSpeedPropagationDelayModel
@item RandomPropagationDelayModel
@end itemize
The following PropagationLossModels are available:
@itemize @bullet
@item RandomPropagationLossModel
@item FriisPropagationLossModel
@item LogDistancePropagationLossModel
@item JakesPropagationLossModel
@item CompositePropagationLossModel
@end itemize
@node The MAC model
@section The MAC model
The 802.11 Distributed Coordination Function is used to
calculate when to grant access to the transmission medium. While
implementing the DCF would have been particularly easy if we
had used a recurring timer that expired every slot, we
chose to use the method described in @emph{(missing reference here from
Yans paper)}
where the backoff timer duration is lazily calculated whenever
needed since it is claimed to have much better performance than
the simpler recurring timer solution.
The higher-level MAC functions are implemented in a set of other
C++ classes and deal with:
@itemize @bullet
@item packet fragmentation and defragmentation,
@item use of the rts/cts protocol,
@item rate control algorithm,
@item connection and disconnection to and from an Access Point,
@item the MAC transmission queue,
@item beacon generation,
@item etc.
@end itemize
@node Wifi Attributes
@section Wifi Attributes
The WifiNetDevice makes heavy use of the ns-3 @ref{Attributes} subsystem for
configuration and default value management. Presently, approximately
100 values are stored in this system.
For instance, class @code{ns-3::WifiMac} exports these attributes:
@itemize @bullet
@item CtsTimeout: When this timeout expires, the RTS/CTS handshake has failed.
@item AckTimeout: When this timeout expires, the DATA/ACK handshake has failed.
@item Sifs: The value of the SIFS constant.
@item EifsNoDifs: The value of EIFS-DIFS
@item Slot: The duration of a Slot.
@item Pifs: The value of the PIFS constant.
@item MaxPropagationDelay: The maximum propagation delay. Unused for now.
@item MaxMsduSize: The maximum size of an MSDU accepted by the MAC layer.This value conforms to the specification.
@item Ssid: The ssid we want to belong to.
@end itemize
@node Wifi Tracing
@section Wifi Tracing
@emph{This needs revised/updating based on the latest Doxygen}
ns-3 has a sophisticated tracing infrastructure that allows users to hook
into existing trace sources, or to define and export new ones.
Wifi-related trace sources that are available by default include:
@itemize @bullet
@item @code{ns3::WifiNetDevice}
@itemize @bullet
@item Rx: Received payload from the MAC layer.
@item Tx: Send payload to the MAC layer.
@end itemize
@item @code{ns3::WifiPhy}
@itemize @bullet
@item State: The WifiPhy state
@item RxOk: A packet has been received successfully.
@item RxError: A packet has been received unsuccessfully.
@item Tx: Packet transmission is starting.
@end itemize
@end itemize
Briefly, this means, for example, that a user can hook a processing
function to the "State" tracing hook above and be notified whenever the
WifiPhy model changes state.