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
30namespace ns3 {
31
32#define SU_STA_ID 65535
33
34class WifiTxVector;
35
48{
49public:
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
188private:
190 friend class WifiModeFactory;
196 WifiMode (uint32_t uid);
198};
199
209bool operator == (const WifiMode &a, const WifiMode &b);
210
220bool operator != (const WifiMode &a, const WifiMode &b);
221
231bool operator < (const WifiMode &a, const WifiMode &b);
232
241std::ostream & operator << (std::ostream & os, const WifiMode &mode);
250std::istream & operator >> (std::istream &is, WifiMode &mode);
251
253
260typedef std::vector<WifiMode> WifiModeList;
264typedef WifiModeList::const_iterator WifiModeListIterator;
265
273{
274public:
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
387private:
389 friend class WifiMode;
390 friend std::istream & operator >> (std::istream &is, WifiMode &mode);
391
397 static WifiModeFactory* GetFactory ();
399
406 {
407 std::string uniqueUid;
410 uint8_t mcsValue;
417 };
418
426 WifiMode Search (std::string name) const;
434 uint32_t AllocateUid (std::string uniqueUid);
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
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
friend std::istream & operator>>(std::istream &is, WifiMode &mode)
Serialize WifiMode from istream (human-readable).
Definition: wifi-mode.cc:51
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...
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
ATTRIBUTE_HELPER_HEADER(ValueClassTest)
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:139
WifiModeList::const_iterator WifiModeListIterator
An iterator for WifiModeList vector.
Definition: wifi-mode.h:264
std::istream & operator>>(std::istream &is, Angles &a)
Definition: angles.cc:162
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::vector< WifiMode > WifiModeList
In various parts of the code, folk are interested in maintaining a list of transmission modes.
Definition: wifi-mode.h:260
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: