A Discrete-Event Network Simulator
API
regular-wifi-mac.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2008 INRIA
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
19  */
20 
21 #ifndef REGULAR_WIFI_MAC_H
22 #define REGULAR_WIFI_MAC_H
23 
24 #include "wifi-mac.h"
25 #include "dca-txop.h"
26 #include "edca-txop-n.h"
27 
28 namespace ns3 {
29 
30 class MacLow;
31 class MacRxMiddle;
32 class MacTxMiddle;
33 class DcfManager;
34 
44 class RegularWifiMac : public WifiMac
45 {
46 public:
51  static TypeId GetTypeId (void);
52 
53  RegularWifiMac ();
54  virtual ~RegularWifiMac ();
55 
59  void SetSlot (Time slotTime);
63  void SetSifs (Time sifs);
70  void SetEifsNoDifs (Time eifsNoDifs);
74  void SetPifs (Time pifs);
78  void SetRifs (Time rifs);
82  void SetCtsTimeout (Time ctsTimeout);
86  void SetAckTimeout (Time ackTimeout);
87 
88  Time GetRifs (void) const;
92  Time GetPifs (void) const;
96  Time GetSifs (void) const;
100  Time GetSlot (void) const;
104  Time GetEifsNoDifs (void) const;
108  Time GetCtsTimeout (void) const;
112  Time GetAckTimeout (void) const;
113 
120  void SetCtsToSelfSupported (bool enable);
128  bool GetCtsToSelfSupported () const;
129 
136  void SetShortSlotTimeSupported (bool enable);
143  bool GetShortSlotTimeSupported (void) const;
150  void SetRifsSupported (bool enable);
157  bool GetRifsSupported (void) const;
158 
162  Mac48Address GetAddress (void) const;
166  Ssid GetSsid (void) const;
174  void SetSsid (Ssid ssid);
178  void SetBssid (Mac48Address bssid);
182  Mac48Address GetBssid (void) const;
190  void SetPromisc (void);
191 
203  virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to, Mac48Address from);
204 
205  virtual bool SupportsSendFrom (void) const;
206 
215  void Enqueue (Ptr<const Packet> packet, Mac48Address to) = 0;
219  void SetWifiPhy (const Ptr<WifiPhy> phy);
223  Ptr<WifiPhy> GetWifiPhy (void) const;
227  void ResetWifiPhy (void);
231  virtual void SetWifiRemoteStationManager (const Ptr<WifiRemoteStationManager> stationManager);
241  HtCapabilities GetHtCapabilities (void) const;
247  VhtCapabilities GetVhtCapabilities (void) const;
253  HeCapabilities GetHeCapabilities (void) const;
254 
268  void SetForwardUpCallback (ForwardUpCallback upCallback);
272  void SetLinkUpCallback (Callback<void> linkUp);
276  void SetLinkDownCallback (Callback<void> linkDown);
277 
278  /* Next functions are not pure virtual so non Qos WifiMacs are not
279  * forced to implement them.
280  */
281  void SetBasicBlockAckTimeout (Time blockAckTimeout);
282  Time GetBasicBlockAckTimeout (void) const;
283  void SetCompressedBlockAckTimeout (Time blockAckTimeout);
284  Time GetCompressedBlockAckTimeout (void) const;
285 
286 
287 protected:
288  virtual void DoInitialize ();
289  virtual void DoDispose ();
290 
296 
298 
299  ForwardUpCallback m_forwardUp;
302 
304 
308 
311  typedef std::map<AcIndex, Ptr<EdcaTxopN> > EdcaQueues;
312 
315  EdcaQueues m_edca;
316 
322  Ptr<DcaTxop> GetDcaTxop (void) const;
323 
329  Ptr<EdcaTxopN> GetVOQueue (void) const;
335  Ptr<EdcaTxopN> GetVIQueue (void) const;
341  Ptr<EdcaTxopN> GetBEQueue (void) const;
347  Ptr<EdcaTxopN> GetBKQueue (void) const;
348 
362 
370  void ConfigureContentionWindow (uint32_t cwMin, uint32_t cwMax);
371 
380  void SetTypeOfStation (TypeOfStation type);
381 
396  virtual void Receive (Ptr<Packet> packet, const WifiMacHeader *hdr);
403  virtual void TxOk (const WifiMacHeader &hdr);
410  virtual void TxFailed (const WifiMacHeader &hdr);
411 
419  void ForwardUp (Ptr<Packet> packet, Mac48Address from, Mac48Address to);
420 
428  virtual void DeaggregateAmsduAndForward (Ptr<Packet> aggregatedPacket,
429  const WifiMacHeader *hdr);
430 
438  void SendAddBaResponse (const MgtAddBaRequestHeader *reqHdr,
439  Mac48Address originator);
440 
455 
461  void SetQosSupported (bool enable);
467  bool GetQosSupported () const;
468 
482 
488  void SetHtSupported (bool enable);
494  bool GetHtSupported () const;
495 
506  void SetVhtSupported (bool enable);
512  bool GetVhtSupported () const;
513 
524  void SetErpSupported (bool enable);
530  bool GetErpSupported () const;
531 
542  void SetDsssSupported (bool enable);
548  bool GetDsssSupported () const;
549 
560  void SetHeSupported (bool enable);
566  bool GetHeSupported () const;
567 
568 
569 private:
571  RegularWifiMac (const RegularWifiMac &);
579 
586  void SetupEdcaQueue (AcIndex ac);
587 
593  void SetVoMaxAmsduSize (uint32_t size);
599  void SetViMaxAmsduSize (uint32_t size);
605  void SetBeMaxAmsduSize (uint32_t size);
611  void SetBkMaxAmsduSize (uint32_t size);
612 
618  void SetVoMaxAmpduSize (uint32_t size);
624  void SetViMaxAmpduSize (uint32_t size);
630  void SetBeMaxAmpduSize (uint32_t size);
636  void SetBkMaxAmpduSize (uint32_t size);
637 
643  void SetVoBlockAckThreshold (uint8_t threshold);
649  void SetViBlockAckThreshold (uint8_t threshold);
655  void SetBeBlockAckThreshold (uint8_t threshold);
661  void SetBkBlockAckThreshold (uint8_t threshold);
662 
668  void SetVoBlockAckInactivityTimeout (uint16_t timeout);
674  void SetViBlockAckInactivityTimeout (uint16_t timeout);
680  void SetBeBlockAckInactivityTimeout (uint16_t timeout);
686  void SetBkBlockAckInactivityTimeout (uint16_t timeout);
687 
689  void ConfigureAggregation (void);
691  void EnableAggregation (void);
693  void DisableAggregation (void);
694 
695  uint32_t m_voMaxAmsduSize;
696  uint32_t m_viMaxAmsduSize;
697  uint32_t m_beMaxAmsduSize;
698  uint32_t m_bkMaxAmsduSize;
699 
700  uint32_t m_voMaxAmpduSize;
701  uint32_t m_viMaxAmpduSize;
702  uint32_t m_beMaxAmpduSize;
703  uint32_t m_bkMaxAmpduSize;
704 
707 
710 };
711 
712 } //namespace ns3
713 
714 #endif /* REGULAR_WIFI_MAC_H */
void SetQosSupported(bool enable)
Enable or disable QoS support for the device.
void SetHeSupported(bool enable)
Enable or disable HE support for the device.
Ptr< DcfManager > m_dcfManager
DCF manager (access to channel)
void SetVoBlockAckInactivityTimeout(uint16_t timeout)
Set VO block ack inactivity timeout.
uint32_t m_viMaxAmsduSize
maximum A-MSDU size for AC_VI
void SetupEdcaQueue(AcIndex ac)
This method is a private utility invoked to configure the channel access function for the specified A...
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
void ConfigureAggregation(void)
Configure aggregation function.
void SetSifs(Time sifs)
Callback template class.
Definition: callback.h:1176
bool GetDsssSupported() const
Return whether the device supports DSSS.
bool GetVhtSupported() const
Return whether the device supports VHT.
uint32_t m_bkMaxAmpduSize
maximum A-MPDU size for AC_BK
ForwardUpCallback m_forwardUp
Callback to forward packet up the stack.
bool GetCtsToSelfSupported() const
Return whether the device supports CTS-to-self capability.
static TypeId GetTypeId(void)
Get the type ID.
EdcaQueues m_edca
This is a map from Access Category index to the corresponding channel access function.
Forward calls to a chain of Callback.
uint32_t m_beMaxAmpduSize
maximum A-MPDU size for AC_BE
void SetErpSupported(bool enable)
Enable or disable ERP support for the device.
Implement the header for management frames of type add block ack request.
Definition: mgt-headers.h:758
void SetPifs(Time pifs)
void SetCompressedBlockAckTimeout(Time blockAckTimeout)
Callback< void > m_linkUp
Callback when a link is up.
void ConfigureContentionWindow(uint32_t cwMin, uint32_t cwMax)
The HT Capabilities Information ElementThis class knows how to serialise and deserialise the HT Capab...
void SetSsid(Ssid ssid)
void SetSlot(Time slotTime)
Time GetCompressedBlockAckTimeout(void) const
bool GetQosSupported() const
Return whether the device supports QoS.
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...
void SetLinkDownCallback(Callback< void > linkDown)
void SetHtSupported(bool enable)
Enable or disable HT support for the device.
void SetRifsSupported(bool enable)
Enable or disable RIFS feature.
Ptr< WifiPhy > m_phy
Wifi PHY.
uint32_t m_voMaxAmpduSize
maximum A-MPDU size for AC_VO
ns3::Time timeout
void SetRifs(Time rifs)
Ssid GetSsid(void) const
uint32_t m_beMaxAmsduSize
maximum A-MSDU size for AC_BE
VhtCapabilities GetVhtCapabilities(void) const
Return the VHT capability of the device.
virtual void Enqueue(Ptr< const Packet > packet, Mac48Address to, Mac48Address from)
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...
HeCapabilities GetHeCapabilities(void) const
Return the HE capability of the device.
void SetViMaxAmpduSize(uint32_t size)
Set the maximum A-MPDU size for AC_VI.
TracedCallback< const WifiMacHeader & > m_txErrCallback
transmit error callback
bool m_rifsSupported
flag whether RIFS is supported
void SetBkMaxAmsduSize(uint32_t size)
Set the maximum A-MSDU size for AC_BK.
void SetVoMaxAmpduSize(uint32_t size)
Set the maximum A-MPDU size for AC_VO.
void SetVoBlockAckThreshold(uint8_t threshold)
Set the Block ACK threshold for AC_VO.
void SetBeMaxAmpduSize(uint32_t size)
Set the maximum A-MPDU size for AC_BE.
void SetBssid(Mac48Address bssid)
Ptr< EdcaTxopN > GetVOQueue(void) const
Accessor for the AC_VO channel access function.
Time GetSifs(void) const
uint32_t m_voMaxAmsduSize
maximum A-MSDU size for AC_VO
void ForwardUp(Ptr< Packet > packet, Mac48Address from, Mac48Address to)
Forward the packet up to the device.
std::map< AcIndex, Ptr< EdcaTxopN > > EdcaQueues
This type defines a mapping between an Access Category index, and a pointer to the corresponding chan...
WifiPhyStandard
Identifies the PHY specification that a Wifi device is configured to use.
Time GetCtsTimeout(void) const
void SetForwardUpCallback(ForwardUpCallback upCallback)
void SetBeMaxAmsduSize(uint32_t size)
Set the maximum A-MSDU size for AC_BE.
base class for all MAC-level wifi objects.
void EnableAggregation(void)
Enable aggregation function.
void SetEifsNoDifs(Time eifsNoDifs)
void SetBkBlockAckThreshold(uint8_t threshold)
Set the Block ACK threshold for AC_BK.
bool m_qosSupported
This Boolean is set true iff this WifiMac is to model 802.11e/WMM style Quality of Service...
tuple phy
Definition: third.py:86
void SetBasicBlockAckTimeout(Time blockAckTimeout)
void SetTypeOfStation(TypeOfStation type)
This method is invoked by a subclass to specify what type of station it is implementing.
Ptr< DcaTxop > m_dca
This holds a pointer to the DCF instance for this WifiMac - used for transmission of frames to non-Qo...
Ptr< EdcaTxopN > GetBEQueue(void) const
Accessor for the AC_BE channel access function.
void SetVoMaxAmsduSize(uint32_t size)
Set the maximum A-MSDU size for AC_VO.
void FinishConfigureStandard(WifiPhyStandard standard)
The IEEE 802.11ac VHT Capabilities.
Ssid m_ssid
Service Set ID (SSID)
Ptr< DcaTxop > GetDcaTxop(void) const
Accessor for the DCF object.
base class for all MAC-level wifi objects.
Definition: wifi-mac.h:41
Time GetAckTimeout(void) const
void SetViMaxAmsduSize(uint32_t size)
Set the maximum A-MSDU size for AC_VI.
Time GetSlot(void) const
bool m_vhtSupported
This Boolean is set true iff this WifiMac is to model 802.11ac.
void SetAddress(Mac48Address address)
Ptr< MacRxMiddle > m_rxMiddle
RX middle (de-fragmentation etc.)
void ResetWifiPhy(void)
removes attached WifiPhy device from this MAC.
bool m_heSupported
This Boolean is set true iff this WifiMac is to model 802.11ax.
tuple mac
Definition: third.py:92
Time GetPifs(void) const
bool GetHeSupported() const
Return whether the device supports HE.
bool GetErpSupported() const
Return whether the device supports ERP.
Ptr< MacLow > m_low
MacLow (RTS, CTS, DATA, ACK etc.)
void SetBeBlockAckThreshold(uint8_t threshold)
Set the Block ACK threshold for AC_BE.
HtCapabilities GetHtCapabilities(void) const
Return the HT capability of the device.
void SendAddBaResponse(const MgtAddBaRequestHeader *reqHdr, Mac48Address originator)
This method can be called to accept a received ADDBA Request.
Callback< void > m_linkDown
Callback when a link is down.
TracedCallback< const WifiMacHeader & > m_txOkCallback
transmit OK callback
Ptr< EdcaTxopN > GetVIQueue(void) const
Accessor for the AC_VI channel access function.
virtual void SetWifiRemoteStationManager(const Ptr< WifiRemoteStationManager > stationManager)
void SetLinkUpCallback(Callback< void > linkUp)
virtual void DoDispose()
Destructor implementation.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void DisableAggregation(void)
Disable aggregation function.
void SetVhtSupported(bool enable)
Enable or disable VHT support for the device.
Ptr< WifiPhy > GetWifiPhy(void) const
an EUI-48 address
Definition: mac48-address.h:43
tuple ssid
Definition: third.py:93
void SetCtsTimeout(Time ctsTimeout)
virtual bool SupportsSendFrom(void) const
The IEEE 802.11 SSID Information Element.
Definition: ssid.h:35
Time GetRifs(void) const
void SetViBlockAckInactivityTimeout(uint16_t timeout)
Set VI block ack inactivity timeout.
bool m_htSupported
This Boolean is set true iff this WifiMac is to model 802.11n.
Mac48Address GetBssid(void) const
Ptr< EdcaTxopN > GetBKQueue(void) const
Accessor for the AC_BK channel access function.
void SetViBlockAckThreshold(uint8_t threshold)
Set the Block ACK threshold for AC_VI.
Time GetBasicBlockAckTimeout(void) const
Mac48Address GetAddress(void) const
virtual void DoInitialize()
Initialize() implementation.
void SetBkBlockAckInactivityTimeout(uint16_t timeout)
Set BK block ack inactivity timeout.
uint32_t m_bkMaxAmsduSize
maximum A-MSDU size for AC_BK
bool GetHtSupported() const
Return whether the device supports HT.
Ptr< WifiRemoteStationManager > GetWifiRemoteStationManager(void) const
bool m_shortSlotTimeSupported
flag whether short slot time is supported
bool GetShortSlotTimeSupported(void) const
virtual void TxOk(const WifiMacHeader &hdr)
The packet we sent was successfully received by the receiver (i.e.
uint32_t m_viMaxAmpduSize
maximum A-MPDU size for AC_VI
tuple address
Definition: first.py:37
bool m_erpSupported
This Boolean is set true iff this WifiMac is to model 802.11g.
TypeOfStation
Enumeration for type of station.
Definition: edca-txop-n.h:44
Callback< void, Ptr< Packet >, Mac48Address, Mac48Address > ForwardUpCallback
This type defines the callback of a higher layer that a WifiMac(-derived) object invokes to pass a pa...
bool GetRifsSupported(void) const
void SetCtsToSelfSupported(bool enable)
Enable or disable CTS-to-self feature.
RegularWifiMac & operator=(const RegularWifiMac &mac)
assignment operator
void SetShortSlotTimeSupported(bool enable)
Enable or disable short slot time feature.
void SetDsssSupported(bool enable)
Enable or disable DSSS support for the device.
Ptr< WifiRemoteStationManager > m_stationManager
Remote station manager (rate control, RTS/CTS/fragmentation thresholds etc.)
void SetPromisc(void)
Sets the interface in promiscuous mode.
The IEEE 802.11ax HE Capabilities.
void SetBeBlockAckInactivityTimeout(uint16_t timeout)
Set BE block ack inactivity timeout.
a unique identifier for an interface.
Definition: type-id.h:58
bool m_dsssSupported
This Boolean is set true iff this WifiMac is to model 802.11b.
void SetWifiPhy(const Ptr< WifiPhy > phy)
void SetAckTimeout(Time ackTimeout)
AcIndex
This enumeration defines the Access Categories as an enumeration with values corresponding to the AC ...
Definition: qos-utils.h:38
Ptr< MacTxMiddle > m_txMiddle
TX middle (aggregation etc.)
Implements the IEEE 802.11 MAC header.
void SetBkMaxAmpduSize(uint32_t size)
Set the maximum A-MPDU size for AC_BK.
virtual void TxFailed(const WifiMacHeader &hdr)
The packet we sent was successfully received by the receiver (i.e.
Time GetEifsNoDifs(void) const