A Discrete-Event Network Simulator
API
vht-ppdu.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019 Orange Labs
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  * Author: Rediet <getachew.redieteab@orange.com>
18  * Muhammad Iqbal Rochman <muhiqbalcr@uchicago.edu>
19  * Sébastien Deronne <sebastien.deronne@gmail.com> (VhtSigHeader)
20  */
21 
22 #ifndef VHT_PPDU_H
23 #define VHT_PPDU_H
24 
25 #include "ns3/ofdm-ppdu.h"
26 
33 namespace ns3
34 {
35 
36 class WifiPsdu;
37 
44 class VhtPpdu : public OfdmPpdu
45 {
46  public:
51  class VhtSigHeader : public Header
52  {
53  public:
54  VhtSigHeader();
55 
60  static TypeId GetTypeId();
61 
62  TypeId GetInstanceTypeId() const override;
63  void Print(std::ostream& os) const override;
64  uint32_t GetSerializedSize() const override;
65  void Serialize(Buffer::Iterator start) const override;
66  uint32_t Deserialize(Buffer::Iterator start) override;
67 
73  void SetMuFlag(bool mu);
74 
80  void SetChannelWidth(uint16_t channelWidth);
86  uint16_t GetChannelWidth() const;
92  void SetNStreams(uint8_t nStreams);
98  uint8_t GetNStreams() const;
99 
105  void SetShortGuardInterval(bool sgi);
111  bool GetShortGuardInterval() const;
117  void SetShortGuardIntervalDisambiguation(bool disambiguation);
129  void SetSuMcs(uint8_t mcs);
135  uint8_t GetSuMcs() const;
136 
137  private:
138  // VHT-SIG-A1 fields
139  uint8_t m_bw;
140  uint8_t m_nsts;
141 
142  // VHT-SIG-A2 fields
143  uint8_t m_sgi;
145  uint8_t m_suMcs;
146 
148  bool m_mu;
149  }; // class VhtSigHeader
150 
162  const WifiTxVector& txVector,
163  uint16_t txCenterFreq,
164  Time ppduDuration,
165  WifiPhyBand band,
166  uint64_t uid);
167 
168  Time GetTxDuration() const override;
169  Ptr<WifiPpdu> Copy() const override;
170  WifiPpduType GetType() const override;
171 
172  private:
173  WifiTxVector DoGetTxVector() const override;
174 
181  virtual void SetPhyHeaders(const WifiTxVector& txVector, Time ppduDuration);
182 
189  virtual void SetLSigHeader(LSigHeader& lSig, Time ppduDuration) const;
190 
198  void SetVhtSigHeader(VhtSigHeader& vhtSig,
199  const WifiTxVector& txVector,
200  Time ppduDuration) const;
201 
210  const LSigHeader& lSig,
211  const VhtSigHeader& vhtSig) const;
212 
213 #ifndef NS3_BUILD_PROFILE_DEBUG
214  VhtSigHeader m_vhtSig;
215 #endif
216 }; // class VhtPpdu
217 
218 } // namespace ns3
219 
220 #endif /* VHT_PPDU_H */
iterator in a Buffer instance
Definition: buffer.h:100
Protocol header serialization and deserialization.
Definition: header.h:44
virtual uint32_t Deserialize(Buffer::Iterator start)=0
Deserialize the object from a buffer iterator.
OFDM and ERP OFDM L-SIG PHY header.
Definition: ofdm-ppdu.h:55
OFDM PPDU (11a)
Definition: ofdm-ppdu.h:48
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:105
a unique identifier for an interface.
Definition: type-id.h:60
VHT PHY header (VHT-SIG-A1/A2/B).
Definition: vht-ppdu.h:52
uint8_t m_suMcs
SU VHT MCS.
Definition: vht-ppdu.h:145
bool m_mu
This is used to decide whether MU SIG-B should be added or not.
Definition: vht-ppdu.h:148
static TypeId GetTypeId()
Get the type ID.
Definition: vht-ppdu.cc:207
void SetNStreams(uint8_t nStreams)
Fill the number of streams field of VHT-SIG-A1.
Definition: vht-ppdu.cc:291
void SetChannelWidth(uint16_t channelWidth)
Fill the channel width field of VHT-SIG-A1 (in MHz).
Definition: vht-ppdu.cc:249
uint16_t GetChannelWidth() const
Return the channel width (in MHz).
Definition: vht-ppdu.cc:270
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
Definition: vht-ppdu.cc:217
uint8_t GetSuMcs() const
Return the SU VHT MCS field of VHT-SIG-A2.
Definition: vht-ppdu.cc:335
uint8_t GetNStreams() const
Return the number of streams.
Definition: vht-ppdu.cc:298
bool GetShortGuardInterval() const
Return the short GI field of VHT-SIG-A2.
Definition: vht-ppdu.cc:310
uint8_t m_sgi_disambiguation
Short GI NSYM Disambiguation.
Definition: vht-ppdu.h:144
void Serialize(Buffer::Iterator start) const override
Definition: vht-ppdu.cc:341
void SetMuFlag(bool mu)
Set the Multi-User (MU) flag.
Definition: vht-ppdu.cc:243
uint8_t m_sgi
Short GI.
Definition: vht-ppdu.h:143
void SetSuMcs(uint8_t mcs)
Fill the SU VHT MCS field of VHT-SIG-A2.
Definition: vht-ppdu.cc:328
void SetShortGuardIntervalDisambiguation(bool disambiguation)
Fill the short GI NSYM disambiguation field of VHT-SIG-A2.
Definition: vht-ppdu.cc:316
bool GetShortGuardIntervalDisambiguation() const
Return the short GI NSYM disambiguation field of VHT-SIG-A2.
Definition: vht-ppdu.cc:322
uint32_t GetSerializedSize() const override
Definition: vht-ppdu.cc:230
void SetShortGuardInterval(bool sgi)
Fill the short guard interval field of VHT-SIG-A2.
Definition: vht-ppdu.cc:304
void Print(std::ostream &os) const override
Definition: vht-ppdu.cc:223
VHT PPDU (11ac)
Definition: vht-ppdu.h:45
virtual void SetPhyHeaders(const WifiTxVector &txVector, Time ppduDuration)
Fill in the PHY headers.
Definition: vht-ppdu.cc:53
VhtPpdu(Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector, uint16_t txCenterFreq, Time ppduDuration, WifiPhyBand band, uint64_t uid)
Create a VHT PPDU.
Definition: vht-ppdu.cc:35
WifiPpduType GetType() const override
Return the PPDU type (.
Definition: vht-ppdu.cc:191
WifiTxVector DoGetTxVector() const override
Get the TXVECTOR used to send the PPDU.
Definition: vht-ppdu.cc:104
void SetTxVectorFromPhyHeaders(WifiTxVector &txVector, const LSigHeader &lSig, const VhtSigHeader &vhtSig) const
Fill in the TXVECTOR from PHY headers.
Definition: vht-ppdu.cc:133
void SetVhtSigHeader(VhtSigHeader &vhtSig, const WifiTxVector &txVector, Time ppduDuration) const
Fill in the VHT-SIG header.
Definition: vht-ppdu.cc:83
Time GetTxDuration() const override
Get the total transmission duration of the PPDU.
Definition: vht-ppdu.cc:145
Ptr< WifiPpdu > Copy() const override
Copy this instance.
Definition: vht-ppdu.cc:185
virtual void SetLSigHeader(LSigHeader &lSig, Time ppduDuration) const
Fill in the L-SIG header.
Definition: vht-ppdu.cc:73
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
WifiPhyBand
Identifies the PHY band.
Definition: wifi-phy-band.h:33
WifiPpduType
The type of PPDU (SU, DL MU, or UL MU)
Every class exported by the ns3 library is enclosed in the ns3 namespace.