A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
wifi-phy.h
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2005,2006 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 WIFI_PHY_H
22 #define WIFI_PHY_H
23 
24 #include <stdint.h>
25 #include "ns3/callback.h"
26 #include "ns3/packet.h"
27 #include "ns3/object.h"
28 #include "ns3/nstime.h"
29 #include "ns3/ptr.h"
30 #include "wifi-mode.h"
31 #include "wifi-preamble.h"
32 #include "wifi-phy-standard.h"
33 #include "ns3/traced-callback.h"
34 
35 
36 namespace ns3 {
37 
38 class WifiChannel;
39 class NetDevice;
40 
45 {
46 public:
47  virtual ~WifiPhyListener ();
48 
61  virtual void NotifyRxStart (Time duration) = 0;
67  virtual void NotifyRxEndOk (void) = 0;
73  virtual void NotifyRxEndError (void) = 0;
83  virtual void NotifyTxStart (Time duration) = 0;
84 
100  virtual void NotifyMaybeCcaBusyStart (Time duration) = 0;
108  virtual void NotifySwitchingStart (Time duration, uint16_t toChannel) = 0;
112  virtual void NotifySensingStart (Time duration) = 0;
113 };
114 
115 
121 class WifiPhy : public Object
122 {
123 public:
127  enum State
128  {
140  TX,
144  RX,
153  };
154 
167 
170 
171  static TypeId GetTypeId (void);
172 
173  WifiPhy ();
174  virtual ~WifiPhy ();
175 
176  virtual double GetTxPowerStart (void) const = 0;
177  virtual double GetTxPowerEnd (void) const = 0;
181  virtual uint32_t GetNTxPower (void) const = 0;
182 
187  virtual void SetReceiveOkCallback (RxOkCallback callback) = 0;
192  virtual void SetReceiveErrorCallback (RxErrorCallback callback) = 0;
197  virtual void SetSenseEndedCallback(SnsEndedCallback callback) = 0;
202  virtual void SetHandoffEndedCallback(HandoffEndedCallback callback) = 0;
203 
211  virtual void SendPacket (Ptr<const Packet> packet, WifiMode mode, enum WifiPreamble preamble, uint8_t txPowerLevel) = 0;
212 
219  virtual void RegisterListener (WifiPhyListener *listener) = 0;
220 
224  virtual bool IsStateIdle (void) = 0;
228  virtual bool IsStateCcaBusy (void) = 0;
232  virtual bool IsStateBusy (void) = 0;
236  virtual bool IsStateRx (void) = 0;
240  virtual bool IsStateTx (void) = 0;
244  virtual bool IsStateSwitching (void) = 0;
248  virtual bool IsStateSensing (void) = 0;
252  virtual Time GetStateDuration (void) = 0;
259  virtual Time GetDelayUntilIdle (void) = 0;
260 
261  virtual Time GetLastRxStartTime (void) const = 0;
262 
270  static Time CalculateTxDuration (uint32_t size, WifiMode payloadMode, enum WifiPreamble preamble);
271 
278  static WifiMode GetPlcpHeaderMode (WifiMode payloadMode, WifiPreamble preamble);
279 
286  static uint32_t GetPlcpHeaderDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble);
287 
294  static uint32_t GetPlcpPreambleDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble);
295 
302  static uint32_t GetPayloadDurationMicroSeconds (uint32_t size, WifiMode payloadMode);
303 
321  virtual uint32_t GetNModes (void) const = 0;
340  virtual WifiMode GetMode (uint32_t mode) const = 0;
347  virtual double CalculateSnr (WifiMode txMode, double ber) const = 0;
348 
357  virtual void SetChannelNumber (uint16_t id) = 0;
359  virtual uint16_t GetChannelNumber () const = 0;
360 
367  virtual void StartSensing (Time duration) = 0;
368 
369  virtual void ConfigureStandard (enum WifiPhyStandard standard) = 0;
370 
371  virtual Ptr<WifiChannel> GetChannel (void) const = 0;
372 
373  static WifiMode GetDsssRate1Mbps ();
374  static WifiMode GetDsssRate2Mbps ();
375  static WifiMode GetDsssRate5_5Mbps ();
376  static WifiMode GetDsssRate11Mbps ();
377  static WifiMode GetErpOfdmRate6Mbps ();
378  static WifiMode GetErpOfdmRate9Mbps ();
379  static WifiMode GetErpOfdmRate12Mbps ();
380  static WifiMode GetErpOfdmRate18Mbps ();
381  static WifiMode GetErpOfdmRate24Mbps ();
382  static WifiMode GetErpOfdmRate36Mbps ();
383  static WifiMode GetErpOfdmRate48Mbps ();
384  static WifiMode GetErpOfdmRate54Mbps ();
385  static WifiMode GetOfdmRate6Mbps ();
386  static WifiMode GetOfdmRate9Mbps ();
387  static WifiMode GetOfdmRate12Mbps ();
388  static WifiMode GetOfdmRate18Mbps ();
389  static WifiMode GetOfdmRate24Mbps ();
390  static WifiMode GetOfdmRate36Mbps ();
391  static WifiMode GetOfdmRate48Mbps ();
392  static WifiMode GetOfdmRate54Mbps ();
393  static WifiMode GetOfdmRate3MbpsBW10MHz ();
394  static WifiMode GetOfdmRate4_5MbpsBW10MHz ();
395  static WifiMode GetOfdmRate6MbpsBW10MHz ();
396  static WifiMode GetOfdmRate9MbpsBW10MHz ();
397  static WifiMode GetOfdmRate12MbpsBW10MHz ();
398  static WifiMode GetOfdmRate18MbpsBW10MHz ();
399  static WifiMode GetOfdmRate24MbpsBW10MHz ();
400  static WifiMode GetOfdmRate27MbpsBW10MHz ();
401  static WifiMode GetOfdmRate1_5MbpsBW5MHz ();
402  static WifiMode GetOfdmRate2_25MbpsBW5MHz ();
403  static WifiMode GetOfdmRate3MbpsBW5MHz ();
404  static WifiMode GetOfdmRate4_5MbpsBW5MHz ();
405  static WifiMode GetOfdmRate6MbpsBW5MHz ();
406  static WifiMode GetOfdmRate9MbpsBW5MHz ();
407  static WifiMode GetOfdmRate12MbpsBW5MHz ();
408  static WifiMode GetOfdmRate13_5MbpsBW5MHz ();
409 
410 
415  void NotifyTxBegin (Ptr<const Packet> packet);
416 
421  void NotifyTxEnd (Ptr<const Packet> packet);
422 
427  void NotifyTxDrop (Ptr<const Packet> packet);
428 
433  void NotifyRxBegin (Ptr<const Packet> packet);
434 
439  void NotifyRxEnd (Ptr<const Packet> packet);
440 
445  void NotifyRxDrop (Ptr<const Packet> packet);
446 
467  void NotifyMonitorSniffRx (Ptr<const Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble,
468  double signalDbm, double noiseDbm);
469 
483  void NotifyMonitorSniffTx (Ptr<const Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble);
484 
493  virtual int64_t AssignStreams (int64_t stream) = 0;
494 
495 
496 private:
504 
512 
520 
528 
536 
543 
554  TracedCallback<Ptr<const Packet>, uint16_t, uint16_t, uint32_t, bool, double, double> m_phyMonitorSniffRxTrace;
555 
566  TracedCallback<Ptr<const Packet>, uint16_t, uint16_t, uint32_t, bool> m_phyMonitorSniffTxTrace;
567 
568 };
569 
574 std::ostream& operator<< (std::ostream& os, enum WifiPhy::State state);
575 
576 } // namespace ns3
577 
578 #endif /* WIFI_PHY_H */
TracedCallback< Ptr< const Packet > > m_phyRxBeginTrace
Definition: wifi-phy.h:527
static uint32_t GetPlcpHeaderDurationMicroSeconds(WifiMode payloadMode, WifiPreamble preamble)
Definition: wifi-phy.cc:141
keep track of time unit.
Definition: nstime.h:149
virtual void SendPacket(Ptr< const Packet > packet, WifiMode mode, enum WifiPreamble preamble, uint8_t txPowerLevel)=0
Callback template class.
Definition: callback.h:369
virtual bool IsStateSensing(void)=0
static WifiMode GetDsssRate1Mbps()
Definition: wifi-phy.cc:357
virtual uint32_t GetNModes(void) const =0
802.11 PHY layer model
Definition: wifi-phy.h:121
forward calls to a chain of CallbackAn ns3::TracedCallback has almost exactly the same API as a norma...
TracedCallback< Ptr< const Packet > > m_phyRxEndTrace
Definition: wifi-phy.h:535
Callback< void, Ptr< Packet >, double, WifiMode, enum WifiPreamble > RxOkCallback
Definition: wifi-phy.h:161
virtual double CalculateSnr(WifiMode txMode, double ber) const =0
void NotifyTxDrop(Ptr< const Packet > packet)
Definition: wifi-phy.cc:316
void NotifyTxBegin(Ptr< const Packet > packet)
Definition: wifi-phy.cc:304
virtual void NotifyTxStart(Time duration)=0
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
Definition: wifi-mode.h:88
virtual bool IsStateCcaBusy(void)=0
virtual void RegisterListener(WifiPhyListener *listener)=0
virtual void StartSensing(Time duration)=0
Start sensing on current channel.
virtual void SetHandoffEndedCallback(HandoffEndedCallback callback)=0
virtual bool IsStateIdle(void)=0
virtual void NotifySwitchingStart(Time duration, uint16_t toChannel)=0
void NotifyRxDrop(Ptr< const Packet > packet)
Definition: wifi-phy.cc:334
WifiPreamble
Definition: wifi-preamble.h:29
virtual uint16_t GetChannelNumber() const =0
Return current channel number, see SetChannelNumber()
TracedCallback< Ptr< const Packet >, uint16_t, uint16_t, uint32_t, bool > m_phyMonitorSniffTxTrace
Definition: wifi-phy.h:566
Callback< void, Ptr< const Packet >, double > RxErrorCallback
Definition: wifi-phy.h:166
virtual void NotifyRxEndOk(void)=0
virtual void SetReceiveErrorCallback(RxErrorCallback callback)=0
receive notifications about phy events.
Definition: wifi-phy.h:44
TracedCallback< Ptr< const Packet > > m_phyTxDropTrace
Definition: wifi-phy.h:519
static WifiMode GetPlcpHeaderMode(WifiMode payloadMode, WifiPreamble preamble)
Definition: wifi-phy.cc:98
virtual Time GetDelayUntilIdle(void)=0
virtual void SetSenseEndedCallback(SnsEndedCallback callback)=0
TracedCallback< Ptr< const Packet > > m_phyRxDropTrace
Definition: wifi-phy.h:542
void NotifyRxBegin(Ptr< const Packet > packet)
Definition: wifi-phy.cc:322
TracedCallback< Ptr< const Packet >, uint16_t, uint16_t, uint32_t, bool, double, double > m_phyMonitorSniffRxTrace
Definition: wifi-phy.h:554
static Time CalculateTxDuration(uint32_t size, WifiMode payloadMode, enum WifiPreamble preamble)
Definition: wifi-phy.cc:294
TracedCallback< Ptr< const Packet > > m_phyTxBeginTrace
Definition: wifi-phy.h:503
virtual bool IsStateSwitching(void)=0
static uint32_t GetPayloadDurationMicroSeconds(uint32_t size, WifiMode payloadMode)
Definition: wifi-phy.cc:235
virtual bool IsStateBusy(void)=0
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:43
void NotifyMonitorSniffRx(Ptr< const Packet > packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm)
Definition: wifi-phy.cc:340
virtual bool IsStateRx(void)=0
virtual Time GetStateDuration(void)=0
virtual WifiMode GetMode(uint32_t mode) const =0
static WifiMode GetDsssRate5_5Mbps()
Definition: wifi-phy.cc:387
void NotifyTxEnd(Ptr< const Packet > packet)
Definition: wifi-phy.cc:310
virtual void SetChannelNumber(uint16_t id)=0
Set channel number.
virtual bool IsStateTx(void)=0
virtual void NotifyRxStart(Time duration)=0
virtual void NotifyRxEndError(void)=0
static WifiMode GetErpOfdmRate6Mbps()
Definition: wifi-phy.cc:417
void NotifyRxEnd(Ptr< const Packet > packet)
Definition: wifi-phy.cc:328
virtual uint32_t GetNTxPower(void) const =0
virtual void SetReceiveOkCallback(RxOkCallback callback)=0
virtual int64_t AssignStreams(int64_t stream)=0
a base class which provides memory management and object aggregation
Definition: object.h:63
a unique identifier for an interface.
Definition: type-id.h:44
void NotifyMonitorSniffTx(Ptr< const Packet > packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble)
Definition: wifi-phy.cc:346
static uint32_t GetPlcpPreambleDurationMicroSeconds(WifiMode payloadMode, WifiPreamble preamble)
Definition: wifi-phy.cc:189
virtual void NotifySensingStart(Time duration)=0
static WifiMode GetOfdmRate6Mbps()
Definition: wifi-phy.cc:525
TracedCallback< Ptr< const Packet > > m_phyTxEndTrace
Definition: wifi-phy.h:511
virtual void NotifyMaybeCcaBusyStart(Time duration)=0