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"
71 .AddConstructor<StaWifiMac> ()
72 .AddAttribute (
"ProbeRequestTimeout",
"The interval between two consecutive probe request attempts.",
76 .AddAttribute (
"AssocRequestTimeout",
"The interval between two consecutive assoc request attempts.",
80 .AddAttribute (
"MaxMissedBeacons",
81 "Number of beacons which much be consecutively missed before "
82 "we attempt to restart association.",
85 MakeUintegerChecker<uint32_t> ())
86 .AddAttribute (
"ActiveProbing",
"If true, we send probe requests. If false, we don't. NOTE: if more than one STA in your simulation is using active probing, you should enable it at a different simulation time for each STA, otherwise all the STAs will start sending probes at the same time resulting in collisions. See bug 1060 for more info.",
89 MakeBooleanChecker ())
90 .AddTraceSource (
"Assoc",
"Associated with an access point.",
92 .AddTraceSource (
"DeAssoc",
"Association with an access point lost.",
99 : m_state (BEACON_MISSED),
100 m_probeRequestEvent (),
101 m_assocRequestEvent (),
102 m_beaconWatchdogEnd (Seconds (0.0))
185 m_dca->Queue (packet, hdr);
222 m_dca->Queue (packet, hdr);
399 m_dca->Queue (packet, hdr);
424 NS_LOG_LOGIC (
"Received data frame while not associated: ignore");
430 NS_LOG_LOGIC (
"Received data frame not from the DS: ignore");
436 NS_LOG_LOGIC (
"Received data frame not from the BSS we are associated with: ignore");
471 bool goodBeacon =
false;
static Time GetDelayLeft(const EventId &id)
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.
NS_LOG_COMPONENT_DEFINE("StaWifiMac")
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...
keep track of time values and allow control of global simulation resolution
Time m_assocRequestTimeout
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)
void SendAssociationRequest(void)
Forward an association request packet to the DCF.
void SetGreenfield(uint8_t greenfield)
void SetHtSupported(uint8_t htsupported)
virtual uint32_t GetNModes(void) const =0
The WifiPhy::GetNModes() and WifiPhy::GetMode() methods are used (e.g., by a WifiRemoteStationManager...
void SetRxMcsBitmask(uint8_t index)
void AssocRequestTimeout(void)
This method is called after the association timeout occurred.
Time m_probeRequestTimeout
void SetProbeRequestTimeout(Time timeout)
EdcaQueues m_edca
This is a map from Access Category index to the corresponding channel access function.
virtual uint8_t GetNMcs(void) const =0
The WifiPhy::GetNMcs() method is used (e.g., by a WifiRemoteStationManager) to determine the set of t...
bool IsNull(void) const
Check for null implementation.
#define NS_ASSERT(condition)
Callback< void > m_linkUp
Callback when a link is up.
NS_OBJECT_ENSURE_REGISTERED(NullMessageSimulatorImpl)
The Ht Capabilities Information ElementThis class knows how to serialise and deserialise the Ht Capab...
void NotifyRxDrop(Ptr< const Packet > packet)
virtual bool GetLdpc(void) const =0
bool IsRunning(void) const
This method is syntactic sugar for the ns3::Simulator::isExpired method.
virtual uint8_t GetMcs(uint8_t mcs) const =0
The WifiPhy::GetMcs() method is used (e.g., by a WifiRemoteStationManager) to determine the set of tr...
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...
TracedCallback< Mac48Address > m_assocLogger
EventId m_assocRequestEvent
Ptr< WifiPhy > m_phy
Wifi PHY.
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
Schedule an event to expire at the relative time "time" is reached.
bool IsEqual(const Ssid &o) const
Check if the two SSIDs are equal.
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...
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.
MacState
The current MAC state of the STA.
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...
void SetTypeOfStation(TypeOfStation type)
This method is invoked by a subclass to specify what type of station it is implementing.
void SetShortGuardInterval20(uint8_t shortguardinterval)
hold objects of type ns3::Time
Ptr< DcaTxop > m_dca
This holds a pointer to the DCF instance for this WifiMac - used for transmission of frames to non-Qo...
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.
AcIndex QosUtilsMapTidToAc(uint8_t tid)
Maps TID (Traffic ID) to Access classes.
static Mac48Address GetBroadcast(void)
bool IsSupportedMcs(uint8_t mcs)
virtual bool GetGuardInterval(void) const =0
void SetState(enum MacState value)
Set the current MAC state.
virtual uint32_t GetNBssMembershipSelectors(void) const =0
The WifiPhy::NBssMembershipSelectors() method is used (e.g., by a WifiRemoteStationManager) to determ...
#define NS_LOG_LOGIC(msg)
Ptr< MacLow > m_low
MacLow (RTS, CTS, DATA, ACK etc.)
void SetBasicRate(uint32_t bs)
Set the given rate to basic rates.
HtCapabilities GetHtCapabilities(void) const
Return the HT capability of the current AP.
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.
void SetMaxMissedBeacons(uint32_t missed)
virtual uint32_t GetBssMembershipSelector(uint32_t selector) const =0
The WifiPhy::BssMembershipSelector() method is used (e.g., by a WifiRemoteStationManager) to determin...
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
static TypeId GetTypeId(void)
virtual WifiMode GetMode(uint32_t mode) const =0
The WifiPhy::GetNModes() and WifiPhy::GetMode() methods are used (e.g., by a WifiRemoteStationManager...
void RestartBeaconWatchdog(Time delay)
Restarts the beacon timer.
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...
static Time Now(void)
Return the "current simulation 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)
virtual Mac48Address GetAddress(void) const
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.
void SetLdpc(uint8_t ldpc)
bool IsSupportedRate(uint32_t bs) const
Check if the given rate is supported.
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range.
EventId m_probeRequestEvent
Ptr< WifiRemoteStationManager > m_stationManager
Remote station manager (rate control, RTS/CTS/fragmentation thresholds etc.)
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.
a unique identifier for an interface.
uint64_t GetDataRate(void) const
TypeId SetParent(TypeId tid)
virtual bool GetGreenfield(void) const =0
void AddHeader(const Header &header)
Add header to this packet.