A Discrete-Event Network Simulator
API
ht-ppdu.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 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> (HtSigHeader)
20  */
21 
22 #ifndef HT_PPDU_H
23 #define HT_PPDU_H
24 
25 #include "ns3/ofdm-ppdu.h"
26 
33 namespace ns3
34 {
35 
36 class WifiPsdu;
37 
44 class HtPpdu : public OfdmPpdu
45 {
46  public:
52  {
53  public:
54  HtSigHeader();
55 
61  void SetMcs(uint8_t mcs);
67  uint8_t GetMcs() const;
73  void SetChannelWidth(uint16_t channelWidth);
79  uint16_t GetChannelWidth() const;
85  void SetAggregation(bool aggregation);
91  bool GetAggregation() const;
97  void SetShortGuardInterval(bool sgi);
103  bool GetShortGuardInterval() const;
109  void SetHtLength(uint16_t length);
115  uint16_t GetHtLength() const;
116 
117  private:
118  uint8_t m_mcs;
119  uint8_t m_cbw20_40;
120  uint16_t m_htLength;
121  uint8_t m_aggregation;
122  uint8_t m_sgi;
123  }; // HtSigHeader
124 
135  const WifiTxVector& txVector,
137  Time ppduDuration,
138  uint64_t uid);
139 
140  Time GetTxDuration() const override;
141  Ptr<WifiPpdu> Copy() const override;
142 
143  private:
144  WifiTxVector DoGetTxVector() const override;
145 
153  void SetPhyHeaders(const WifiTxVector& txVector, Time ppduDuration, std::size_t psduSize);
154 
161  virtual void SetLSigHeader(LSigHeader& lSig, Time ppduDuration) const;
162 
170  void SetHtSigHeader(HtSigHeader& htSig,
171  const WifiTxVector& txVector,
172  std::size_t psduSize) const;
173 
182  const LSigHeader& lSig,
183  const HtSigHeader& htSig) const;
184 
186 }; // class HtPpdu
187 
188 } // namespace ns3
189 
190 #endif /* HT_PPDU_H */
HT PHY header (HT-SIG1/2).
Definition: ht-ppdu.h:52
uint8_t m_mcs
Modulation and Coding Scheme index.
Definition: ht-ppdu.h:118
uint16_t GetHtLength() const
Return the HT length field of HT-SIG (in bytes).
Definition: ht-ppdu.cc:165
uint8_t GetMcs() const
Return the MCS field of HT-SIG.
Definition: ht-ppdu.cc:141
void SetHtLength(uint16_t length)
Fill the HT length field of HT-SIG (in bytes).
Definition: ht-ppdu.cc:159
bool GetAggregation() const
Return the aggregation field of HT-SIG.
Definition: ht-ppdu.cc:177
uint16_t m_htLength
HT length.
Definition: ht-ppdu.h:120
void SetMcs(uint8_t mcs)
Fill the MCS field of HT-SIG.
Definition: ht-ppdu.cc:134
bool GetShortGuardInterval() const
Return the short guard interval field of HT-SIG.
Definition: ht-ppdu.cc:189
uint16_t GetChannelWidth() const
Return the channel width (in MHz).
Definition: ht-ppdu.cc:153
void SetAggregation(bool aggregation)
Fill the aggregation field of HT-SIG.
Definition: ht-ppdu.cc:171
void SetChannelWidth(uint16_t channelWidth)
Fill the channel width field of HT-SIG (in MHz).
Definition: ht-ppdu.cc:147
uint8_t m_sgi
Short Guard Interval.
Definition: ht-ppdu.h:122
uint8_t m_cbw20_40
CBW 20/40.
Definition: ht-ppdu.h:119
void SetShortGuardInterval(bool sgi)
Fill the short guard interval field of HT-SIG.
Definition: ht-ppdu.cc:183
uint8_t m_aggregation
Aggregation.
Definition: ht-ppdu.h:121
HT PPDU (11n)
Definition: ht-ppdu.h:45
HtSigHeader m_htSig
the HT-SIG PHY header
Definition: ht-ppdu.h:185
HtPpdu(Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector, const WifiPhyOperatingChannel &channel, Time ppduDuration, uint64_t uid)
Create an HT PPDU.
Definition: ht-ppdu.cc:37
WifiTxVector DoGetTxVector() const override
Get the TXVECTOR used to send the PPDU.
Definition: ht-ppdu.cc:89
Ptr< WifiPpdu > Copy() const override
Copy this instance.
Definition: ht-ppdu.cc:119
void SetHtSigHeader(HtSigHeader &htSig, const WifiTxVector &txVector, std::size_t psduSize) const
Fill in the HT-SIG header.
Definition: ht-ppdu.cc:79
virtual void SetLSigHeader(LSigHeader &lSig, Time ppduDuration) const
Fill in the L-SIG header.
Definition: ht-ppdu.cc:61
void SetPhyHeaders(const WifiTxVector &txVector, Time ppduDuration, std::size_t psduSize)
Fill in the PHY headers.
Definition: ht-ppdu.cc:53
void SetTxVectorFromPhyHeaders(WifiTxVector &txVector, const LSigHeader &lSig, const HtSigHeader &htSig) const
Fill in the TXVECTOR from PHY headers.
Definition: ht-ppdu.cc:98
Time GetTxDuration() const override
Get the total transmission duration of the PPDU.
Definition: ht-ppdu.cc:110
OFDM and ERP OFDM L-SIG PHY header.
Definition: ofdm-ppdu.h:54
OFDM PPDU (11a)
Definition: ofdm-ppdu.h:47
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:105
Class that keeps track of all information about the current PHY operating channel.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
Every class exported by the ns3 library is enclosed in the ns3 namespace.
channel
Definition: third.py:88