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 <vector>
26 #include "ns3/attribute-helper.h"
27 
28 namespace ns3 {
29 
30 class WifiTxVector;
31 
37 {
63 };
64 
73 {
84 };
85 
97 class WifiMode
98 {
99 public:
106  bool IsAllowed (uint16_t channelWidth, uint8_t nss) const;
118  uint64_t GetPhyRate (uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const;
127  uint64_t GetPhyRate (WifiTxVector txVector) const;
136  uint64_t GetDataRate (uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const;
142  uint64_t GetDataRate (WifiTxVector txVector) const;
148  uint64_t GetDataRate (uint16_t channelWidth) const;
149 
153  WifiCodeRate GetCodeRate (void) const;
157  uint16_t GetConstellationSize (void) const;
161  uint8_t GetMcsValue (void) const;
166  std::string GetUniqueName (void) const;
171  bool IsMandatory (void) const;
179  uint32_t GetUid (void) const;
194  uint64_t GetNonHtReferenceRate (void) const;
200  bool IsHigherCodeRate (WifiMode mode) const;
206  bool IsHigherDataRate (WifiMode mode) const;
207 
214  WifiMode ();
221  WifiMode (std::string name);
222 
223 
224 private:
226  friend class WifiModeFactory;
228  friend class WifiPhyTag; // access the UID-based constructor
234  WifiMode (uint32_t uid);
235  uint32_t m_uid;
236 };
237 
239 bool operator == (const WifiMode &a, const WifiMode &b);
240 bool operator < (const WifiMode &a, const WifiMode &b);
241 std::ostream & operator << (std::ostream & os, const WifiMode &mode);
242 std::istream & operator >> (std::istream &is, WifiMode &mode);
243 
245 
252 typedef std::vector<WifiMode> WifiModeList;
256 typedef WifiModeList::const_iterator WifiModeListIterator;
257 
265 {
266 public:
283  static WifiMode CreateWifiMode (std::string uniqueName,
284  WifiModulationClass modClass,
285  bool isMandatory,
286  WifiCodeRate codingRate,
287  uint16_t constellationSize);
288 
299  static WifiMode CreateWifiMcs (std::string uniqueName,
300  uint8_t mcsValue,
301  WifiModulationClass modClass);
302 
303 
304 private:
306  friend class WifiMode;
307  friend std::istream & operator >> (std::istream &is, WifiMode &mode);
308 
314  static WifiModeFactory* GetFactory ();
315  WifiModeFactory ();
316 
323  {
324  std::string uniqueUid;
326  uint16_t constellationSize;
328  bool isMandatory;
329  uint8_t mcsValue;
330  };
331 
339  WifiMode Search (std::string name) const;
347  uint32_t AllocateUid (std::string uniqueUid);
355  WifiModeItem* Get (uint32_t uid);
356 
360  typedef std::vector<WifiModeItem> WifiModeItemList;
361  WifiModeItemList m_itemList;
362 };
363 
364 } //namespace ns3
365 
366 #endif /* WIFI_MODE_H */
std::istream & operator>>(std::istream &is, Angles &a)
initialize a struct Angles from input
Definition: angles.cc:48
uint64_t GetDataRate(uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const
Definition: wifi-mode.cc:156
WifiMode()
Create an invalid WifiMode.
Definition: wifi-mode.cc:672
ERP-OFDM PHY (19.5)
Definition: wifi-mode.h:54
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
WifiCodeRate
This enumeration defines the various convolutional coding rates used for the OFDM transmission modes ...
Definition: wifi-mode.h:72
DSSS-OFDM PHY (19.7)
Definition: wifi-mode.h:52
WifiCodeRate codingRate
coding rate
Definition: wifi-mode.h:327
VHT PHY (Clause 22)
Definition: wifi-mode.h:60
HR/DSSS PHY (Clause 18)
Definition: wifi-mode.h:48
ERP-PBCC PHY (19.6)
Definition: wifi-mode.h:50
bool IsAllowed(uint16_t channelWidth, uint8_t nss) const
Definition: wifi-mode.cc:85
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
Definition: wifi-mode.h:97
bool IsMandatory(void) const
Definition: wifi-mode.cc:471
Modulation class unknown or unspecified.
Definition: wifi-mode.h:40
bool operator<(const EventId &a, const EventId &b)
Definition: event-id.h:153
Frequency-hopping spread spectrum (FHSS) PHY (Clause 14)
Definition: wifi-mode.h:44
uint16_t GetConstellationSize(void) const
Definition: wifi-mode.cc:406
bool IsHigherDataRate(WifiMode mode) const
Definition: wifi-mode.cc:615
uint32_t m_uid
UID.
Definition: wifi-mode.h:235
uint64_t GetPhyRate(uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const
Definition: wifi-mode.cc:109
HT PHY (Clause 20)
Definition: wifi-mode.h:58
uint8_t GetMcsValue(void) const
Definition: wifi-mode.cc:478
std::string GetUniqueName(void) const
Definition: wifi-mode.cc:463
WifiModeItemList m_itemList
item list
Definition: wifi-mode.h:361
friend class WifiModeFactory
allow WifiModeFactory class access
Definition: wifi-mode.h:226
WifiModulationClass modClass
modulation class
Definition: wifi-mode.h:325
std::ostream & operator<<(std::ostream &os, const Angles &a)
print a struct Angles to output
Definition: angles.cc:42
Infrared (IR) (Clause 16)
Definition: wifi-mode.h:42
Every class exported by the ns3 library is enclosed in the ns3 namespace.
WifiModeList::const_iterator WifiModeListIterator
An iterator for WifiModeList vector.
Definition: wifi-mode.h:256
std::vector< WifiMode > WifiModeList
In various parts of the code, folk are interested in maintaining a list of transmission modes...
Definition: wifi-mode.h:252
uint16_t constellationSize
constellation size
Definition: wifi-mode.h:326
uint64_t GetNonHtReferenceRate(void) const
Definition: wifi-mode.cc:507
No explicit coding (e.g., DSSS rates)
Definition: wifi-mode.h:75
create WifiMode class instances and keep track of them.
Definition: wifi-mode.h:264
WifiModulationClass
This enumeration defines the modulation classes per (Table 9-4 "Modulation classes"; IEEE 802...
Definition: wifi-mode.h:36
bool IsHigherCodeRate(WifiMode mode) const
Definition: wifi-mode.cc:595
OFDM PHY (Clause 17)
Definition: wifi-mode.h:56
bool operator==(const EventId &a, const EventId &b)
Definition: event-id.h:135
Tag for WifiTxVector and WifiPreamble information to be embedded in outgoing transmissions as a Packe...
Definition: wifi-phy-tag.h:36
uint32_t GetUid(void) const
Definition: wifi-mode.cc:494
WifiModulationClass GetModulationClass() const
Definition: wifi-mode.cc:500
std::vector< WifiModeItem > WifiModeItemList
typedef for a vector of WifiModeItem.
Definition: wifi-mode.h:360
bool isMandatory
flag to indicate whether this mode is mandatory
Definition: wifi-mode.h:328
#define ATTRIBUTE_HELPER_HEADER(type)
Declare the attribute value, accessor and checkers for class type.
WifiCodeRate GetCodeRate(void) const
Definition: wifi-mode.cc:330
HE PHY (Clause 26)
Definition: wifi-mode.h:62
This is the data associated to a unique WifiMode.
Definition: wifi-mode.h:322
DSSS PHY (Clause 15)
Definition: wifi-mode.h:46
std::string uniqueUid
unique UID
Definition: wifi-mode.h:324