update manual
authorMirko Banchi <mk.banchi@gmail.com>
Fri, 01 May 2009 14:34:27 +0200
changeset 4432 7fd695d4b9a7
parent 4431 fcb74b52e91b
child 4433 41a18c7aecfc
update manual
doc/manual/wifi.texi
--- a/doc/manual/wifi.texi	Thu Apr 30 14:11:58 2009 +0200
+++ b/doc/manual/wifi.texi	Fri May 01 14:34:27 2009 +0200
@@ -30,34 +30,55 @@
 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 low models}: they implement DCF and EDCAF
 @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}:
+There are presently six @strong{MAC high models}, three for non-QoS MACs and three
+for QoS MACs.
+@itemize @bullet
+@item @strong{non-QoS MACs:}
 @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.
+state machine is implemented by the @code{ns3::AdhocWifiMac} class.
 @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.
+is implemented by the @code{ns3::NqstaWifiMac} class.
 @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 
+is implemented by the @code{ns3::NqapWifiMac} class.
+@end enumerate
+@item @strong{QoS MACs:}
+@enumerate
+@item a simple adhoc state machine like above but also able to manage QoS traffic.
+This state machine is implemented by @code{ns3::QadhocWifiMac} class.
+@item a station state machine like above but also able to manage QoS traffic.
+Implemented by @code{ns3::QstaWifiMac}.
+@item a QoS access point state machine like above implemented by @code{ns3::QapWifiMac}.
+@end enumerate
+@end itemize
+
+With QoS MAC models is possible to work with traffic belonging to 
+four different access classes: @strong{AC_VO} for voice traffic, @strong{AC_VI}
+for video traffic, @strong{AC_BE} for best-effort traffic and @strong{AC_BK} 
+for background traffic.
+In order to determine MSDU's access class, every packet forwarded down
+to these MAC layers should be marked using @code{ns3::QosTag} in order to set
+a TID (traffic id) for that packet otherwise it will be considered
+belonging to @strong{AC_BE} access class.
 
 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.
+@item @code{ns3::DcfManager} and @code{ns3::DcfState} which implements the DCF and EDCAF functions.
+@item @code{ns3::DcaTxop} or @code{ns3::EdcaTxopN} which handle the packet queue,
+packet fragmentation, and packet retransmissions if they are needed.
+@code{ns3::DcaTxop} object is used by non-QoS high MACs. @code{ns3::EdcaTxopN} is
+used by QoS high MACs and performs also QoS operations like 802.11n MSDU
+aggregation.
 @end enumerate
 
 There are also several @strong{rate control algorithms} that can be used by the Mac low layer:
@@ -96,7 +117,7 @@
 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
+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}).
@@ -156,6 +177,44 @@
 just prepared the YansWifiPhyHelper by telling it which channel it is 
 connected to.  The phy objects are created in the next step.
 
+@subsection NqosWifiMacHelper and QosWifiMacHelper
+
+The @code{ns3::NqosWifiMacHelper} and @code{ns3::QosWifiMacHelper} configure an
+object factory to create instances of a @code{ns3::WifiMac}. They are used to
+configure MAC parameters like type of MAC, values of contention windows and so on.
+Setting up a non-QoS MAC layers the object we use is @code{ns3::NqosWifiMacHelper}.
+For example the following user code configures a non-QoS MAC sta and changes its default
+values for contention window and Aifsn:
+@verbatim
+  NqosWifiMacHelper wifiMacHelper = NqosWifiMacHelper::Default ();
+  Ssid ssid = Ssid ("ns-3-ssid");
+  wifiMacHelper.SetType ("ns3::NqstaWifiMac", "Ssid", SsidValue (ssid), "ActiveProbing", BooleanValue (false));
+  wifiMacHelper.SetDcaParameters ("MinCw", UintegerValue (20), "Aifsn", UintegerValue (3));
+@end verbatim
+
+Setting up a QoS MACs we use a @code{ns3::QosWifiMacHelper} instead.
+This object could be also used to change default EDCA parameters, and to set a possible MSDU aggregator
+for a particular access class in order to use 802.11n MSDU aggregation feature.
+A possible user code:
+@verbatim
+  QosWifiMacHelper wifiMacHelper = QosWifiMacHelper::Default ();
+  wifiMacHelper.SetType ("ns3::QapWifiMac", "Ssid", SsidValue (ssid), "BeaconGeneration", BooleanValue (true),
+                         "BeaconInterval", TimeValue (Seconds (2.5)));
+  wifiMacHelper.SetEdcaParametersForAc (AC_VO, "MinCw", UintegerValue (2));
+  wifiMacHelper.SetMsduAggregatorForAc (AC_VO, "ns3::MsduStandardAggregator", "MaxAmsduSize", UintegerValue (3839));
+@end verbatim
+
+Call to QosWifiMacHelper::Default () is needed in order to set default EDCA parameters properly for all
+access classes. Otherwise we should set them one by one:
+@verbatim
+  QosWifiMacHelper wifiMacHelper;
+  wifiMacHelper.SetEdcaParametersForAc (AC_VO, "MinCw", UintegerValue (2), "MaxCw", UintegerValue (7),
+                                               "Aifsn", UintegerValue (2));
+  wifiMacHelper.SetEdcaParametersForAc (AC_VI, "MinCw", UintegerValue (7), "MaxCw", UintegerValue (15),
+                                               "Aifsn", UintegerValue (2));
+  ...
+@end verbatim
+
 @subsection WifiHelper
 
 We're now ready to create WifiNetDevices.  First, let's create
@@ -164,12 +223,11 @@
   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
+@code{ns3::ArfWifiManager}.
+Now, let's use the wifiPhyHelper and wifiMacHelper created above to install WifiNetDevices
 on a set of nodes in a NodeContainer "c":
 @verbatim
-  NetDeviceContainer wifiContainer = WifiHelper::Install (wifiPhyHelper, c);
+  NetDeviceContainer wifiContainer = WifiHelper::Install (wifiPhyHelper, wifiMacHelper, c);
 @end verbatim
 This creates the WifiNetDevice which includes also a WifiRemoteStationManager,
 a WifiMac, and a WifiPhy (connected to the matching WifiChannel).
@@ -313,6 +371,7 @@
 @item connection and disconnection to and from an Access Point,
 @item the MAC transmission queue,
 @item beacon generation,
+@item msdu aggregation,
 @item etc.
 @end itemize