A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
regular-wifi-mac.h
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 #ifndef REGULAR_WIFI_MAC_H
21 #define REGULAR_WIFI_MAC_H
22 
23 #include "ns3/wifi-mac.h"
24 #include "ns3/spectrum-manager.h"
25 
26 #include "dca-txop.h"
27 #include "edca-txop-n.h"
28 #include "wifi-remote-station-manager.h"
29 #include "ssid.h"
30 #include "qos-utils.h"
31 
32 #include <map>
33 
34 namespace ns3 {
35 
36 class Dcf;
37 class MacLow;
38 class MacRxMiddle;
39 class MacTxMiddle;
40 class DcfManager;
41 
51 class RegularWifiMac : public WifiMac
52 {
53 public:
54  static TypeId GetTypeId (void);
55 
56  RegularWifiMac ();
57  virtual ~RegularWifiMac ();
58 
62  void SetSlot (Time slotTime);
66  void SetSifs (Time sifs);
73  void SetEifsNoDifs (Time eifsNoDifs);
77  void SetPifs (Time pifs);
81  void SetCtsTimeout (Time ctsTimeout);
85  void SetAckTimeout (Time ackTimeout);
89  Time GetPifs (void) const;
93  Time GetSifs (void) const;
97  Time GetSlot (void) const;
101  Time GetEifsNoDifs (void) const;
105  Time GetCtsTimeout (void) const;
109  Time GetAckTimeout (void) const;
113  virtual Mac48Address GetAddress (void) const;
117  virtual Ssid GetSsid (void) const;
121  virtual void SetAddress (Mac48Address address);
125  virtual void SetSsid (Ssid ssid);
129  virtual void SetBssid (Mac48Address bssid);
133  virtual Mac48Address GetBssid (void) const;
141  virtual void SetPromisc (void);
142 
154  virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to, Mac48Address from);
155  virtual bool SupportsSendFrom (void) const;
156 
165  virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to) = 0;
169  virtual void SetWifiPhy (Ptr<WifiPhy> phy);
173  virtual Ptr<WifiPhy> GetWifiPhy () const;
177  virtual void SetWifiRemoteStationManager (Ptr<WifiRemoteStationManager> stationManager);
182 
197  virtual void SetForwardUpCallback (ForwardUpCallback upCallback);
201  virtual void SetLinkUpCallback (Callback<void> linkUp);
205  virtual void SetLinkDownCallback (Callback<void> linkDown);
206  /* Next functions are not pure virtual so non Qos WifiMacs are not
207  * forced to implement them.
208  */
209  virtual void SetBasicBlockAckTimeout (Time blockAckTimeout);
210  virtual Time GetBasicBlockAckTimeout (void) const;
211  virtual void SetCompressedBlockAckTimeout (Time blockAckTimeout);
212  virtual Time GetCompressedBlockAckTimeout (void) const;
216  void RestartAccess(void);
217 
218 protected:
219  virtual void DoInitialize ();
220  virtual void DoDispose ();
221 
222  MacRxMiddle *m_rxMiddle;
223  MacTxMiddle *m_txMiddle;
224  Ptr<MacLow> m_low;
225  DcfManager *m_dcfManager;
226  Ptr<WifiPhy> m_phy;
227 
228  Ptr<WifiRemoteStationManager> m_stationManager;
229 
230  ForwardUpCallback m_forwardUp;
231  Callback<void> m_linkUp;
232  Callback<void> m_linkDown;
233 
234  Ssid m_ssid;
235 
239 
242  typedef std::map<AcIndex, Ptr<EdcaTxopN> > EdcaQueues;
246 
259  virtual void FinishConfigureStandard (enum WifiPhyStandard standard);
260 
269  void SetTypeOfStation (TypeOfStation type);
270 
285  virtual void Receive (Ptr<Packet> packet, const WifiMacHeader *hdr);
286  virtual void TxOk (const WifiMacHeader &hdr);
287  virtual void TxFailed (const WifiMacHeader &hdr);
288 
289  void ForwardUp (Ptr<Packet> packet, Mac48Address from, Mac48Address to);
290 
298  virtual void DeaggregateAmsduAndForward (Ptr<Packet> aggregatedPacket,
299  const WifiMacHeader *hdr);
300 
308  virtual void SendAddBaResponse (const MgtAddBaRequestHeader *reqHdr,
309  Mac48Address originator);
310 
326  void SetQosSupported (bool enable);
328  bool GetQosSupported () const;
329 
330  bool IsTxRadio (void);
331  void SetTxRadio (bool isTx);
332  bool IsRxRadio (void);
333  void SetRxRadio (bool isRx, Ptr<Node> node, Ptr<Repository> repo,
334  Ptr<PUModel> puModel, Ptr<WifiPhy> phy);
335 
336 private:
337  RegularWifiMac (const RegularWifiMac &);
338  RegularWifiMac & operator= (const RegularWifiMac &);
339 
346  void SetupEdcaQueue (enum AcIndex ac);
347 
349  Ptr<DcaTxop> GetDcaTxop (void) const;
350 
352  Ptr<EdcaTxopN> GetVOQueue (void) const;
354  Ptr<EdcaTxopN> GetVIQueue (void) const;
356  Ptr<EdcaTxopN> GetBEQueue (void) const;
358  Ptr<EdcaTxopN> GetBKQueue (void) const;
359 
360  SpectrumManager *m_spectrumManager;
361  Ptr<Node> m_node;
362  Time m_snsInterval;
363  Time m_txInterval;
364  double m_probMisdetect;
365 
368 };
369 
370 } // namespace ns3
371 
372 #endif /* REGULAR_WIFI_MAC_H */
void SetQosSupported(bool enable)
APIs for Cognitive Radio extension.
keep track of time unit.
Definition: nstime.h:149
void SetSifs(Time sifs)
Callback template class.
Definition: callback.h:369
virtual void SetWifiRemoteStationManager(Ptr< WifiRemoteStationManager > stationManager)
forward calls to a chain of CallbackAn ns3::TracedCallback has almost exactly the same API as a norma...
void SetPifs(Time pifs)
virtual void SetSsid(Ssid ssid)
void SetSlot(Time slotTime)
bool GetQosSupported() const
virtual void DeaggregateAmsduAndForward(Ptr< Packet > aggregatedPacket, const WifiMacHeader *hdr)
virtual void SetLinkDownCallback(Callback< void > linkDown)
virtual Ssid GetSsid(void) const
virtual void Enqueue(Ptr< const Packet > packet, Mac48Address to, Mac48Address from)
virtual void Receive(Ptr< Packet > packet, const WifiMacHeader *hdr)
virtual Ptr< WifiRemoteStationManager > GetWifiRemoteStationManager() const
virtual void SetBssid(Mac48Address bssid)
Ptr< EdcaTxopN > GetVOQueue(void) const
Time GetSifs(void) const
std::map< AcIndex, Ptr< EdcaTxopN > > EdcaQueues
Time GetCtsTimeout(void) const
virtual void SetForwardUpCallback(ForwardUpCallback upCallback)
base class for all MAC-level wifi objects.This class encapsulates all the low-level MAC functionality...
void SetEifsNoDifs(Time eifsNoDifs)
virtual void SetWifiPhy(Ptr< WifiPhy > phy)
void SetTypeOfStation(TypeOfStation type)
Ptr< DcaTxop > m_dca
Ptr< EdcaTxopN > GetBEQueue(void) const
Ptr< DcaTxop > GetDcaTxop(void) const
base class for all MAC-level wifi objects.This class encapsulates all the low-level MAC functionality...
Definition: wifi-mac.h:47
Time GetAckTimeout(void) const
Time GetSlot(void) const
Manage a set of ns3::DcfStateHandle a set of independent ns3::DcfState, each of which represents a si...
Definition: dcf-manager.h:175
virtual void SetAddress(Mac48Address address)
Time GetPifs(void) const
virtual void SendAddBaResponse(const MgtAddBaRequestHeader *reqHdr, Mac48Address originator)
Ptr< EdcaTxopN > GetVIQueue(void) const
virtual void SetLinkUpCallback(Callback< void > linkUp)
virtual void DoDispose()
an EUI-48 address
Definition: mac48-address.h:41
void SetCtsTimeout(Time ctsTimeout)
Definition: ssid.h:35
virtual Ptr< WifiPhy > GetWifiPhy() const
virtual Mac48Address GetBssid(void) const
Ptr< EdcaTxopN > GetBKQueue(void) const
virtual Mac48Address GetAddress(void) const
virtual void DoInitialize()
Callback< void, Ptr< Packet >, Mac48Address, Mac48Address > ForwardUpCallback
virtual void SetPromisc(void)
Sets the interface in promiscuous mode.
a unique identifier for an interface.
Definition: type-id.h:44
void SetAckTimeout(Time ackTimeout)
AcIndex
Definition: qos-utils.h:35
virtual void FinishConfigureStandard(enum WifiPhyStandard standard)
Time GetEifsNoDifs(void) const
void SetupEdcaQueue(enum AcIndex ac)