A Discrete-Event Network Simulator
API
wifi-mode.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2005,2006,2007 INRIA
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 *
17 * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
18 * Sébastien Deronne <sebastien.deronne@gmail.com>
19 */
20
21#ifndef WIFI_MODE_H
22#define WIFI_MODE_H
23
24#include "wifi-phy-common.h"
25
26#include "ns3/attribute-helper.h"
27#include "ns3/callback.h"
28
29#include <vector>
30
31namespace ns3
32{
33
34#define SU_STA_ID 65535
35
36class WifiTxVector;
37
50{
51 public:
58 bool IsAllowed(uint16_t channelWidth, uint8_t nss) const;
64 bool IsAllowed(const WifiTxVector& txVector) const;
76 uint64_t GetPhyRate(uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const;
86 uint64_t GetPhyRate(const WifiTxVector& txVector, uint16_t staId = SU_STA_ID) const;
92 uint64_t GetPhyRate(uint16_t channelWidth) const;
101 uint64_t GetDataRate(uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const;
108 uint64_t GetDataRate(const WifiTxVector& txVector, uint16_t staId = SU_STA_ID) const;
114 uint64_t GetDataRate(uint16_t channelWidth) const;
115
123 uint16_t GetConstellationSize() const;
127 uint8_t GetMcsValue() const;
132 std::string GetUniqueName() const;
137 bool IsMandatory() const;
145 uint32_t GetUid() const;
160 uint64_t GetNonHtReferenceRate() const;
166 bool IsHigherCodeRate(WifiMode mode) const;
172 bool IsHigherDataRate(WifiMode mode) const;
173
180 WifiMode();
187 WifiMode(std::string name);
188
189 private:
191 friend class WifiModeFactory;
197 WifiMode(uint32_t uid);
199};
200
210bool operator==(const WifiMode& a, const WifiMode& b);
211
221bool operator!=(const WifiMode& a, const WifiMode& b);
222
232bool operator<(const WifiMode& a, const WifiMode& b);
233
242std::ostream& operator<<(std::ostream& os, const WifiMode& mode);
251std::istream& operator>>(std::istream& is, WifiMode& mode);
252
254
261typedef std::vector<WifiMode> WifiModeList;
265typedef WifiModeList::const_iterator WifiModeListIterator;
266
274{
275 public:
276 // Typedefs for callbacks used by WifiModeItem
295 typedef Callback<uint64_t, const WifiTxVector& /* txVector */, uint16_t /* staId */>
305 typedef Callback<uint64_t, const WifiTxVector& /* txVector */, uint16_t /* staId */>
321 typedef Callback<bool, const WifiTxVector& /* txVector */> AllowedCallback;
322
346 static WifiMode CreateWifiMode(std::string uniqueName,
347 WifiModulationClass modClass,
348 bool isMandatory,
349 CodeRateCallback codeRateCallback,
350 ConstellationSizeCallback constellationSizeCallback,
351 PhyRateCallback phyRateCallback,
352 DataRateCallback dataRateCallback,
353 AllowedCallback isAllowedCallback);
354
378 static WifiMode CreateWifiMcs(std::string uniqueName,
379 uint8_t mcsValue,
380 WifiModulationClass modClass,
381 bool isMandatory,
382 CodeRateCallback codeRateCallback,
383 ConstellationSizeCallback constellationSizeCallback,
384 PhyRateCallback phyRateCallback,
385 DataRateCallback dataRateCallback,
386 NonHtReferenceRateCallback nonHtReferenceRateCallback,
387 AllowedCallback isAllowedCallback);
388
389 private:
391 friend class WifiMode;
392 friend std::istream& operator>>(std::istream& is, WifiMode& mode);
393
399 static WifiModeFactory* GetFactory();
401
408 {
409 std::string uniqueUid;
412 uint8_t mcsValue;
427 };
428
436 WifiMode Search(std::string name) const;
444 uint32_t AllocateUid(std::string uniqueUid);
453
457 typedef std::vector<WifiModeItem> WifiModeItemList;
459};
460
461} // namespace ns3
462
463#endif /* WIFI_MODE_H */
create WifiMode class instances and keep track of them.
Definition: wifi-mode.h:274
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:296
WifiModeItem * Get(uint32_t uid)
Return a WifiModeItem at the given UID index.
Definition: wifi-mode.cc:401
Callback< WifiCodeRate > CodeRateCallback
Typedef for callback used to retrieve code rate of a WifiMode.
Definition: wifi-mode.h:281
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:318
std::vector< WifiModeItem > WifiModeItemList
typedef for a vector of WifiModeItem.
Definition: wifi-mode.h:457
uint32_t AllocateUid(std::string uniqueUid)
Allocate a WifiModeItem from a given uniqueUid.
Definition: wifi-mode.cc:384
static WifiModeFactory * GetFactory()
Return a WifiModeFactory.
Definition: wifi-mode.cc:408
WifiModeItemList m_itemList
item list
Definition: wifi-mode.h:458
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:306
WifiMode Search(std::string name) const
Search and return WifiMode from a given name.
Definition: wifi-mode.cc:350
Callback< uint16_t > ConstellationSizeCallback
Typedef for callback used to retrieve constellation size of a WifiMode.
Definition: wifi-mode.h:286
friend std::istream & operator>>(std::istream &is, WifiMode &mode)
Serialize WifiMode from istream (human-readable).
Definition: wifi-mode.cc:59
Callback< bool, const WifiTxVector & > AllowedCallback
Typedef for callback used to check whether a given combination is allowed.
Definition: wifi-mode.h:321
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:314
static WifiMode CreateWifiMode(std::string uniqueName, WifiModulationClass modClass, bool isMandatory, CodeRateCallback codeRateCallback, ConstellationSizeCallback constellationSizeCallback, PhyRateCallback phyRateCallback, DataRateCallback dataRateCallback, AllowedCallback isAllowedCallback)
Definition: wifi-mode.cc:270
represent a single transmission mode
Definition: wifi-mode.h:50
WifiMode()
Create an invalid WifiMode.
Definition: wifi-mode.cc:248
uint32_t GetUid() const
Definition: wifi-mode.cc:179
std::string GetUniqueName() const
Definition: wifi-mode.cc:148
bool IsHigherDataRate(WifiMode mode) const
Definition: wifi-mode.cc:208
uint16_t GetConstellationSize() const
Definition: wifi-mode.cc:141
WifiModulationClass GetModulationClass() const
Definition: wifi-mode.cc:185
uint64_t GetPhyRate(uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const
Definition: wifi-mode.cc:91
bool IsMandatory() const
Definition: wifi-mode.cc:156
uint64_t GetNonHtReferenceRate() const
Definition: wifi-mode.cc:192
WifiCodeRate GetCodeRate() const
Definition: wifi-mode.cc:134
uint32_t m_uid
UID.
Definition: wifi-mode.h:198
uint64_t GetDataRate(uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const
Definition: wifi-mode.cc:122
bool IsHigherCodeRate(WifiMode mode) const
Definition: wifi-mode.cc:201
bool IsAllowed(uint16_t channelWidth, uint8_t nss) const
Definition: wifi-mode.cc:68
uint8_t GetMcsValue() const
Definition: wifi-mode.cc:163
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!=(Callback< R, Args... > a, Callback< R, Args... > b)
Inequality test.
Definition: callback.h:665
bool operator==(const EventId &a, const EventId &b)
Definition: event-id.h:157
ATTRIBUTE_HELPER_HEADER(ValueClassTest)
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:129
WifiModeList::const_iterator WifiModeListIterator
An iterator for WifiModeList vector.
Definition: wifi-mode.h:265
std::istream & operator>>(std::istream &is, Angles &a)
Definition: angles.cc:153
bool operator<(const EventId &a, const EventId &b)
Definition: event-id.h:170
uint16_t WifiCodeRate
These constants define the various convolutional coding rates used for the OFDM transmission modes in...
std::vector< WifiMode > WifiModeList
In various parts of the code, folk are interested in maintaining a list of transmission modes.
Definition: wifi-mode.h:261
This is the data associated to a unique WifiMode.
Definition: wifi-mode.h:408
WifiModulationClass modClass
modulation class
Definition: wifi-mode.h:410
AllowedCallback IsAllowedCallback
Callback to check whether a given combination of is allowed.
Definition: wifi-mode.h:426
std::string uniqueUid
unique UID
Definition: wifi-mode.h:409
bool isMandatory
flag to indicate whether this mode is mandatory
Definition: wifi-mode.h:411
PhyRateCallback GetPhyRateCallback
Callback to calculate PHY rate in bps of this WifiModeItem.
Definition: wifi-mode.h:419
DataRateCallback GetDataRateCallback
Callback to calculate data rate in bps of this WifiModeItem.
Definition: wifi-mode.h:421
NonHtReferenceRateCallback GetNonHtReferenceRateCallback
Callback to calculate non-HT reference rate of this WifiModeItem.
Definition: wifi-mode.h:423
ConstellationSizeCallback GetConstellationSizeCallback
Callback to retrieve constellation size of this WifiModeItem.
Definition: wifi-mode.h:416
CodeRateCallback GetCodeRateCallback
Callback to retrieve code rate of this WifiModeItem.
Definition: wifi-mode.h:414
#define SU_STA_ID
Definition: wifi-mode.h:34
Declaration of the following enums: