A Discrete-Event Network Simulator
API
wifi-mode.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2005,2006,2007 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  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
19  * Sébastien Deronne <sebastien.deronne@gmail.com>
20  */
21 
22 #ifndef WIFI_MODE_H
23 #define WIFI_MODE_H
24 
25 #include "wifi-phy-common.h"
26 #include "ns3/attribute-helper.h"
27 #include "ns3/callback.h"
28 #include <vector>
29 
30 namespace ns3 {
31 
32 #define SU_STA_ID 65535
33 
34 class WifiTxVector;
35 
47 class WifiMode
48 {
49 public:
56  bool IsAllowed (uint16_t channelWidth, uint8_t nss) const;
62  bool IsAllowed (const WifiTxVector& txVector) const;
74  uint64_t GetPhyRate (uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const;
84  uint64_t GetPhyRate (const WifiTxVector& txVector, uint16_t staId = SU_STA_ID) const;
90  uint64_t GetPhyRate (uint16_t channelWidth) const;
99  uint64_t GetDataRate (uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const;
106  uint64_t GetDataRate (const WifiTxVector& txVector, uint16_t staId = SU_STA_ID) const;
112  uint64_t GetDataRate (uint16_t channelWidth) const;
113 
117  WifiCodeRate GetCodeRate (void) const;
121  uint16_t GetConstellationSize (void) const;
125  uint8_t GetMcsValue (void) const;
130  std::string GetUniqueName (void) const;
135  bool IsMandatory (void) const;
143  uint32_t GetUid (void) const;
158  uint64_t GetNonHtReferenceRate (void) const;
164  bool IsHigherCodeRate (WifiMode mode) const;
170  bool IsHigherDataRate (WifiMode mode) const;
171 
178  WifiMode ();
185  WifiMode (std::string name);
186 
187 
188 private:
190  friend class WifiModeFactory;
196  WifiMode (uint32_t uid);
197  uint32_t m_uid;
198 };
199 
209 bool operator == (const WifiMode &a, const WifiMode &b);
210 
220 bool operator != (const WifiMode &a, const WifiMode &b);
221 
231 bool operator < (const WifiMode &a, const WifiMode &b);
232 
241 std::ostream & operator << (std::ostream & os, const WifiMode &mode);
250 std::istream & operator >> (std::istream &is, WifiMode &mode);
251 
253 
260 typedef std::vector<WifiMode> WifiModeList;
264 typedef WifiModeList::const_iterator WifiModeListIterator;
265 
273 {
274 public:
275  // Typedefs for callbacks used by WifiModeItem
294  typedef Callback<uint64_t, const WifiTxVector& /* txVector */, uint16_t /* staId */> PhyRateCallback;
303  typedef Callback<uint64_t, const WifiTxVector& /* txVector */, uint16_t /* staId */> DataRateCallback;
318  typedef Callback<bool, const WifiTxVector& /* txVector */> AllowedCallback;
319 
343  static WifiMode CreateWifiMode (std::string uniqueName,
344  WifiModulationClass modClass,
345  bool isMandatory,
346  CodeRateCallback codeRateCallback,
347  ConstellationSizeCallback constellationSizeCallback,
348  PhyRateCallback phyRateCallback,
349  DataRateCallback dataRateCallback,
350  AllowedCallback isAllowedCallback);
351 
375  static WifiMode CreateWifiMcs (std::string uniqueName,
376  uint8_t mcsValue,
377  WifiModulationClass modClass,
378  bool isMandatory,
379  CodeRateCallback codeRateCallback,
380  ConstellationSizeCallback constellationSizeCallback,
381  PhyRateCallback phyRateCallback,
382  DataRateCallback dataRateCallback,
383  NonHtReferenceRateCallback nonHtReferenceRateCallback,
384  AllowedCallback isAllowedCallback);
385 
386 
387 private:
389  friend class WifiMode;
390  friend std::istream & operator >> (std::istream &is, WifiMode &mode);
391 
397  static WifiModeFactory* GetFactory ();
398  WifiModeFactory ();
399 
406  {
407  std::string uniqueUid;
409  bool isMandatory;
410  uint8_t mcsValue;
417  };
418 
426  WifiMode Search (std::string name) const;
434  uint32_t AllocateUid (std::string uniqueUid);
442  WifiModeItem* Get (uint32_t uid);
443 
447  typedef std::vector<WifiModeItem> WifiModeItemList;
449 };
450 
451 } //namespace ns3
452 
453 #endif /* WIFI_MODE_H */
create WifiMode class instances and keep track of them.
Definition: wifi-mode.h:273
friend std::istream & operator>>(std::istream &is, WifiMode &mode)
Serialize WifiMode from istream (human-readable).
Definition: wifi-mode.cc:51
Callback< uint64_t, const WifiTxVector &, uint16_t > PhyRateCallback
Typedef for callback used to calculate PHY rate of a WifiMode from a TXVECTOR.
Definition: wifi-mode.h:294
WifiModeItem * Get(uint32_t uid)
Return a WifiModeItem at the given UID index.
Definition: wifi-mode.cc:390
Callback< WifiCodeRate > CodeRateCallback
Typedef for callback used to retrieve code rate of a WifiMode.
Definition: wifi-mode.h:280
static WifiMode CreateWifiMcs(std::string uniqueName, uint8_t mcsValue, WifiModulationClass modClass, bool isMandatory, CodeRateCallback codeRateCallback, ConstellationSizeCallback constellationSizeCallback, PhyRateCallback phyRateCallback, DataRateCallback dataRateCallback, NonHtReferenceRateCallback nonHtReferenceRateCallback, AllowedCallback isAllowedCallback)
Definition: wifi-mode.cc:305
std::vector< WifiModeItem > WifiModeItemList
typedef for a vector of WifiModeItem.
Definition: wifi-mode.h:447
uint32_t AllocateUid(std::string uniqueUid)
Allocate a WifiModeItem from a given uniqueUid.
Definition: wifi-mode.cc:372
static WifiModeFactory * GetFactory()
Return a WifiModeFactory.
Definition: wifi-mode.cc:397
WifiModeItemList m_itemList
item list
Definition: wifi-mode.h:448
Callback< uint64_t, const WifiTxVector &, uint16_t > DataRateCallback
Typedef for callback used to calculate data rate of a WifiMode from a TXVECTOR.
Definition: wifi-mode.h:303
WifiMode Search(std::string name) const
Search and return WifiMode from a given name.
Definition: wifi-mode.cc:337
Callback< uint16_t > ConstellationSizeCallback
Typedef for callback used to retrieve constellation size of a WifiMode.
Definition: wifi-mode.h:285
Callback< bool, const WifiTxVector & > AllowedCallback
Typedef for callback used to check whether a given combination is allowed.
Definition: wifi-mode.h:318
Callback< uint64_t > NonHtReferenceRateCallback
Typedef for callback used to calculate Non-HT Reference Rate of an MCS defined in HT or later amendme...
Definition: wifi-mode.h:311
static WifiMode CreateWifiMode(std::string uniqueName, WifiModulationClass modClass, bool isMandatory, CodeRateCallback codeRateCallback, ConstellationSizeCallback constellationSizeCallback, PhyRateCallback phyRateCallback, DataRateCallback dataRateCallback, AllowedCallback isAllowedCallback)
Definition: wifi-mode.cc:260
represent a single transmission mode
Definition: wifi-mode.h:48
WifiMode()
Create an invalid WifiMode.
Definition: wifi-mode.cc:238
uint16_t GetConstellationSize(void) const
Definition: wifi-mode.cc:133
uint64_t GetNonHtReferenceRate(void) const
Definition: wifi-mode.cc:184
uint8_t GetMcsValue(void) const
Definition: wifi-mode.cc:155
bool IsHigherDataRate(WifiMode mode) const
Definition: wifi-mode.cc:199
WifiModulationClass GetModulationClass() const
Definition: wifi-mode.cc:177
uint64_t GetPhyRate(uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const
Definition: wifi-mode.cc:83
uint32_t GetUid(void) const
Definition: wifi-mode.cc:171
std::string GetUniqueName(void) const
Definition: wifi-mode.cc:140
WifiCodeRate GetCodeRate(void) const
Definition: wifi-mode.cc:126
uint32_t m_uid
UID.
Definition: wifi-mode.h:197
uint64_t GetDataRate(uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const
Definition: wifi-mode.cc:114
bool IsHigherCodeRate(WifiMode mode) const
Definition: wifi-mode.cc:192
bool IsAllowed(uint16_t channelWidth, uint8_t nss) const
Definition: wifi-mode.cc:60
bool IsMandatory(void) const
Definition: wifi-mode.cc:148
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
#define ATTRIBUTE_HELPER_HEADER(type)
Declare the attribute value, accessor and checkers for class type
WifiModulationClass
This enumeration defines the modulation classes per (Table 10-6 "Modulation classes"; IEEE 802....
Every class exported by the ns3 library is enclosed in the ns3 namespace.
bool operator==(const EventId &a, const EventId &b)
Definition: event-id.h:158
WifiModeList::const_iterator WifiModeListIterator
An iterator for WifiModeList vector.
Definition: wifi-mode.h:264
bool operator<(const EventId &a, const EventId &b)
Definition: event-id.h:176
uint16_t WifiCodeRate
These constants define the various convolutional coding rates used for the OFDM transmission modes in...
bool operator!=(Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 > a, Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 > b)
Inequality test.
Definition: callback.h:1612
std::istream & operator>>(std::istream &is, Angles &a)
Definition: angles.cc:162
std::vector< WifiMode > WifiModeList
In various parts of the code, folk are interested in maintaining a list of transmission modes.
Definition: wifi-mode.h:260
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:139
This is the data associated to a unique WifiMode.
Definition: wifi-mode.h:406
WifiModulationClass modClass
modulation class
Definition: wifi-mode.h:408
AllowedCallback IsAllowedCallback
Callback to check whether a given combination of is allowed.
Definition: wifi-mode.h:416
std::string uniqueUid
unique UID
Definition: wifi-mode.h:407
bool isMandatory
flag to indicate whether this mode is mandatory
Definition: wifi-mode.h:409
PhyRateCallback GetPhyRateCallback
Callback to calculate PHY rate in bps of this WifiModeItem.
Definition: wifi-mode.h:413
DataRateCallback GetDataRateCallback
Callback to calculate data rate in bps of this WifiModeItem.
Definition: wifi-mode.h:414
NonHtReferenceRateCallback GetNonHtReferenceRateCallback
Callback to calculate non-HT reference rate of this WifiModeItem.
Definition: wifi-mode.h:415
ConstellationSizeCallback GetConstellationSizeCallback
Callback to retrieve constellation size of this WifiModeItem.
Definition: wifi-mode.h:412
CodeRateCallback GetCodeRateCallback
Callback to retrieve code rate of this WifiModeItem.
Definition: wifi-mode.h:411
#define SU_STA_ID
Definition: wifi-mode.h:32
Declaration of the following enums: