A Discrete-Event Network Simulator
API
wifi-ppdu.h
Go to the documentation of this file.
1/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2019 Orange Labs
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 * Author: Rediet <getachew.redieteab@orange.com>
19 */
20
21#ifndef WIFI_PPDU_H
22#define WIFI_PPDU_H
23
24#include "wifi-tx-vector.h"
25#include "ns3/nstime.h"
26#include <list>
27#include <unordered_map>
28
36namespace ns3 {
37
38class WifiPsdu;
39
43typedef std::unordered_map <uint16_t /* STA-ID */, Ptr<const WifiPsdu> /* PSDU */> WifiConstPsduMap;
44
51class WifiPpdu : public SimpleRefCount<WifiPpdu>
52{
53public:
62 WifiPpdu (Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint16_t txCenterFreq, uint64_t uid = UINT64_MAX);
71 WifiPpdu (const WifiConstPsduMap & psdus, const WifiTxVector& txVector, uint16_t txCenterFreq, uint64_t uid);
75 virtual ~WifiPpdu ();
76
82 WifiTxVector GetTxVector (void) const;
83
89 Ptr<const WifiPsdu> GetPsdu (void) const;
90
94 bool IsTruncatedTx (void) const;
95
99 void SetTruncatedTx (void);
100
106 virtual Time GetTxDuration (void) const;
107
114 virtual uint16_t GetTransmissionChannelWidth (void) const;
115
123 bool DoesOverlapChannel (uint16_t minFreq, uint16_t maxFreq) const;
124
134 virtual bool CanBeReceived (uint16_t p20MinFreq, uint16_t p20MaxFreq) const;
135
141
146 uint64_t GetUid (void) const;
147
152 WifiPreamble GetPreamble (void) const;
153
158 void Print (std::ostream &os) const;
163 virtual Ptr<WifiPpdu> Copy (void) const;
164
169 virtual WifiPpduType GetType (void) const;
170
176 virtual uint16_t GetStaId (void) const;
177
178protected:
183 virtual std::string PrintPayload (void) const;
184
188 uint16_t m_txCenterFreq;
189 uint64_t m_uid;
190
191private:
197 virtual WifiTxVector DoGetTxVector (void) const;
198
201 uint8_t m_txAntennas;
202}; //class WifiPpdu
203
211std::ostream& operator<< (std::ostream& os, const Ptr<const WifiPpdu> &ppdu);
212
220std::ostream & operator << (std::ostream &os, const WifiConstPsduMap &psdus);
221
222} //namespace ns3
223
224#endif /* WIFI_PPDU_H */
A template-based reference counting class.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:104
WifiPpdu stores a preamble, a modulation class, PHY headers and a PSDU.
Definition: wifi-ppdu.h:52
void Print(std::ostream &os) const
Print the PPDU contents.
Definition: wifi-ppdu.cc:199
virtual bool CanBeReceived(uint16_t p20MinFreq, uint16_t p20MaxFreq) const
Check whether the given PPDU can be received on the specified primary channel.
Definition: wifi-ppdu.cc:155
WifiModulationClass GetModulation(void) const
Get the modulation used for the PPDU.
Definition: wifi-ppdu.cc:100
virtual WifiPpduType GetType(void) const
Return the PPDU type (.
Definition: wifi-ppdu.cc:180
uint16_t m_txCenterFreq
the center frequency (MHz) used for the transmission of this PPDU
Definition: wifi-ppdu.h:188
WifiTxVector GetTxVector(void) const
Get the TXVECTOR used to send the PPDU.
Definition: wifi-ppdu.cc:65
virtual WifiTxVector DoGetTxVector(void) const
Get the TXVECTOR used to send the PPDU.
Definition: wifi-ppdu.cc:74
WifiPreamble GetPreamble(void) const
Get the preamble of the PPDU.
Definition: wifi-ppdu.cc:174
virtual Ptr< WifiPpdu > Copy(void) const
Copy this instance.
Definition: wifi-ppdu.cc:218
virtual Time GetTxDuration(void) const
Get the total transmission duration of the PPDU.
Definition: wifi-ppdu.cc:192
virtual std::string PrintPayload(void) const
Print the payload of the PPDU.
Definition: wifi-ppdu.cc:210
WifiModulationClass m_modulation
the modulation used for the transmission of this PPDU
Definition: wifi-ppdu.h:186
WifiPreamble m_preamble
the PHY preamble
Definition: wifi-ppdu.h:185
virtual ~WifiPpdu()
Destructor for WifiPpdu.
Definition: wifi-ppdu.cc:55
virtual uint16_t GetStaId(void) const
Get the ID of the STA that transmitted the PPDU for UL MU, SU_STA_ID otherwise.
Definition: wifi-ppdu.cc:186
uint64_t GetUid(void) const
Get the UID of the PPDU.
Definition: wifi-ppdu.cc:168
uint64_t m_uid
the unique ID of this PPDU
Definition: wifi-ppdu.h:189
WifiPpdu(Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector, uint16_t txCenterFreq, uint64_t uid=UINT64_MAX)
Create a PPDU storing a PSDU.
Definition: wifi-ppdu.cc:30
bool IsTruncatedTx(void) const
Definition: wifi-ppdu.cc:87
WifiConstPsduMap m_psdus
the PSDUs contained in this PPDU
Definition: wifi-ppdu.h:187
uint8_t m_txAntennas
the number of antennas used to transmit this PPDU
Definition: wifi-ppdu.h:201
bool DoesOverlapChannel(uint16_t minFreq, uint16_t maxFreq) const
Check whether the given PPDU overlaps a given channel.
Definition: wifi-ppdu.cc:112
uint8_t m_txPowerLevel
the transmission power level (used only for TX and initializing the returned WifiTxVector)
Definition: wifi-ppdu.h:200
Ptr< const WifiPsdu > GetPsdu(void) const
Get the payload of the PPDU.
Definition: wifi-ppdu.cc:81
bool m_truncatedTx
flag indicating whether the frame's transmission was aborted due to transmitter switch off
Definition: wifi-ppdu.h:199
virtual uint16_t GetTransmissionChannelWidth(void) const
Get the channel width over which the PPDU will effectively be transmitted.
Definition: wifi-ppdu.cc:106
void SetTruncatedTx(void)
Indicate that the PPDU's transmission was aborted due to transmitter switch off.
Definition: wifi-ppdu.cc:93
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
WifiPreamble
The type of preamble to be used by an IEEE 802.11 transmission.
WifiPpduType
The type of PPDU (SU, DL MU, or UL MU)
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.
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID.
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:139