24 #include "ns3/assert.h"
26 #include "ns3/simulator.h"
27 #include "ns3/string.h"
28 #include "ns3/pointer.h"
29 #include "ns3/boolean.h"
52 .SetGroupName (
"Wifi")
54 .AddAttribute (
"BeaconInterval",
"Delay between two beacons",
59 .AddAttribute (
"BeaconJitter",
"A uniform random variable to cause the initial beacon starting time (after simulation time 0) to be distributed between 0 and the BeaconInterval.",
62 MakePointerChecker<UniformRandomVariable> ())
63 .AddAttribute (
"EnableBeaconJitter",
"If beacons are enabled, whether to jitter the initial send event.",
67 .AddAttribute (
"BeaconGeneration",
"Whether or not beacons are generated.",
151 m_beaconDca->SetWifiRemoteStationManager (stationManager);
173 NS_LOG_WARN (
"beacon interval should be multiple of 1024us (802.11 time unit), see IEEE Std. 802.11-2012");
223 NS_LOG_FUNCTION (
this << packet << from << to << static_cast<uint32_t> (tid));
264 m_dca->Queue (packet, hdr);
376 m_dca->Queue (packet, hdr);
402 assoc.SetStatusCode (code);
415 m_dca->Queue (packet, hdr);
514 NS_LOG_DEBUG (
"forwarding frame from=" << from <<
", to=" << to);
550 else if (hdr->
IsMgt ())
567 bool problem =
false;
652 i != packets.end (); ++i)
654 if ((*i).second.GetDestinationAddr () ==
GetAddress ())
656 ForwardUp ((*i).first, (*i).second.GetSourceAddr (),
657 (*i).second.GetDestinationAddr ());
663 NS_LOG_DEBUG (
"forwarding QoS frame from=" << from <<
", to=" << to);
680 NS_LOG_DEBUG (
"Scheduling initial beacon for access point " <<
GetAddress() <<
" at time " << jitter <<
" microseconds");
virtual void DoInitialize(void)
Initialize() implementation.
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
void SetBeaconInterval(Time interval)
void AddSupportedRate(uint32_t bs)
Add the given rate to the supported rates.
Simulation virtual time values and global simulation resolution.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
HtCapabilities GetHtCapabilities(void) const
Return the HT capability of the current AP.
void SetStream(int64_t stream)
Specifies the stream number for this RNG stream.
AttributeValue implementation for Boolean.
void SetGreenfield(uint8_t greenfield)
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
virtual void SetWifiRemoteStationManager(Ptr< WifiRemoteStationManager > stationManager)
static WifiMode GetDsssRate1Mbps()
Return a WifiMode for DSSS at 1Mbps.
Hold variables of type string.
void SetHtSupported(uint8_t htsupported)
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
void RecordWaitAssocTxOk(Mac48Address address)
Records that we are waiting for an ACK for the association response we sent.
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)
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
EdcaQueues m_edca
This is a map from Access Category index to the corresponding channel access function.
enum WifiModulationClass GetModulationClass() const
virtual uint8_t GetNMcs(void) const =0
The WifiPhy::GetNMcs() method is used (e.g., by a WifiRemoteStationManager) to determine the set of t...
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
MacTxMiddle * m_txMiddle
TX middle (aggregation etc.)
#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...
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
std::list< std::pair< Ptr< Packet >, AmsduSubframeHeader > >::const_iterator DeaggregatedMsdusCI
bool IsBroadcast(void) const
static DeaggregatedMsdus Deaggregate(Ptr< Packet > aggregatedPacket)
void NotifyRxDrop(Ptr< const Packet > packet)
virtual bool GetLdpc(void) const =0
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...
void SendAssocResp(Mac48Address to, bool success)
Forward an association response packet to the DCF.
virtual bool SupportsSendFrom(void) const
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.
Ptr< DcaTxop > m_beaconDca
Dedicated DcaTxop for beacons.
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...
bool IsMandatory(void) const
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.
void RecordDisassociated(Mac48Address address)
Records that the STA was disassociated.
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range.
bool m_enableBeaconGeneration
Flag if beacons are being generated.
virtual void Enqueue(Ptr< const Packet > packet, Mac48Address to)
virtual void SetBssid(Mac48Address bssid)
void ForwardUp(Ptr< Packet > packet, Mac48Address from, Mac48Address to)
Forward the packet up to the device.
virtual void SetWifiRemoteStationManager(Ptr< WifiRemoteStationManager > stationManager)
base class for all MAC-level wifi objects.
void SetSuccess(void)
Set success bit to 0 (success).
bool m_qosSupported
This Boolean is set true iff this WifiMac is to model 802.11e/WMM style Quality of Service...
Ptr< const AttributeAccessor > MakePointerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
void SetTypeOfStation(TypeOfStation type)
This method is invoked by a subclass to specify what type of station it is implementing.
int64_t GetMicroSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
void SetShortGuardInterval20(uint8_t shortguardinterval)
AttributeValue implementation for Time.
Ptr< DcaTxop > m_dca
This holds a pointer to the DCF instance for this WifiMac - used for transmission of frames to non-Qo...
static TypeId GetTypeId(void)
void ForwardDown(Ptr< const Packet > packet, Mac48Address from, Mac48Address to)
Forward the packet down to DCF/EDCAF (enqueue the packet).
void RecordGotAssocTxFailed(Mac48Address address)
Records that we missed an ACK for the association response we sent.
WifiMode GetBasicMode(uint32_t i) const
Return a basic mode from the set of basic modes.
void AddStationHtCapabilities(Mac48Address from, HtCapabilities htcapabilities)
Records HT capabilities of the remote station.
AcIndex QosUtilsMapTidToAc(uint8_t tid)
Maps TID (Traffic ID) to Access classes.
virtual void SetAddress(Mac48Address address)
static Mac48Address GetBroadcast(void)
bool IsSupportedMcs(uint8_t mcs)
EventId m_beaconEvent
Event to generate one beacon.
virtual bool GetGuardInterval(void) const =0
Mac48Address GetAddress(void) const
Return the MAC address of this MacLow.
virtual uint32_t GetNBssMembershipSelectors(void) const =0
The WifiPhy::NBssMembershipSelectors() method is used (e.g., by a WifiRemoteStationManager) to determ...
Ptr< MacLow > m_low
MacLow (RTS, CTS, DATA, ACK etc.)
uint32_t GetNBasicMcs(void) const
Return the number of basic MCS index.
void SetBasicRate(uint32_t bs)
Set the given rate to basic rates.
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...
virtual void DeaggregateAmsduAndForward(Ptr< Packet > aggregatedPacket, const WifiMacHeader *hdr)
This method is called to de-aggregate an A-MSDU and forward the constituent packets up the stack...
Ptr< Packet > Copy(void) const
performs a COW copy of the packet.
Status code for association response.
bool IsWaitAssocTxOk(Mac48Address address) const
Return whether we are waiting for an ACK for the association response we sent.
virtual void SetLinkUpCallback(Callback< void > linkUp)
virtual void SetLinkUpCallback(Callback< void > linkUp)
virtual void DoDispose()
Destructor implementation.
std::list< std::pair< Ptr< Packet >, AmsduSubframeHeader > > DeaggregatedMsdus
Every class exported by the ns3 library is enclosed in the ns3 namespace.
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...
virtual uint32_t GetBssMembershipSelector(uint32_t selector) const =0
The WifiPhy::BssMembershipSelector() method is used (e.g., by a WifiRemoteStationManager) to determin...
Ptr< const AttributeChecker > MakeBooleanChecker(void)
DcfManager * m_dcfManager
DCF manager (access to channel)
void AddBasicMode(WifiMode mode)
Invoked in a STA upon association to store the set of rates which belong to the BSSBasicRateSet of th...
bool IsAssociated(Mac48Address address) const
Return whether the station associated.
virtual WifiMode GetMode(uint32_t mode) const =0
The WifiPhy::GetNModes() and WifiPhy::GetMode() methods are used (e.g., by a WifiRemoteStationManager...
static EventId ScheduleNow(MEM mem_ptr, OBJ obj)
Schedule an event to expire Now.
Ptr< const AttributeAccessor > MakeTimeAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
bool GetBeaconGeneration(void) const
Return whether the AP is generating beacons.
Wi-Fi AP state machineHandle association, dis-association and authentication, of STAs within an infra...
bool m_htSupported
This Boolean is set true iff this WifiMac is to model 802.11n.
void SendProbeResp(Mac48Address to)
Forward a probe response packet to the DCF.
SupportedRates GetSupportedRates(void) const
Return an instance of SupportedRates that contains all rates that we support including HT rates...
uint32_t GetNBasicModes(void) const
Return the number of basic modes we support.
virtual void TxFailed(const WifiMacHeader &hdr)
The packet we sent was successfully received by the receiver (i.e.
void AddSupportedMcs(Mac48Address address, uint8_t mcs)
Record the MCS index supported by the station.
void SendOneBeacon(void)
Forward a beacon packet to the beacon special DCF.
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
uint8_t GetBasicMcs(uint32_t i) const
Return the MCS at the given list index.
virtual void DoDispose(void)
Destructor implementation.
virtual void SetAddress(Mac48Address address)
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
virtual Mac48Address GetAddress(void) const
Ptr< UniformRandomVariable > m_beaconJitter
UniformRandomVariable used to randomize the time of the first beacon.
Time m_beaconInterval
Interval between beacons.
virtual void DoInitialize()
Initialize() implementation.
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.
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit.
bool m_enableBeaconJitter
Flag if the first beacon should be generated at random time.
Time GetBeaconInterval(void) const
virtual void TxOk(const WifiMacHeader &hdr)
The packet we sent was successfully received by the receiver (i.e.
virtual void TxOk(const WifiMacHeader &hdr)
The packet we sent was successfully received by the receiver (i.e.
static WifiMode GetDsssRate2Mbps()
Return a WifiMode for DSSS at 2Mbps.
Ptr< WifiRemoteStationManager > m_stationManager
Remote station manager (rate control, RTS/CTS/fragmentation thresholds etc.)
void SetFailure(void)
Set success bit to 1 (failure.
a unique identifier for an interface.
uint64_t GetDataRate(void) const
TypeId SetParent(TypeId tid)
void StartBeaconing(void)
Start beacon transmission immediately.
virtual bool GetGreenfield(void) const =0
void RecordGotAssocTxOk(Mac48Address address)
Records that we got an ACK for the association response we sent.
void AddHeader(const Header &header)
Add header to this packet.
DSSS PHY (Clause 15) and HR/DSSS PHY (Clause 18)
void SetBeaconGeneration(bool enable)
Enable or disable beacon generation of the AP.
virtual void TxFailed(const WifiMacHeader &hdr)
The packet we sent was successfully received by the receiver (i.e.