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 "qos-txop.h"
26 #include "ssid.h"
27 
28 namespace ns3 {
29 
30 class MacLow;
31 class MacRxMiddle;
32 class MacTxMiddle;
33 class ChannelAccessManager;
34 class ExtendedCapabilities;
35 
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);
121 
128  void SetShortSlotTimeSupported (bool enable);
135  bool GetShortSlotTimeSupported (void) const;
142  void SetRifsSupported (bool enable);
149  bool GetRifsSupported (void) const;
150 
154  Mac48Address GetAddress (void) const;
158  Ssid GetSsid (void) const;
166  void SetSsid (Ssid ssid);
170  void SetBssid (Mac48Address bssid);
174  Mac48Address GetBssid (void) const;
182  void SetPromisc (void);
183 
195  virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to, Mac48Address from);
196 
197  virtual bool SupportsSendFrom (void) const;
198 
207  virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to) = 0;
211  virtual void SetWifiPhy (const Ptr<WifiPhy> phy);
215  Ptr<WifiPhy> GetWifiPhy (void) const;
219  void ResetWifiPhy (void);
223  virtual void SetWifiRemoteStationManager (const Ptr<WifiRemoteStationManager> stationManager);
239  HtCapabilities GetHtCapabilities (void) const;
245  VhtCapabilities GetVhtCapabilities (void) const;
251  HeCapabilities GetHeCapabilities (void) const;
252 
266  void SetForwardUpCallback (ForwardUpCallback upCallback);
270  void SetLinkUpCallback (Callback<void> linkUp);
274  void SetLinkDownCallback (Callback<void> linkDown);
275 
276  /* Next functions are not pure virtual so non Qos WifiMacs are not
277  * forced to implement them.
278  */
279  void SetBasicBlockAckTimeout (Time blockAckTimeout);
280  Time GetBasicBlockAckTimeout (void) const;
281  void SetCompressedBlockAckTimeout (Time blockAckTimeout);
282  Time GetCompressedBlockAckTimeout (void) const;
283 
284 
285 protected:
286  virtual void DoInitialize ();
287  virtual void DoDispose ();
288 
294 
296 
297  ForwardUpCallback m_forwardUp;
300 
302 
306 
309  typedef std::map<AcIndex, Ptr<QosTxop> > EdcaQueues;
310 
313  EdcaQueues m_edca;
314 
320  Ptr<Txop> GetTxop (void) const;
321 
327  Ptr<QosTxop> GetVOQueue (void) const;
333  Ptr<QosTxop> GetVIQueue (void) const;
339  Ptr<QosTxop> GetBEQueue (void) const;
345  Ptr<QosTxop> GetBKQueue (void) const;
346 
360 
368  void ConfigureContentionWindow (uint32_t cwMin, uint32_t cwMax);
369 
378  void SetTypeOfStation (TypeOfStation type);
379 
394  virtual void Receive (Ptr<Packet> packet, const WifiMacHeader *hdr);
401  virtual void TxOk (const WifiMacHeader &hdr);
408  virtual void TxFailed (const WifiMacHeader &hdr);
409 
417  void ForwardUp (Ptr<Packet> packet, Mac48Address from, Mac48Address to);
418 
426  virtual void DeaggregateAmsduAndForward (Ptr<Packet> aggregatedPacket,
427  const WifiMacHeader *hdr);
428 
436  void SendAddBaResponse (const MgtAddBaRequestHeader *reqHdr,
437  Mac48Address originator);
438 
444  virtual void SetQosSupported (bool enable);
450  bool GetQosSupported () const;
451 
457  void SetHtSupported (bool enable);
463  bool GetHtSupported () const;
464 
470  void SetVhtSupported (bool enable);
476  bool GetVhtSupported () const;
477 
483  void SetErpSupported (bool enable);
489  bool GetErpSupported () const;
490 
496  void SetDsssSupported (bool enable);
502  bool GetDsssSupported () const;
503 
509  void SetHeSupported (bool enable);
515  bool GetHeSupported () const;
516 
517 
518 private:
520  RegularWifiMac (const RegularWifiMac &);
528 
535  void SetupEdcaQueue (AcIndex ac);
536 
542  void SetVoMaxAmsduSize (uint16_t size);
548  void SetViMaxAmsduSize (uint16_t size);
554  void SetBeMaxAmsduSize (uint16_t size);
560  void SetBkMaxAmsduSize (uint16_t size);
561 
567  void SetVoMaxAmpduSize (uint16_t size);
573  void SetViMaxAmpduSize (uint16_t size);
579  void SetBeMaxAmpduSize (uint16_t size);
585  void SetBkMaxAmpduSize (uint16_t size);
586 
592  void SetVoBlockAckThreshold (uint8_t threshold);
598  void SetViBlockAckThreshold (uint8_t threshold);
604  void SetBeBlockAckThreshold (uint8_t threshold);
610  void SetBkBlockAckThreshold (uint8_t threshold);
611 
617  void SetVoBlockAckInactivityTimeout (uint16_t timeout);
623  void SetViBlockAckInactivityTimeout (uint16_t timeout);
629  void SetBeBlockAckInactivityTimeout (uint16_t timeout);
635  void SetBkBlockAckInactivityTimeout (uint16_t timeout);
636 
684 
686  void ConfigureAggregation (void);
688  void EnableAggregation (void);
690  void DisableAggregation (void);
691 
692  uint16_t m_voMaxAmsduSize;
693  uint16_t m_viMaxAmsduSize;
694  uint16_t m_beMaxAmsduSize;
695  uint16_t m_bkMaxAmsduSize;
696 
697  uint16_t m_voMaxAmpduSize;
698  uint16_t m_viMaxAmpduSize;
699  uint16_t m_beMaxAmpduSize;
700  uint16_t m_bkMaxAmpduSize;
701 
704 
707 };
708 
709 } //namespace ns3
710 
711 #endif /* REGULAR_WIFI_MAC_H */
virtual void SetQosSupported(bool enable)
Enable or disable QoS support for the device.
void SetHeSupported(bool enable)
Enable or disable HE support for the device.
uint16_t m_voMaxAmsduSize
maximum A-MSDU size for AC_VO
void SetVoBlockAckInactivityTimeout(uint16_t timeout)
Set VO block ack inactivity timeout.
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
Ptr< Txop > m_txop
This holds a pointer to the TXOP instance for this WifiMac - used for transmission of frames to non-Q...
bool GetDsssSupported() const
Return whether the device supports DSSS.
bool GetVhtSupported() const
Return whether the device supports VHT.
ExtendedCapabilities GetExtendedCapabilities(void) const
Return the extended capabilities of the device.
ForwardUpCallback m_forwardUp
Callback to forward packet up the stack.
static TypeId GetTypeId(void)
Get the type ID.
void SetBkMaxAmsduSize(uint16_t size)
Set the maximum A-MSDU size for AC_BK.
uint16_t m_bkMaxAmsduSize
maximum A-MSDU size for AC_BK
EdcaQueues m_edca
This is a map from Access Category index to the corresponding channel access function.
Forward calls to a chain of Callback.
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:997
void SetPifs(Time pifs)
void SetCompressedBlockAckTimeout(Time blockAckTimeout)
The Extended Capabilities Information ElementThis class knows how to serialise and deserialise the Ex...
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 SetVoMaxAmsduSize(uint16_t size)
Set the maximum A-MSDU size for AC_VO.
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.
void SetVoMaxAmpduSize(uint16_t size)
Set the maximum A-MPDU size for AC_VO.
Ptr< ChannelAccessManager > m_channelAccessManager
channel access manager
ns3::Time timeout
void SetRifs(Time rifs)
Ssid GetSsid(void) const
void SetViMaxAmsduSize(uint16_t size)
Set the maximum A-MSDU size for AC_VI.
VhtCapabilities GetVhtCapabilities(void) const
Return the VHT capabilities 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 capabilities of the device.
TracedCallback< const WifiMacHeader & > m_txErrCallback
transmit error callback
bool m_rifsSupported
flag whether RIFS is supported
phy
Definition: third.py:86
void SetVoBlockAckThreshold(uint8_t threshold)
Set the Block ACK threshold for AC_VO.
void SetBssid(Mac48Address bssid)
Time GetSifs(void) const
void ForwardUp(Ptr< Packet > packet, Mac48Address from, Mac48Address to)
Forward the packet up to the device.
WifiPhyStandard
Identifies the PHY specification that a Wifi device is configured to use.
Time GetCtsTimeout(void) const
void SetForwardUpCallback(ForwardUpCallback upCallback)
base class for all MAC-level wifi objects.
Ptr< QosTxop > GetBKQueue(void) const
Accessor for the AC_BK channel access function.
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...
void SetBasicBlockAckTimeout(Time blockAckTimeout)
void SetTypeOfStation(TypeOfStation type)
This method is invoked by a subclass to specify what type of station it is implementing.
void FinishConfigureStandard(WifiPhyStandard standard)
The IEEE 802.11ac VHT Capabilities.
Ssid m_ssid
Service Set ID (SSID)
base class for all MAC-level wifi objects.
Definition: wifi-mac.h:42
Time GetAckTimeout(void) const
ssid
Definition: third.py:93
Time GetSlot(void) const
mac
Definition: third.py:92
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.)
uint16_t m_viMaxAmsduSize
maximum A-MSDU size for AC_VI
uint16_t m_beMaxAmsduSize
maximum A-MSDU size for AC_BE
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.
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 capabilities 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
virtual void SetWifiRemoteStationManager(const Ptr< WifiRemoteStationManager > stationManager)
void SetLinkUpCallback(Callback< void > linkUp)
Ptr< Txop > GetTxop(void) const
Accessor for the DCF object.
virtual void DoDispose()
Destructor implementation.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
address
Definition: first.py:37
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
uint16_t m_bkMaxAmpduSize
maximum A-MPDU size for AC_BK
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.
std::map< AcIndex, Ptr< QosTxop > > EdcaQueues
This type defines a mapping between an Access Category index, and a pointer to the corresponding chan...
bool m_htSupported
This Boolean is set true iff this WifiMac is to model 802.11n.
uint16_t m_voMaxAmpduSize
maximum A-MPDU size for AC_VO
Mac48Address GetBssid(void) const
void SetViBlockAckThreshold(uint8_t threshold)
Set the Block ACK threshold for AC_VI.
uint16_t m_beMaxAmpduSize
maximum A-MPDU size for AC_BE
Time GetBasicBlockAckTimeout(void) const
Mac48Address GetAddress(void) const
uint16_t m_viMaxAmpduSize
maximum A-MPDU size for AC_VI
void SetViMaxAmpduSize(uint16_t size)
Set the maximum A-MPDU size for AC_VI.
virtual void DoInitialize()
Initialize() implementation.
void SetBkBlockAckInactivityTimeout(uint16_t timeout)
Set BK block ack inactivity timeout.
Ptr< QosTxop > GetBEQueue(void) const
Accessor for the AC_BE channel access function.
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.
bool m_erpSupported
This Boolean is set true iff this WifiMac is to model 802.11g.
TypeOfStation
Enumeration for type of station.
Definition: qos-txop.h:45
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 SetBeMaxAmpduSize(uint16_t size)
Set the maximum A-MPDU size for AC_BE.
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.)
Ptr< QosTxop > GetVOQueue(void) const
Accessor for the AC_VO channel access function.
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.
virtual void SetWifiPhy(const Ptr< WifiPhy > phy)
void SetBkMaxAmpduSize(uint16_t size)
Set the maximum A-MPDU size for AC_BK.
void SetAckTimeout(Time ackTimeout)
AcIndex
This enumeration defines the Access Categories as an enumeration with values corresponding to the AC ...
Definition: qos-utils.h:37
Ptr< MacTxMiddle > m_txMiddle
TX middle (aggregation etc.)
Implements the IEEE 802.11 MAC header.
void SetBeMaxAmsduSize(uint16_t size)
Set the maximum A-MSDU size for AC_BE.
virtual void TxFailed(const WifiMacHeader &hdr)
The packet we sent was successfully received by the receiver (i.e.
Ptr< QosTxop > GetVIQueue(void) const
Accessor for the AC_VI channel access function.
Time GetEifsNoDifs(void) const