/usr/include/ns3.27/ns3/aarfcd-wifi-manager.h is in libns3-dev 3.27+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2005,2006 INRIA
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Federico Maguolo <maguolof@dei.unipd.it>
*/
#ifndef AARFCD_WIFI_MANAGER_H
#define AARFCD_WIFI_MANAGER_H
#include "ns3/traced-value.h"
#include "wifi-remote-station-manager.h"
namespace ns3 {
struct AarfcdWifiRemoteStation;
/**
* \brief an implementation of the AARF-CD algorithm
* \ingroup wifi
*
* This algorithm was first described in "Efficient Collision Detection for Auto Rate Fallback Algorithm".
* The implementation available here was done by Federico Maguolo for a very early development
* version of ns-3. Federico died before merging this work in ns-3 itself so his code was ported
* to ns-3 later without his supervision.
*
* This RAA does not support HT, VHT nor HE modes and will error
* exit if the user tries to configure this RAA with a Wi-Fi MAC
* that has VhtSupported, HtSupported or HeSupported set.
*/
class AarfcdWifiManager : public WifiRemoteStationManager
{
public:
/**
* \brief Get the type ID.
* \return the object TypeId
*/
static TypeId GetTypeId (void);
AarfcdWifiManager ();
virtual ~AarfcdWifiManager ();
// Inherited from WifiRemoteStationManager
void SetHtSupported (bool enable);
void SetVhtSupported (bool enable);
void SetHeSupported (bool enable);
private:
// overriden from base class
WifiRemoteStation * DoCreateStation (void) const;
void DoReportRxOk (WifiRemoteStation *station,
double rxSnr, WifiMode txMode);
void DoReportRtsFailed (WifiRemoteStation *station);
/**
* It is important to realize that "recovery" mode starts after failure of
* the first transmission after a rate increase and ends at the first successful
* transmission. Specifically, recovery mode transcends retransmissions boundaries.
* Fundamentally, ARF handles each data transmission independently, whether it
* is the initial transmission of a packet or the retransmission of a packet.
* The fundamental reason for this is that there is a backoff between each data
* transmission, be it an initial transmission or a retransmission.
*
* \param station the station that we failed to send DATA
*/
void DoReportDataFailed (WifiRemoteStation *station);
void DoReportRtsOk (WifiRemoteStation *station,
double ctsSnr, WifiMode ctsMode, double rtsSnr);
void DoReportDataOk (WifiRemoteStation *station,
double ackSnr, WifiMode ackMode, double dataSnr);
void DoReportFinalRtsFailed (WifiRemoteStation *station);
void DoReportFinalDataFailed (WifiRemoteStation *station);
WifiTxVector DoGetDataTxVector (WifiRemoteStation *station);
WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
bool DoNeedRts (WifiRemoteStation *station,
Ptr<const Packet> packet, bool normally);
bool IsLowLatency (void) const;
/**
* Check if the use of RTS for the given station can be turned off.
*
* \param station the station that we are checking
*/
void CheckRts (AarfcdWifiRemoteStation *station);
/**
* Increase the RTS window size of the given station.
*
* \param station the station to increase RTS window
*/
void IncreaseRtsWnd (AarfcdWifiRemoteStation *station);
/**
* Reset the RTS window of the given station.
*
* \param station the station to reset RTS window
*/
void ResetRtsWnd (AarfcdWifiRemoteStation *station);
/**
* Turn off RTS for the given station.
*
* \param station the station to turn RTS off
*/
void TurnOffRts (AarfcdWifiRemoteStation *station);
/**
* Turn on RTS for the given station.
*
* \param station the station to turn RTS on
*/
void TurnOnRts (AarfcdWifiRemoteStation *station);
//aarf fields below
uint32_t m_minTimerThreshold; ///< minimum timer threshold
uint32_t m_minSuccessThreshold; ///< minimum success threshold
double m_successK; ///< Multiplication factor for the success threshold
uint32_t m_maxSuccessThreshold; ///< maximum success threshold
double m_timerK; ///< Multiplication factor for the timer threshold
//aarf-cd fields below
uint32_t m_minRtsWnd; ///< minimum RTS window
uint32_t m_maxRtsWnd; ///< maximum RTS window
bool m_turnOffRtsAfterRateDecrease; ///< turn off RTS after rate decrease
bool m_turnOnRtsAfterRateIncrease; ///< turn on RTS after rate increase
TracedValue<uint64_t> m_currentRate; //!< Trace rate changes
};
} //namespace ns3
#endif /* AARFCD_WIFI_MANAGER_H */
|