25 #include "ns3/simulator.h" 
   26 #include "ns3/string.h" 
   27 #include "ns3/pointer.h" 
   28 #include "ns3/boolean.h" 
   29 #include "ns3/trace-source-accessor.h" 
   69     .SetGroupName (
"Wifi")
 
   71     .AddAttribute (
"ProbeRequestTimeout", 
"The interval between two consecutive probe request attempts.",
 
   75     .AddAttribute (
"AssocRequestTimeout", 
"The interval between two consecutive assoc request attempts.",
 
   79     .AddAttribute (
"MaxMissedBeacons",
 
   80                    "Number of beacons which much be consecutively missed before " 
   81                    "we attempt to restart association.",
 
   84                    MakeUintegerChecker<uint32_t> ())
 
   85     .AddAttribute (
"ActiveProbing",
 
   86                    "If true, we send probe requests. If false, we don't." 
   87                    "NOTE: if more than one STA in your simulation is using active probing, " 
   88                    "you should enable it at a different simulation time for each STA, " 
   89                    "otherwise all the STAs will start sending probes at the same time resulting in collisions. " 
   90                    "See bug 1060 for more info.",
 
   94     .AddTraceSource (
"Assoc", 
"Associated with an access point.",
 
   96                      "ns3::Mac48Address::TracedCallback")
 
   97     .AddTraceSource (
"DeAssoc", 
"Association with an access point lost.",
 
   99                      "ns3::Mac48Address::TracedCallback")
 
  105   : m_state (BEACON_MISSED),
 
  106     m_probeRequestEvent (),
 
  107     m_assocRequestEvent (),
 
  108     m_beaconWatchdogEnd (
Seconds (0.0))
 
  200   m_dca->Queue (packet, hdr);
 
  241   m_dca->Queue (packet, hdr);
 
  421       m_dca->Queue (packet, hdr);
 
  446           NS_LOG_LOGIC (
"Received data frame while not associated: ignore");
 
  452           NS_LOG_LOGIC (
"Received data frame not from the DS: ignore");
 
  458           NS_LOG_LOGIC (
"Received data frame not from the BSS we are associated with: ignore");
 
  493       bool goodBeacon = 
false;
 
  501       bool bssMembershipSelectorMatch = 
false;
 
  507               NS_LOG_LOGIC (
"Beacon is matched to our BSS membership selector");
 
  508               bssMembershipSelectorMatch = 
true;
 
  607               bool isErpAllowed = 
false;
 
  673                   bool isErpAllowed = 
false;
 
  804       NS_LOG_DEBUG (
"Adding supported rate of " << modeDataRate);
 
static Time GetDelayLeft(const EventId &id)
Get the remaining time until this event will execute. 
 
bool IsWaitAssocResp(void) const 
Return whether we are waiting for an association response from an AP. 
 
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer. 
 
The HT Operations Information ElementThis class knows how to serialise and deserialise the HT Operati...
 
virtual void SetMaxCw(uint32_t maxCw)
Set the maximum contention window size. 
 
TracedCallback< Mac48Address > m_deAssocLogger
 
void AddSupportedRate(uint32_t bs)
Add the given rate to the supported rates. 
 
SupportedRates GetSupportedRates(void) const 
Return an instance of SupportedRates that contains all rates that we support including HT rates...
 
virtual uint32_t GetNBssMembershipSelectors(void) const 
The WifiPhy::NBssMembershipSelectors() method is used (e.g., by a WifiRemoteStationManager) to determ...
 
Simulation virtual time values and global simulation resolution. 
 
bool IsSupportedTxMcs(uint8_t mcs) const 
 
Time m_assocRequestTimeout
 
void AddSupportedMcs(Mac48Address address, WifiMode mcs)
Record the MCS index supported by the station. 
 
bool GetShortSlotTimeEnabled(void) const 
Return whether the device uses short slot time. 
 
virtual void Receive(Ptr< Packet > packet, const WifiMacHeader *hdr)
This method acts as the MacRxMiddle receive callback and is invoked to notify us that a frame has bee...
 
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
 
AttributeValue implementation for Boolean. 
 
void SendAssociationRequest(void)
Forward an association request packet to the DCF. 
 
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system. 
 
void AssocRequestTimeout(void)
This method is called after the association timeout occurred. 
 
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
 
Time m_probeRequestTimeout
 
void SetProbeRequestTimeout(Time timeout)
 
EdcaQueues m_edca
This is a map from Access Category index to the corresponding channel access function. 
 
enum WifiModulationClass GetModulationClass() const 
 
uint8_t GetViCWmax(void) const 
 
uint8_t GetVoAifsn(void) const 
 
bool IsNull(void) const 
Check for null implementation. 
 
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
 
Callback< void > m_linkUp
Callback when a link is up. 
 
void ConfigureContentionWindow(uint32_t cwMin, uint32_t cwMax)
 
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
 
The HT Capabilities Information ElementThis class knows how to serialise and deserialise the HT Capab...
 
void SetSlot(Time slotTime)
 
void NotifyRxDrop(Ptr< const Packet > packet)
 
bool IsRunning(void) const 
This method is syntactic sugar for !IsExpired(). 
 
virtual void DeaggregateAmsduAndForward(Ptr< Packet > aggregatedPacket, const WifiMacHeader *hdr)
This method can be called to de-aggregate an A-MSDU and forward the constituent packets up the stack...
 
virtual uint8_t GetNMcs(void) const 
The WifiPhy::GetNMcs() method is used (e.g., by a WifiRemoteStationManager) to determine the set of t...
 
TracedCallback< Mac48Address > m_assocLogger
 
EventId m_assocRequestEvent
 
Ptr< WifiPhy > m_phy
Wifi PHY. 
 
bool IsEqual(const Ssid &o) const 
Check if the two SSIDs are equal. 
 
uint8_t GetVoCWmin(void) const 
 
virtual Ssid GetSsid(void) const 
 
The Supported Rates Information ElementThis class knows how to serialise and deserialise the Supporte...
 
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
 
VhtCapabilities GetVhtCapabilities(void) const 
Return the VHT capability of the device. 
 
virtual uint32_t GetBssMembershipSelector(uint32_t selector) const 
The WifiPhy::BssMembershipSelector() method is used (e.g., by a WifiRemoteStationManager) to determin...
 
void SetAssocRequestTimeout(Time timeout)
 
virtual void Receive(Ptr< Packet > packet, const WifiMacHeader *hdr)
This method acts as the MacRxMiddle receive callback and is invoked to notify us that a frame has bee...
 
uint8_t QosUtilsGetTidForPacket(Ptr< const Packet > packet)
If a qos tag is attached to the packet, returns a value < 8. 
 
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source. 
 
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range. 
 
uint16_t GetBeTXOPLimit(void) const 
 
uint8_t GetViCWmin(void) const 
 
void SetShortSlotTimeEnabled(bool enable)
Enable or disable short slot time. 
 
virtual void SetBssid(Mac48Address bssid)
 
void SendProbeRequest(void)
Forward a probe request packet to the DCF. 
 
void ForwardUp(Ptr< Packet > packet, Mac48Address from, Mac48Address to)
Forward the packet up to the device. 
 
base class for all MAC-level wifi objects. 
 
void ProbeRequestTimeout(void)
This method is called after the probe request timeout occurred. 
 
bool m_qosSupported
This Boolean is set true iff this WifiMac is to model 802.11e/WMM style Quality of Service...
 
static EventId Schedule(Time const &delay, MEM mem_ptr, OBJ obj)
Schedule an event to expire after delay. 
 
void SetTypeOfStation(TypeOfStation type)
This method is invoked by a subclass to specify what type of station it is implementing. 
 
uint16_t GetBkTXOPLimit(void) const 
 
AttributeValue implementation for Time. 
 
uint8_t GetBeCWmin(void) const 
 
MacState
The current MAC state of the STA. 
 
Ptr< DcaTxop > m_dca
This holds a pointer to the DCF instance for this WifiMac - used for transmission of frames to non-Qo...
 
virtual void SetMinCw(uint32_t minCw)
Set the minimum contention window size. 
 
The IEEE 802.11ac VHT Capabilities. 
 
void NotifyTxDrop(Ptr< const Packet > packet)
 
Hold an unsigned integer type. 
 
void MissedBeacons(void)
This method is called after we have not received a beacon from the AP. 
 
void AddStationHtCapabilities(Mac48Address from, HtCapabilities htcapabilities)
Records HT capabilities of the remote station. 
 
bool m_vhtSupported
This Boolean is set true iff this WifiMac is to model 802.11ac. 
 
AcIndex QosUtilsMapTidToAc(uint8_t tid)
Maps TID (Traffic ID) to Access classes. 
 
uint16_t GetVoTXOPLimit(void) const 
 
uint8_t GetMcsValue(void) const 
 
static Mac48Address GetBroadcast(void)
 
Mac48Address GetAddress(void) const 
Return the MAC address of this MacLow. 
 
uint8_t GetVoCWmax(void) const 
 
bool GetActiveProbing(void) const 
Return whether active probing is enabled. 
 
virtual uint32_t GetNModes(void) const 
The WifiPhy::GetNModes() and WifiPhy::GetMode() methods are used (e.g., by a WifiRemoteStationManager...
 
void SetState(enum MacState value)
Set the current MAC state. 
 
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC. 
 
Ptr< MacLow > m_low
MacLow (RTS, CTS, DATA, ACK etc.) 
 
HtCapabilities GetHtCapabilities(void) const 
Return the HT capability of the device. 
 
Callback< void > m_linkDown
Callback when a link is down. 
 
bool IsBasicRate(uint32_t bs) const 
Check if the given rate is a basic rate. 
 
uint32_t m_maxMissedBeacons
 
void StartActiveAssociation(void)
Start an active association sequence immediately. 
 
virtual WifiMode GetMcs(uint8_t mcs) const 
The WifiPhy::GetMcs() method is used (e.g., by a WifiRemoteStationManager) to determine the set of tr...
 
void SetMaxMissedBeacons(uint32_t missed)
 
virtual uint32_t GetChannelWidth(void) const 
 
void AddBssMembershipSelectorRate(uint32_t bs)
Add a special value to the supported rate set, corresponding to a BSS membership selector. 
 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
 
uint8_t GetBeCWmax(void) const 
 
The EDCA Parameter SetThis class knows how to serialise and deserialise the EDCA Parameter Set...
 
uint8_t GetBkCWmax(void) const 
 
void AddSupportedMode(Mac48Address address, WifiMode mode)
Invoked in a STA or AP to store the set of modes supported by a destination which is also supported l...
 
Ptr< const AttributeChecker > MakeBooleanChecker(void)
 
bool IsSupportedMcs(uint8_t mcs) const 
 
static TypeId GetTypeId(void)
 
void AddBasicMode(WifiMode mode)
Invoked in a STA upon association to store the set of rates which belong to the BSSBasicRateSet of th...
 
void SetUseNonErpProtection(bool enable)
Enable or disable protection for non-ERP stations. 
 
uint8_t GetBkCWmin(void) const 
 
uint64_t GetDataRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const 
 
uint16_t GetViTXOPLimit(void) const 
 
uint8_t GetViAifsn(void) const 
 
void RestartBeaconWatchdog(Time delay)
Restarts the beacon timer. 
 
CapabilityInformation GetCapabilities(void) const 
Return the Capability information of the current STA. 
 
static EventId ScheduleNow(MEM mem_ptr, OBJ obj)
Schedule an event to expire Now. 
 
void TryToEnsureAssociated(void)
Try to ensure that we are associated with an AP by taking an appropriate action depending on the curr...
 
Ptr< const AttributeAccessor > MakeTimeAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
 
static Time Now(void)
Return the current simulation virtual time. 
 
bool m_htSupported
This Boolean is set true iff this WifiMac is to model 802.11n. 
 
void SetActiveProbing(bool enable)
Enable or disable active probing. 
 
virtual Mac48Address GetBssid(void) const 
 
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG. 
 
virtual Mac48Address GetAddress(void) const 
 
Time Seconds(double value)
Construct a Time in the indicated unit. 
 
bool IsSuccess(void) const 
Return whether the status code is success. 
 
virtual void Enqueue(Ptr< const Packet > packet, Mac48Address to)
 
void Cancel(void)
This method is syntactic sugar for the ns3::Simulator::Cancel method. 
 
uint8_t GetBeAifsn(void) const 
 
bool IsSupportedRate(uint32_t bs) const 
Check if the given rate is supported. 
 
uint8_t GetBkAifsn(void) const 
 
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit. 
 
virtual bool GetShortSlotTimeSupported(void) const 
 
bool m_erpSupported
This Boolean is set true iff this WifiMac is to model 802.11g. 
 
virtual void SetTxopLimit(Time txopLimit)
 
EventId m_probeRequestEvent
 
void SetShortPreambleEnabled(bool enable)
Enable or disable short PLCP preambles. 
 
Ptr< WifiRemoteStationManager > m_stationManager
Remote station manager (rate control, RTS/CTS/fragmentation thresholds etc.) 
 
virtual bool GetShortPlcpPreambleSupported(void) const 
Return whether short PLCP preamble is supported. 
 
bool IsAssociated(void) const 
Return whether we are associated with an AP. 
 
bool IsExpired(void) const 
This method is syntactic sugar for the ns3::Simulator::IsExpired method. 
 
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
 
a unique identifier for an interface. 
 
void SetEdcaParameters(AcIndex ac, uint8_t cwMin, uint8_t cwMax, uint8_t aifsn, Time txopLimit)
Set the EDCA parameters. 
 
TypeId SetParent(TypeId tid)
Set the parent TypeId. 
 
AcIndex
This enumeration defines the Access Categories as an enumeration with values corresponding to the AC ...
 
void AddHeader(const Header &header)
Add header to this packet. 
 
void AddStationVhtCapabilities(Mac48Address from, VhtCapabilities vhtcapabilities)
Records VHT capabilities of the remote station. 
 
virtual void SetAifsn(uint32_t aifsn)
 
virtual WifiMode GetMode(uint32_t mode) const 
The WifiPhy::GetNModes() and WifiPhy::GetMode() methods are used (e.g., by a WifiRemoteStationManager...
 
bool IsBssMembershipSelectorRate(uint32_t bs) const 
Check if the given rate is a BSS membership selector value. 
 
The Wifi MAC high model for a non-AP STA in a BSS.