--- a/src/devices/wifi/aarf-mac-stations.h Wed Oct 31 16:26:18 2007 +0100
+++ b/src/devices/wifi/aarf-mac-stations.h Wed Oct 31 16:26:31 2007 +0100
@@ -24,6 +24,14 @@
namespace ns3 {
+/**
+ * \brief AARF Rate control algorithm
+ *
+ * This class implements the AARF rate control algorithm which
+ * was initially described in <i>IEEE 802.11 Rate Adaptation:
+ * A Practical Approach</i>, by M. Lacage, M.H. Manshaei, and
+ * T. Turletti.
+ */
class AarfMacStations : public ArfMacStations {
public:
AarfMacStations (WifiMode defaultTxMode,
--- a/src/devices/wifi/arf-mac-stations.h Wed Oct 31 16:26:18 2007 +0100
+++ b/src/devices/wifi/arf-mac-stations.h Wed Oct 31 16:26:31 2007 +0100
@@ -24,6 +24,20 @@
namespace ns3 {
+/**
+ * \brief ARF Rate control algorithm
+ *
+ * This class implements the so-called ARF algorithm which was
+ * initially described in <i>WaveLAN-II: A High-performance wireless
+ * LAN for the unlicensed band</i>, by A. Kamerman and L. Monteban. in
+ * Bell Lab Technical Journal, pages 118-133, Summer 1997.
+ *
+ * This implementation differs from the initial description in that it
+ * uses a packet-based timer rather than a time-based timer as described
+ * in XXX (I cannot find back the original paper which described how
+ * the time-based timer could be easily replaced with a packet-based
+ * timer.)
+ */
class ArfMacStations : public MacStations {
public:
ArfMacStations (WifiMode defaultTxMode, uint32_t timerThreshold, uint32_t successThreshold);
--- a/src/devices/wifi/cr-mac-stations.h Wed Oct 31 16:26:18 2007 +0100
+++ b/src/devices/wifi/cr-mac-stations.h Wed Oct 31 16:26:31 2007 +0100
@@ -26,6 +26,12 @@
namespace ns3 {
+/**
+ * \brief use constant rates for data and control transmissions
+ *
+ * This class uses always the same transmission rate for every
+ * packet sent.
+ */
class CrMacStations : public MacStations
{
public:
--- a/src/devices/wifi/dca-txop.h Wed Oct 31 16:26:18 2007 +0100
+++ b/src/devices/wifi/dca-txop.h Wed Oct 31 16:26:31 2007 +0100
@@ -38,12 +38,39 @@
class MacParameters;
class MacTxMiddle;
+/**
+ * \brief handle packet fragmentation and retransmissions.
+ *
+ * This class implements the packet fragmentation and
+ * retransmission policy. It uses the ns3::MacLow and ns3::Dcf
+ * helper classes to respectively send packets and decide when
+ * to send them. Packets are stored in a ns3::WifiMacQueue until
+ * they can be sent.
+ *
+ * The policy currently implemented uses a simple fragmentation
+ * threshold: any packet bigger than this threshold is fragmented
+ * in fragments whose size is smaller than the threshold.
+ *
+ * The retransmission policy is also very simple: every packet is
+ * retransmitted until it is either successfully transmitted or
+ * it has been retransmitted up until the ssrc or slrc thresholds.
+ *
+ * The rts/cts policy is similar to the fragmentation policy: when
+ * a packet is bigger than a threshold, the rts/cts protocol is used.
+ */
class DcaTxop
{
public:
typedef Callback <void, WifiMacHeader const&> TxOk;
typedef Callback <void, WifiMacHeader const&> TxFailed;
+ /**
+ * \param minCw forwarded to ns3::Dcf constructor
+ * \param maxCw forwarded to ns3::Dcf constructor
+ *
+ * Initialized from \valueref{WifiMaxSsrc}, \valueref{WifiMaxSlrc},
+ * \valueref{WifiRtsCtsThreshold}, and, \valueref{WifiFragmentationThreshold}.
+ */
DcaTxop (uint32_t minCw, uint32_t maxCw);
~DcaTxop ();
@@ -51,7 +78,15 @@
void SetPhy (Ptr<WifiPhy> phy);
void SetParameters (MacParameters *parameters);
void SetTxMiddle (MacTxMiddle *txMiddle);
+ /**
+ * \param callback the callback to invoke when a
+ * packet transmission was completed successfully.
+ */
void SetTxOkCallback (TxOk callback);
+ /**
+ * \param callback the callback to invoke when a
+ * packet transmission was completed unsuccessfully.
+ */
void SetTxFailedCallback (TxFailed callback);
void SetDifs (Time difs);
@@ -60,6 +95,13 @@
void SetMaxQueueSize (uint32_t size);
void SetMaxQueueDelay (Time delay);
+ /**
+ * \param packet packet to send
+ * \param hdr header of packet to send.
+ *
+ * Store the packet in the internal queue until it
+ * can be sent safely.
+ */
void Queue (Packet packet, WifiMacHeader const &hdr);
private:
class AccessListener;
--- a/src/devices/wifi/dcf.h Wed Oct 31 16:26:18 2007 +0100
+++ b/src/devices/wifi/dcf.h Wed Oct 31 16:26:31 2007 +0100
@@ -31,56 +31,177 @@
class RandomStream;
class MacParameters;
+/**
+ * \brief listen to DCF events
+ *
+ * If you want to call methods from the ns3::Dcf class,
+ * you need to provide an instance of this class
+ * to be notified of the DCF evens.
+ */
class DcfAccessListener {
public:
DcfAccessListener ();
virtual ~DcfAccessListener ();
- /* Tell the listener than it can start
+ /**
+ * Tell the listener than it can start
* accessing the medium right now.
*/
virtual void AccessGrantedNow (void) = 0;
- /* ask the listener if there are candidates
+ /**
+ * ask the listener if there are candidates
* who need access to the medium.
+ *
+ * \return true if access to the medium is
+ * needed, false otherwise.
*/
virtual bool AccessNeeded (void) = 0;
- /* ask the listener if it is currently
+ /**
+ * ask the listener if it is currently
* performing an access which was granted
* earlier to him and if it will notify
* the Dcf when the access is complete.
+ *
+ * \return true if the listener expects to call
+ * Dcf::RequestAccess later, false otherwise.
*/
virtual bool AccessingAndWillNotify (void) = 0;
};
+/**
+ * \brief the Distributed Coordination Function
+ *
+ * This class implements the DCF as described in IEEE 802.11-1999
+ * section 9.2, p72.
+ *
+ * This implementation is based on the technique described in
+ * <i>Scalable simulation of large-scale wireless networks with
+ * bounded inaccuracies.</i>, by Z. Ji, J. Zhou, M. Takai, and R. Bagrodia.
+ */
class Dcf
{
public:
+ /**
+ * \param minCw the minimum value for CW
+ * \param maxCW the maximum value for CW
+ */
Dcf (uint32_t minCw, uint32_t maxCw);
~Dcf ();
+ /**
+ * \param parameters
+ *
+ * Must be invoked after construction to configure
+ * a set of parameters.
+ */
void SetParameters (const MacParameters *parameters);
+ /**
+ * \param difs the difs
+ *
+ * Must be invoked after construction.
+ */
void SetDifs (Time difs);
+ /**
+ * \param eifs the eifs
+ *
+ * Must be invoked after construction.
+ */
void SetEifs (Time eifs);
+ /**
+ * \param minCw the minimum value for CW
+ * \param maxCw the maximum value for CW
+ *
+ * Reset the cw bounds and CW to minCW.
+ */
void SetCwBounds (uint32_t minCw, uint32_t maxCw);
+ /**
+ * \param listener the listener
+ *
+ * This listener is notified of DCF-specific events
+ * when they happen. You _must_ register a listener
+ * before calling Dcf::RequestAccess.
+ */
void RegisterAccessListener (DcfAccessListener *listener);
+ /**
+ * Request access to the medium. This method will grant
+ * access by calling the DcfAccessListener::AccessGrantedNow
+ * method
+ */
void RequestAccess (void);
+ /**
+ * Reset the CW to CWmin
+ * This method is typically invoked after a successfully
+ * transmission or after the maximum number of retries has
+ * been reached.
+ */
void ResetCw (void);
+ /**
+ * Update the CW to a new value. This method is typically
+ * invoked after a failed transmission before calling
+ * Dcf::StartBackoff.
+ */
void UpdateFailedCw (void);
+ /**
+ * Start a backoff now by picking a backoff duration
+ * in the [0, cw] interval.
+ */
void StartBackoff (void);
- /* notification methods. */
+ /**
+ * \param duration expected duration of reception
+ *
+ * Notify the DCF that a packet reception started
+ * for the expected duration.
+ */
void NotifyRxStartNow (Time duration);
+ /**
+ * Notify the DCF that a packet reception was just
+ * completed successfully.
+ */
void NotifyRxEndOkNow (void);
+ /**
+ * Notify the DCF that a packet reception was just
+ * completed unsuccessfully.
+ */
void NotifyRxEndErrorNow (void);
+ /**
+ * \param duration expected duration of transmission
+ *
+ * Notify the DCF that a packet transmission was
+ * just started and is expected to last for the specified
+ * duration.
+ */
void NotifyTxStartNow (Time duration);
+ /**
+ * \param duration expected duration of cca busy period
+ *
+ * Notify the DCF that a CCA busy period has just started.
+ */
void NotifyCcaBusyStartNow (Time duration);
+ /**
+ * \param now the time at which a NAV starts
+ * \param duration the value of the received NAV.
+ */
void NotifyNavReset (Time now, Time duration);
+ /**
+ * \param now the time at which a NAV starts
+ * \param duration the value of the received NAV.
+ */
void NotifyNavStart (Time now, Time duration);
+ /**
+ * \param now the time at which a NAV starts
+ * \param duration the value of the received NAV.
+ */
void NotifyNavContinue (Time now, Time duration);
- // for testing only.
+ /**
+ * \param stream a random stream
+ *
+ * This method is used for testing only to force a predictable
+ * set of random numbers to be used.
+ */
void ResetRngForTest (RandomStream *stream);
private:
void AccessTimeout (void);
--- a/src/devices/wifi/ideal-mac-stations.h Wed Oct 31 16:26:18 2007 +0100
+++ b/src/devices/wifi/ideal-mac-stations.h Wed Oct 31 16:26:31 2007 +0100
@@ -27,6 +27,20 @@
namespace ns3 {
+/**
+ * \brief Ideal rate control algorithm
+ *
+ * This class implements an 'ideal' rate control algorithm
+ * similar to RBAR in spirit (see <i>A rate-adaptive MAC
+ * protocol for multihop wireless networks</i> by G. Holland,
+ * N. Vaidya, and P. Bahl.): every station keeps track of the
+ * snr of every packet received and sends back this snr to the
+ * original transmitter by an out-of-band mechanism. Each
+ * transmitter keeps track of the last snr sent back by a receiver
+ * and uses it to pick a transmission mode based on a set
+ * of snr thresholds built from a target ber and transmission
+ * mode-specific snr/ber curves.
+ */
class IdealMacStations : public MacStations {
public:
IdealMacStations (WifiMode defaultTxMode);
--- a/src/devices/wifi/mac-low.h Wed Oct 31 16:26:18 2007 +0100
+++ b/src/devices/wifi/mac-low.h Wed Oct 31 16:26:31 2007 +0100
@@ -42,93 +42,223 @@
class MacStation;
class MacParameters;
+/**
+ * \brief listen to events coming from ns3::MacLow.
+ */
class MacLowTransmissionListener {
public:
MacLowTransmissionListener ();
virtual ~MacLowTransmissionListener ();
+ /**
+ * \param snr the snr of the cts
+ * \param txMode the txMode of the cts
+ *
+ * ns3::MacLow received an expected CTS within
+ * CtsTimeout.
+ */
virtual void GotCts (double snr, WifiMode txMode) = 0;
+ /**
+ * ns3::MacLow did not receive an expected CTS
+ * within CtsTimeout.
+ */
virtual void MissedCts (void) = 0;
- /* Do not rely on the gotAck method to be
- * given valid parameters when SuperFastAck is
- * enabled.
+ /**
+ * \param snr the snr of the ack
+ * \param txMode the transmission mode of the ack
+ *
+ * ns3::MacLow received an expected ACL within
+ * AckTimeout. The <i>snr</i> and <i>txMode</i>
+ * arguments are not valid when SUPER_FAST_ACK is
+ * used.
*/
virtual void GotAck (double snr, WifiMode txMode) = 0;
+ /**
+ * ns3::MacLow did not receive an expected ACK within
+ * AckTimeout.
+ */
virtual void MissedAck (void) = 0;
+ /**
+ * Invoked when ns3::MacLow wants to start a new transmission
+ * as configured by MacLowTransmissionParameters::EnableNextData.
+ * The listener is expected to call again MacLow::StartTransmission
+ * with the "next" data to send.
+ */
virtual void StartNext (void) = 0;
- /* Invoked if this transmission was canceled
+ /**
+ * Invoked if this transmission was canceled
* one way or another. When this method is invoked,
* you can assume that the packet has not been passed
- * down the stack to the PHY. You are responsible
- * for freeing the packet if you want to.
+ * down the stack to the PHY.
*/
virtual void Cancel (void) = 0;
};
+/**
+ * \brief listen to NAV events
+ *
+ * This class is typically connected to an instance of ns3::Dcf
+ * and calls to its methods are forwards to the corresponding
+ * ns3::Dcf methods.
+ */
class MacLowNavListener {
public:
MacLowNavListener ();
virtual ~MacLowNavListener ();
+ /**
+ * \param now start of NAV timer
+ * \param duration duration of NAV timer
+ */
virtual void NavStart (Time now, Time duration) = 0;
+ /**
+ * \param now start of NAV timer
+ * \param duration duration of NAV timer
+ */
virtual void NavContinue (Time now, Time duration) = 0;
+ /**
+ * \param now start of NAV timer
+ * \param duration duration of NAV timer
+ */
virtual void NavReset (Time now, Time duration) = 0;
};
+/**
+ * \brief control how a packet is transmitted.
+ *
+ * The ns3::MacLow::StartTransmission method expects
+ * an instance of this class to describe how the packet
+ * should be transmitted.
+ */
class MacLowTransmissionParameters {
public:
MacLowTransmissionParameters ();
- /* If ACK is enabled, we wait ACKTimeout for an ACK.
+ /**
+ * Wait ACKTimeout for an ACK. If we get an ACK
+ * on time, call MacLowTransmissionListener::GotAck.
+ * Call MacLowTransmissionListener::MissedAck otherwise.
*/
void EnableAck (void);
- /* If FastAck is enabled, we:
- * - wait PIFS after end-of-tx. If idle, report
- * FastAckMissed.
+ /**
+ * - wait PIFS after end-of-tx. If idle, call
+ * MacLowTransmissionListener::MissedAck.
* - if busy at end-of-tx+PIFS, wait end-of-rx
- * - if Ack ok at end-of-rx, report FastAck ok.
- * - if Ack not ok at end-of-rx, report FastAckMissed
+ * - if Ack ok at end-of-rx, call
+ * MacLowTransmissionListener::GotAck.
+ * - if Ack not ok at end-of-rx, report call
+ * MacLowTransmissionListener::MissedAck
* at end-of-rx+SIFS.
+ *
* This is really complicated but it is needed for
* proper HCCA support.
*/
void EnableFastAck (void);
- /* If SuperFastAck is enabled, we:
- * - if busy at end-of-tx+PIFS, report gotAck
- * - if idle at end-of-tx+PIFS, report missedAck
+ /**
+ * - if busy at end-of-tx+PIFS, call
+ * MacLowTransmissionListener::GotAck
+ * - if idle at end-of-tx+PIFS, call
+ * MacLowTransmissionListener::MissedAck
*/
void EnableSuperFastAck (void);
- /* If RTS is enabled, we wait CTSTimeout for a CTS.
- * Otherwise, no RTS is sent.
+ /**
+ * Send a RTS, and wait CTSTimeout for a CTS. If we get a
+ * CTS on time, call MacLowTransmissionListener::GotCts
+ * and send data. Otherwise, call MacLowTransmissionListener::MissedCts
+ * and do not send data.
*/
void EnableRts (void);
- /* If NextData is enabled, we add the transmission duration
- * of the nextData to the durationId and we notify the
- * transmissionListener at the end of the current
- * transmission + SIFS.
+ /**
+ * \param size size of next data to send after current packet is
+ * sent.
+ *
+ * Add the transmission duration of the next data to the
+ * durationId of the outgoing packet and call
+ * MacLowTransmissionListener::StartNext at the end of
+ * the current transmission + SIFS.
*/
void EnableNextData (uint32_t size);
- /* If we enable this, we ignore all other durationId
- * calculation and simply force the packet's durationId
- * field to this value.
+ /**
+ * \param durationId the value to set in the duration/Id field of
+ * the outgoing packet.
+ *
+ * Ignore all other durationId calculation and simply force the
+ * packet's durationId field to this value.
*/
void EnableOverrideDurationId (Time durationId);
+ /**
+ * Do not wait for Ack after data transmission. Typically
+ * used for Broadcast and multicast frames.
+ */
void DisableAck (void);
+ /**
+ * Do not send rts and wait for cts before sending data.
+ */
void DisableRts (void);
+ /**
+ * Do not attempt to send data burst after current transmission
+ */
void DisableNextData (void);
+ /**
+ * Do not force the duration/id field of the packet: its
+ * value is automatically calculated by the MacLow before
+ * calling WifiPhy::Send.
+ */
void DisableOverrideDurationId (void);
+ /**
+ * \returns true if must wait for ACK after data transmission,
+ * false otherwise.
+ *
+ * This methods returns true when any of MustWaitNormalAck,
+ * MustWaitFastAck, or MustWaitSuperFastAck return true.
+ */
bool MustWaitAck (void) const;
+ /**
+ * \returns true if normal ACK protocol should be used, false
+ * otherwise.
+ *
+ * \sa EnableAck
+ */
bool MustWaitNormalAck (void) const;
+ /**
+ * \returns true if fast ack protocol should be used, false
+ * otherwise.
+ *
+ * \sa EnableFastAck
+ */
bool MustWaitFastAck (void) const;
+ /**
+ * \returns true if super fast ack protocol should be used, false
+ * otherwise.
+ *
+ * \sa EnableSuperFastAck
+ */
bool MustWaitSuperFastAck (void) const;
+ /**
+ * \returns true if RTS should be sent and CTS waited for before
+ * sending data, false otherwise.
+ */
bool MustSendRts (void) const;
+ /**
+ * \returns true if a duration/id was forced with
+ * EnableOverrideDurationId, false otherwise.
+ */
bool HasDurationId (void) const;
+ /**
+ * \returns the duration/id forced by EnableOverrideDurationId
+ */
Time GetDurationId (void) const;
+ /**
+ * \returns true if EnableNextData was called, false otherwise.
+ */
bool HasNextPacket (void) const;
+ /**
+ * \returns the size specified by EnableNextData.
+ */
uint32_t GetNextPacketSize (void) const;
private:
@@ -144,6 +274,9 @@
};
+/**
+ * \brief handle RTS/CTS/DATA/ACK transactions.
+ */
class MacLow {
public:
typedef Callback<void, Packet , WifiMacHeader const*> MacLowRxCallback;
@@ -155,23 +288,62 @@
void SetPhy (Ptr<WifiPhy> phy);
void SetStations (MacStations *stations);
void SetParameters (MacParameters *parameters);
+ /**
+ * \param callback the callback which receives every incoming packet.
+ *
+ * This callback typically forwards incoming packets to
+ * an instance of ns3::MacRxMiddle.
+ */
void SetRxCallback (MacLowRxCallback callback);
+ /**
+ * \param listener listen to NAV events for every incoming
+ * and outgoing packet.
+ */
void RegisterNavListener (MacLowNavListener *listener);
- /* This transmission time includes the time required for
+ /**
+ * \param payloadSize size of packet to send (does not include the 802.11 MAC header and checksum)
+ * \param to destination address of packet.
+ * \param parameters transmission parameters of packet.
+ *
+ * This transmission time includes the time required for
* the next packet transmission if one was selected.
*/
Time CalculateTransmissionTime (uint32_t payloadSize,
Mac48Address to,
MacLowTransmissionParameters const¶meters) const;
- /* start the transmission of the currently-stored data. */
+ /**
+ * \param packet packet to send
+ * \param hdr 802.11 header for packet to send
+ * \param parameters the transmission parameters to use for this packet.
+ * \param listener listen to transmission events.
+ *
+ * Start the transmission of the input packet and notify the listener
+ * of transmission events.
+ */
void StartTransmission (Packet packet,
WifiMacHeader const*hdr,
MacLowTransmissionParameters parameters,
MacLowTransmissionListener *listener);
+ /**
+ * \param packet packet received
+ * \param rxSnr snr of packet received
+ * \param txMode transmission mode of packet received
+ * \param preamble type of preamble used for the packet received
+ *
+ * This method is typically invoked by the lower PHY layer to notify
+ * the MAC layer that a packet was successfully received.
+ */
void ReceiveOk (Packet packet, double rxSnr, WifiMode txMode, WifiPreamble preamble);
+ /**
+ * \param packet packet received.
+ * \param rxSnr snr of packet received.
+ *
+ * This method is typically invoked by the lower PHY layer to notify
+ * the MAC layer that a packet was unsuccessfully received.
+ */
void ReceiveError (Packet packet, double rxSnr);
private:
void CancelAllEvents (void);
--- a/src/devices/wifi/wifi-mac-queue.h Wed Oct 31 16:26:18 2007 +0100
+++ b/src/devices/wifi/wifi-mac-queue.h Wed Oct 31 16:26:31 2007 +0100
@@ -20,26 +20,6 @@
#ifndef WIFI_MAC_QUEUE_H
#define WIFI_MAC_QUEUE_H
-/* This queue implements what is needed for the 802.11e standard
- * Specifically, it refers to 802.11e/D9, section 9.9.1.6, paragraph 6.
- *
- * When a packet is received by the MAC, to be sent to the PHY,
- * it is queued in the internal queue after being tagged by the
- * current time. If the queue is non-Empty (quite likely), we
- * notify m_packetNotify. This information is forwarded to
- * The associated MacLow80211 which might try to dequeue packets
- * from this queue if it is not doing anything else more important.
- *
- * If it is doing something too important to handle new packets,
- * the MacLow80211 is supposed to try to dequeue packets the next
- * time it can.
- *
- * When a packet is dequeued, the queue checks its timestamp
- * to verify whether or not it should be dropped. If
- * dot11EDCATableMSDULifetime has elapsed, it is dropped.
- * Otherwise, it is returned to the caller.
- */
-
#include <deque>
#include <utility>
#include "ns3/packet.h"
@@ -50,6 +30,21 @@
class MacParameters;
+/**
+ * \brief a 802.11e-specific queue.
+ *
+ * This queue implements what is needed for the 802.11e standard
+ * Specifically, it refers to 802.11e/D9, section 9.9.1.6, paragraph 6.
+ *
+ * When a packet is received by the MAC, to be sent to the PHY,
+ * it is queued in the internal queue after being tagged by the
+ * current time.
+ *
+ * When a packet is dequeued, the queue checks its timestamp
+ * to verify whether or not it should be dropped. If
+ * dot11EDCATableMSDULifetime has elapsed, it is dropped.
+ * Otherwise, it is returned to the caller.
+ */
class WifiMacQueue {
public:
WifiMacQueue ();
--- a/src/devices/wifi/wifi-net-device.h Wed Oct 31 16:26:18 2007 +0100
+++ b/src/devices/wifi/wifi-net-device.h Wed Oct 31 16:26:31 2007 +0100
@@ -168,6 +168,9 @@
class NqstaWifiNetDevice : public WifiNetDevice
{
public:
+ /**
+ * The ssid is initialized from \valueref{WifiSsid}.
+ */
NqstaWifiNetDevice (Ptr<Node> node);
virtual ~NqstaWifiNetDevice ();
@@ -205,6 +208,9 @@
class NqapWifiNetDevice : public WifiNetDevice
{
public:
+ /**
+ * The ssid is initialized from \valueref{WifiSsid}.
+ */
NqapWifiNetDevice (Ptr<Node> node);
virtual ~NqapWifiNetDevice ();
--- a/src/devices/wifi/wifi.h Wed Oct 31 16:26:18 2007 +0100
+++ b/src/devices/wifi/wifi.h Wed Oct 31 16:26:31 2007 +0100
@@ -6,11 +6,13 @@
* and to provide a not-so-slow PHY-level model of the 802.11a
* specification.
*
- * The current implementation provides roughly 3 levels of models:
+ * The current implementation provides roughly 4 levels of models:
* - the PHY layer models
* - the so-called MAC low models: they implement DCF
* - the so-called MAC high models: they implement the MAC-level
* beacon generation, probing, and association state machines.
+ * - a set of Rate control algorithms used by the MAC low models.
+ *
*
* We have today 3 MAC high models:
* - a simple adhoc state machine which does not perform any
@@ -24,13 +26,26 @@
* accepts every attempt to associate. This AP state machine
* is implemented by the ns3::NqapWifiNetDevice.
*
- * The PHY layer implements the model described in
- * "Yet Another Network Simulator", (http://cutebugs.net/files/wns2-yans.pdf)
- * The implementation is located in the ns3::WifiPhy class.
+ * The MAC low layer is split in 3 components:
+ * - ns3::MacLow which takes care of RTS/CTS/DATA/ACK transactions.
+ * - ns3::Dcf which implements the DCF function.
+ * - ns3::DcaTxop which handles the packet queue, packet fragmentation,
+ * and packet retransmissions if they are needed.
+ *
+ * The PHY layer implements a single model in ns3::WifiPhy.
*
- * The MAC low models attempt to implement the 802.11 DCF function
- * in an optimized way through the technique described in XXX.
- * This implementation is located in the ns3::Dcf class.
+ * It also provides a set of Rate control algorithms:
+ * - ns3::ArfMacStations (initialized from \valueref{WifiArfTimerThreshold}, and,
+ * \valueref{WifiArfSuccessThreshold})
+ * - ns3::AArfMacStations (initialized from \valueref{WifiAarfMinSuccessThreshold},
+ * \valueref{WifiAarfMinTimerThreshold}, \valueref{WifiAarfSuccessK},
+ * \valueref{WifiAarfMaxSuccessThreshold}, and, \valueref{WifiAarfTimerK}
+ * - ns3::IdealMacStations (initialized from \valueref{WifiIdealRateControlBerThreshold})
+ * - ns3::CrMacStations (initialized from \valueref{WifiConstantDataRate}, and,
+ * \valueref{WifiConstantCtlRate}).
+ *
+ * The type of rate control algorithm is controlled through \valueref{WifiRateControlAlgorithm}.
+ *
*
* \section Wifi Tutorial
*