A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
mu-edca-parameter-set.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2021 Universita' degli Studi di Napoli Federico II
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: Stefano Avallone <stavallo@unina.it>
18 */
19
20#ifndef MU_EDCA_PARAMETER_SET_H
21#define MU_EDCA_PARAMETER_SET_H
22
23#include "ns3/nstime.h"
24#include "ns3/wifi-information-element.h"
25
26#include <array>
27
28namespace ns3
29{
30
31/**
32 * \brief The MU EDCA Parameter Set
33 * \ingroup wifi
34 *
35 * The 802.11ax MU EDCA Parameter Set.
36 */
38{
39 public:
41
42 WifiInformationElementId ElementId() const override;
44
45 /**
46 * Set the QoS Info field in the MuEdcaParameterSet information element.
47 *
48 * \param qosInfo the QoS Info field in the MuEdcaParameterSet information element
49 */
50 void SetQosInfo(uint8_t qosInfo);
51 /**
52 * Set the AIFSN subfield of the ACI/AIFSN field in the MU AC Parameter Record
53 * field corresponding to the given AC Index (<i>aci</i>). Note that <i>aifsn</i>
54 * can either be zero (EDCA disabled) or in the range from 2 to 15.
55 *
56 * \param aci the AC Index
57 * \param aifsn the value for the AIFSN subfield
58 */
59 void SetMuAifsn(uint8_t aci, uint8_t aifsn);
60 /**
61 * Set the ECWmin subfield of the ECWmin/ECWmax field in the MU AC Parameter Record
62 * field corresponding to the given AC Index (<i>aci</i>). Note that <i>cwMin</i>
63 * must be a power of 2 minus 1 in the range from 0 to 32767.
64 *
65 * \param aci the AC Index
66 * \param cwMin the CWmin value encoded by the ECWmin field
67 */
68 void SetMuCwMin(uint8_t aci, uint16_t cwMin);
69 /**
70 * Set the ECWmax subfield of the ECWmin/ECWmax field in the MU AC Parameter Record
71 * field corresponding to the given AC Index (<i>aci</i>). Note that <i>cwMax</i>
72 * must be a power of 2 minus 1 in the range from 0 to 32767.
73 *
74 * \param aci the AC Index
75 * \param cwMax the CWmax value encoded by the ECWmax field
76 */
77 void SetMuCwMax(uint8_t aci, uint16_t cwMax);
78 /**
79 * Set the MU EDCA Timer field in the MU AC Parameter Record field corresponding
80 * to the given AC Index (<i>aci</i>). Note that <i>timer</i> must be an integer
81 * multiple of 8 TUs (i.e., 8 * 1024 = 8192 microseconds) in the range from
82 * 8.192 milliseconds to 2088.96 milliseconds. A value of 0 is used to indicate
83 * that the MU EDCA Parameter Set element must not be sent and therefore it is
84 * only allowed if the MU EDCA Timer is set to 0 for all ACs.
85 *
86 * \param aci the AC Index
87 * \param timer the value for the timer encoded by the MU EDCA Timer field
88 */
89 void SetMuEdcaTimer(uint8_t aci, Time timer);
90
91 /**
92 * Return the QoS Info field in the MuEdcaParameterSet information element.
93 *
94 * \return the QoS Info field in the MuEdcaParameterSet information element
95 */
96 uint8_t GetQosInfo() const;
97 /**
98 * Get the AIFSN subfield of the ACI/AIFSN field in the MU AC Parameter Record
99 * field corresponding to the given AC Index (<i>aci</i>).
100 *
101 * \param aci the AC Index
102 * \return the value of the AIFSN subfield
103 */
104 uint8_t GetMuAifsn(uint8_t aci) const;
105 /**
106 * Get the CWmin value encoded by the ECWmin subfield of the ECWmin/ECWmax field
107 * in the MU AC Parameter Record field corresponding to the given AC Index (<i>aci</i>).
108 *
109 * \param aci the AC Index
110 * \return the CWmin value
111 */
112 uint16_t GetMuCwMin(uint8_t aci) const;
113 /**
114 * Get the CWmax value encoded by the ECWmax subfield of the ECWmin/ECWmax field
115 * in the MU AC Parameter Record field corresponding to the given AC Index (<i>aci</i>).
116 *
117 * \param aci the AC Index
118 * \return the CWmax value
119 */
120 uint16_t GetMuCwMax(uint8_t aci) const;
121 /**
122 * Get the MU EDCA Timer value encoded in the MU AC Parameter Record field corresponding
123 * to the given AC Index (<i>aci</i>).
124 *
125 * \param aci the AC Index
126 * \return the MU EDCA Timer value
127 */
128 Time GetMuEdcaTimer(uint8_t aci) const;
129
130 private:
131 uint16_t GetInformationFieldSize() const override;
132 void SerializeInformationField(Buffer::Iterator start) const override;
133 uint16_t DeserializeInformationField(Buffer::Iterator start, uint16_t length) override;
134
135 /**
136 * MU AC Parameter Record type
137 */
139 {
140 uint8_t aifsnField; ///< the ACI/AIFSN field
141 uint8_t cwMinMax; ///< the ECWmin/ECWmax field
142 uint8_t muEdcaTimer; ///< the MU EDCA Timer field
143 };
144
145 uint8_t m_qosInfo; ///< QoS info field
146 std::array<ParameterRecord, 4> m_records; ///< MU AC Parameter Record fields
147};
148
149} // namespace ns3
150
151#endif /* MU_EDCA_PARAMETER_SET_H */
iterator in a Buffer instance
Definition: buffer.h:100
The MU EDCA Parameter Set.
WifiInformationElementId ElementIdExt() const override
Get the wifi information element ID extension.
uint16_t DeserializeInformationField(Buffer::Iterator start, uint16_t length) override
Deserialize information (i.e., the body of the IE, not including the Element ID and length octets)
uint16_t GetMuCwMin(uint8_t aci) const
Get the CWmin value encoded by the ECWmin subfield of the ECWmin/ECWmax field in the MU AC Parameter ...
void SetMuCwMin(uint8_t aci, uint16_t cwMin)
Set the ECWmin subfield of the ECWmin/ECWmax field in the MU AC Parameter Record field corresponding ...
void SetMuEdcaTimer(uint8_t aci, Time timer)
Set the MU EDCA Timer field in the MU AC Parameter Record field corresponding to the given AC Index (...
void SerializeInformationField(Buffer::Iterator start) const override
Serialize information (i.e., the body of the IE, not including the Element ID and length octets)
void SetMuAifsn(uint8_t aci, uint8_t aifsn)
Set the AIFSN subfield of the ACI/AIFSN field in the MU AC Parameter Record field corresponding to th...
void SetQosInfo(uint8_t qosInfo)
Set the QoS Info field in the MuEdcaParameterSet information element.
uint8_t GetMuAifsn(uint8_t aci) const
Get the AIFSN subfield of the ACI/AIFSN field in the MU AC Parameter Record field corresponding to th...
uint16_t GetMuCwMax(uint8_t aci) const
Get the CWmax value encoded by the ECWmax subfield of the ECWmin/ECWmax field in the MU AC Parameter ...
WifiInformationElementId ElementId() const override
Get the wifi information element ID.
uint8_t GetQosInfo() const
Return the QoS Info field in the MuEdcaParameterSet information element.
std::array< ParameterRecord, 4 > m_records
MU AC Parameter Record fields.
Time GetMuEdcaTimer(uint8_t aci) const
Get the MU EDCA Timer value encoded in the MU AC Parameter Record field corresponding to the given AC...
uint8_t m_qosInfo
QoS info field.
void SetMuCwMax(uint8_t aci, uint16_t cwMax)
Set the ECWmax subfield of the ECWmin/ECWmax field in the MU AC Parameter Record field corresponding ...
uint16_t GetInformationFieldSize() const override
Length of serialized information (i.e., the length of the body of the IE, not including the Element I...
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:105
Information element, as defined in 802.11-2007 standard.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
uint8_t WifiInformationElementId
This type is used to represent an Information Element ID.
uint8_t muEdcaTimer
the MU EDCA Timer field