A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
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 WIFI_MAC_H
21 #define WIFI_MAC_H
22 
23 #include "ns3/packet.h"
24 #include "ns3/mac48-address.h"
25 #include "ns3/node.h"
26 #include "ns3/repository.h"
27 #include "ns3/PUmodel.h"
28 
29 #include "wifi-phy.h"
30 #include "wifi-remote-station-manager.h"
31 #include "ssid.h"
32 #include "qos-utils.h"
33 
34 namespace ns3 {
35 
36 class Dcf;
37 
47 class WifiMac : public Object
48 {
49 public:
50  static TypeId GetTypeId (void);
51 
55  virtual void SetSlot (Time slotTime) = 0;
59  virtual void SetSifs (Time sifs) = 0;
66  virtual void SetEifsNoDifs (Time eifsNoDifs) = 0;
70  virtual void SetPifs (Time pifs) = 0;
74  virtual void SetCtsTimeout (Time ctsTimeout) = 0;
78  virtual void SetAckTimeout (Time ackTimeout) = 0;
84  void SetMaxPropagationDelay (Time delay);
85 
89  virtual Time GetPifs (void) const = 0;
93  virtual Time GetSifs (void) const = 0;
97  virtual Time GetSlot (void) const = 0;
101  virtual Time GetEifsNoDifs (void) const = 0;
105  virtual Time GetCtsTimeout (void) const = 0;
109  virtual Time GetAckTimeout (void) const = 0;
113  Time GetMsduLifetime (void) const;
117  Time GetMaxPropagationDelay (void) const;
118 
122  virtual Mac48Address GetAddress (void) const = 0;
126  virtual Ssid GetSsid (void) const = 0;
130  virtual void SetAddress (Mac48Address address) = 0;
134  virtual void SetSsid (Ssid ssid) = 0;
138  virtual Mac48Address GetBssid (void) const = 0;
146  virtual void SetPromisc (void) = 0;
147 
159  virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to, Mac48Address from) = 0;
168  virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to) = 0;
169  virtual bool SupportsSendFrom (void) const = 0;
173  virtual void SetWifiPhy (Ptr<WifiPhy> phy) = 0;
177  virtual void SetWifiRemoteStationManager (Ptr<WifiRemoteStationManager> stationManager) = 0;
181  virtual void SetForwardUpCallback (Callback<void,Ptr<Packet>, Mac48Address, Mac48Address> upCallback) = 0;
185  virtual void SetLinkUpCallback (Callback<void> linkUp) = 0;
189  virtual void SetLinkDownCallback (Callback<void> linkDown) = 0;
190  /* Next functions are not pure virtual so non Qos WifiMacs are not
191  * forced to implement them.
192  */
193  virtual void SetBasicBlockAckTimeout (Time blockAckTimeout);
194  virtual Time GetBasicBlockAckTimeout (void) const;
195  virtual void SetCompressedBlockAckTimeout (Time blockAckTimeout);
196  virtual Time GetCompressedBlockAckTimeout (void) const;
197  virtual bool IsTxRadio (void) = 0;
198  virtual void SetTxRadio (bool isTx) = 0;
199  virtual bool IsRxRadio (void) = 0;
200  virtual void SetRxRadio (bool isRx, Ptr<Node> node, Ptr<Repository> repo,
201  Ptr<PUModel> puModel, Ptr<WifiPhy> phy) = 0;
202 
207  void NotifyTx (Ptr<const Packet> packet);
208 
213  void NotifyTxDrop (Ptr<const Packet> packet);
214 
219  void NotifyRx (Ptr<const Packet> packet);
220 
225  void NotifyPromiscRx (Ptr<const Packet> packet);
226 
231  void NotifyRxDrop (Ptr<const Packet> packet);
235  void ConfigureStandard (enum WifiPhyStandard standard);
236 
237 protected:
238  void ConfigureDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax, enum AcIndex ac);
239  void ConfigureCCHDcf (Ptr<Dcf> dcf, uint32_t cwmin, uint32_t cwmax, enum AcIndex ac);
240 private:
241  static Time GetDefaultMaxPropagationDelay (void);
242  static Time GetDefaultSlot (void);
243  static Time GetDefaultSifs (void);
244  static Time GetDefaultEifsNoDifs (void);
245  static Time GetDefaultCtsAckDelay (void);
246  static Time GetDefaultCtsAckTimeout (void);
247  static Time GetDefaultBasicBlockAckDelay (void);
248  static Time GetDefaultBasicBlockAckTimeout (void);
249  static Time GetDefaultCompressedBlockAckDelay (void);
250  static Time GetDefaultCompressedBlockAckTimeout (void);
259  virtual void FinishConfigureStandard (enum WifiPhyStandard standard) = 0;
260 
261  Time m_maxPropagationDelay;
262 
263  void Configure80211a (void);
264  void Configure80211b (void);
265  void Configure80211g (void);
266  void Configure80211_10Mhz (void);
267  void Configure80211_5Mhz ();
268  void Configure80211p_CCH (void);
269  void Configure80211p_SCH (void);
270 
278 
286 
295 
304 
312 
313 };
314 
315 } // namespace ns3
316 
317 #endif /* WIFI_MAC_H */
virtual void FinishConfigureStandard(enum WifiPhyStandard standard)=0
virtual Time GetPifs(void) const =0
keep track of time unit.
Definition: nstime.h:149
virtual void SetLinkUpCallback(Callback< void > linkUp)=0
Callback template class.
Definition: callback.h:369
virtual void SetPifs(Time pifs)=0
virtual Mac48Address GetBssid(void) const =0
virtual void SetAckTimeout(Time ackTimeout)=0
forward calls to a chain of CallbackAn ns3::TracedCallback has almost exactly the same API as a norma...
virtual void SetWifiPhy(Ptr< WifiPhy > phy)=0
void ConfigureStandard(enum WifiPhyStandard standard)
Definition: wifi-mac.cc:261
TracedCallback< Ptr< const Packet > > m_macRxDropTrace
Definition: wifi-mac.h:311
virtual void SetLinkDownCallback(Callback< void > linkDown)=0
virtual void SetPromisc(void)=0
Sets the interface in promiscuous mode.
virtual Time GetAckTimeout(void) const =0
TracedCallback< Ptr< const Packet > > m_macTxDropTrace
Definition: wifi-mac.h:285
void NotifyRxDrop(Ptr< const Packet > packet)
Definition: wifi-mac.cc:255
TracedCallback< Ptr< const Packet > > m_macPromiscRxTrace
Definition: wifi-mac.h:294
virtual void SetWifiRemoteStationManager(Ptr< WifiRemoteStationManager > stationManager)=0
virtual void SetSsid(Ssid ssid)=0
virtual Ssid GetSsid(void) const =0
TracedCallback< Ptr< const Packet > > m_macTxTrace
Definition: wifi-mac.h:277
base class for all MAC-level wifi objects.This class encapsulates all the low-level MAC functionality...
Definition: wifi-mac.h:47
void NotifyTxDrop(Ptr< const Packet > packet)
Definition: wifi-mac.cc:237
virtual Time GetSlot(void) const =0
void NotifyPromiscRx(Ptr< const Packet > packet)
Definition: wifi-mac.cc:249
virtual void SetAddress(Mac48Address address)=0
void NotifyTx(Ptr< const Packet > packet)
Definition: wifi-mac.cc:231
virtual void SetEifsNoDifs(Time eifsNoDifs)=0
an EUI-48 address
Definition: mac48-address.h:41
virtual void SetCtsTimeout(Time ctsTimeout)=0
Definition: ssid.h:35
Time GetMaxPropagationDelay(void) const
Definition: wifi-mac.cc:225
void NotifyRx(Ptr< const Packet > packet)
Definition: wifi-mac.cc:243
TracedCallback< Ptr< const Packet > > m_macRxTrace
Definition: wifi-mac.h:303
void SetMaxPropagationDelay(Time delay)
Definition: wifi-mac.cc:214
virtual void SetSifs(Time sifs)=0
virtual Time GetSifs(void) const =0
virtual void Enqueue(Ptr< const Packet > packet, Mac48Address to, Mac48Address from)=0
a base class which provides memory management and object aggregation
Definition: object.h:63
virtual Mac48Address GetAddress(void) const =0
Time GetMsduLifetime(void) const
Definition: wifi-mac.cc:220
virtual Time GetCtsTimeout(void) const =0
a unique identifier for an interface.
Definition: type-id.h:44
AcIndex
Definition: qos-utils.h:35
virtual Time GetEifsNoDifs(void) const =0
virtual void SetSlot(Time slotTime)=0
virtual void SetForwardUpCallback(Callback< void, Ptr< Packet >, Mac48Address, Mac48Address > upCallback)=0