A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
eht-configuration.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2021 DERONNE SOFTWARE ENGINEERING
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: Sébastien Deronne <sebastien.deronne@gmail.com>
18 * Stefano Avallone <stavallo@unina.it>
19 */
20
21#include "eht-configuration.h"
22
23#include "ns3/attribute-container.h"
24#include "ns3/boolean.h"
25#include "ns3/enum.h"
26#include "ns3/log.h"
27#include "ns3/pair.h"
28#include "ns3/string.h"
29#include "ns3/uinteger.h"
30
31namespace ns3
32{
33
34NS_LOG_COMPONENT_DEFINE("EhtConfiguration");
35
36NS_OBJECT_ENSURE_REGISTERED(EhtConfiguration);
37
39{
40 NS_LOG_FUNCTION(this);
41}
42
44{
45 NS_LOG_FUNCTION(this);
46}
47
50{
51 using TidLinkMapValue =
53
54 static ns3::TypeId tid =
55 ns3::TypeId("ns3::EhtConfiguration")
57 .SetGroupName("Wifi")
58 .AddConstructor<EhtConfiguration>()
59 .AddAttribute("EmlsrActivated",
60 "Whether EMLSR option is activated. If activated, EMLSR mode can be "
61 "enabled on the EMLSR links by an installed EMLSR Manager.",
63 TypeId::ATTR_CONSTRUCT, // prevent setting after construction
64 BooleanValue(false),
67 .AddAttribute("TransitionTimeout",
68 "The Transition Timeout (not used by non-AP MLDs). "
69 "Possible values are 0us or 2^n us, with n=7..16.",
73 .AddAttribute(
74 "TidToLinkMappingNegSupport",
75 "TID-to-Link Mapping Negotiation Support.",
80 "NOT_SUPPORTED",
82 "SAME_LINK_SET",
84 "ANY_LINK_SET"))
85 .AddAttribute(
86 "TidToLinkMappingDl",
87 "A list-of-TIDs-indexed map of the list of links where the TIDs are mapped to "
88 "for the downlink direction. "
89 "In case a string is used to set this attribute, the string shall contain the "
90 "(TID list, link list) pairs separated by a semicolon (;); in every pair, the "
91 "TID list and the link list are separated by a blank space, and the elements of "
92 "each list are separated by a comma (,) without spaces. "
93 "E.g., \"0,4 1,2,3; 1 0;2 0,1\" means that TIDs 0 and 4 are mapped on links "
94 "1, 2 and 3; TID 1 is mapped on link 0 and TID 2 is mapped on links 0 and 1. "
95 "An empty map indicates the default mapping, i.e., all TIDs are mapped to all "
96 "setup links. If the map contains the mapping for some TID(s), the mapping "
97 "corresponding to the missing TID(s) remains unchanged. "
98 "A non-AP MLD includes this mapping in the Association Request frame sent to "
99 "an AP MLD, unless the AP MLD advertises a negotiation support of 1 and this "
100 "mapping is such that TIDs are mapped to distinct link sets, in which case "
101 "the default mapping is included.",
102 StringValue(""),
103 MakeAttributeContainerAccessor<TidLinkMapValue, ';'>(
105 MakeAttributeContainerChecker<TidLinkMapValue, ';'>(
108 MakeAttributeContainerChecker<UintegerValue>(
109 MakeUintegerChecker<uint8_t>()),
110 MakeAttributeContainerChecker<UintegerValue>(
111 MakeUintegerChecker<uint8_t>()))))
112 .AddAttribute(
113 "TidToLinkMappingUl",
114 "A list-of-TIDs-indexed map of the list of links where the TIDs are mapped to "
115 "for the uplink direction. "
116 "In case a string is used to set this attribute, the string shall contain the "
117 "(TID list, link list) pairs separated by a semicolon (;); in every pair, the "
118 "TID list and the link list are separated by a blank space, and the elements of "
119 "each list are separated by a comma (,) without spaces. "
120 "E.g., \"0,4 1,2,3; 1 0;2 0,1\" means that TIDs 0 and 4 are mapped on links "
121 "1, 2 and 3; TID 1 is mapped on link 0 and TID 2 is mapped on links 0 and 1. "
122 "An empty map indicates the default mapping, i.e., all TIDs are mapped to all "
123 "setup links. If the map contains the mapping for some TID(s), the mapping "
124 "corresponding to the missing TID(s) remains unchanged. "
125 "A non-AP MLD includes this mapping in the Association Request frame sent to "
126 "an AP MLD, unless the AP MLD advertises a negotiation support of 1 and this "
127 "mapping is such that TIDs are mapped to distinct link sets, in which case "
128 "the default mapping is included.",
129 StringValue(""),
130 MakeAttributeContainerAccessor<TidLinkMapValue, ';'>(
132 MakeAttributeContainerChecker<TidLinkMapValue, ';'>(
135 MakeAttributeContainerChecker<UintegerValue>(
136 MakeUintegerChecker<uint8_t>()),
137 MakeAttributeContainerChecker<UintegerValue>(
138 MakeUintegerChecker<uint8_t>()))));
139 return tid;
140}
141
144{
147 const auto& linkMapping = (dir == WifiDirection::DOWNLINK ? m_linkMappingDl : m_linkMappingUl);
148
149 for (const auto& [tids, links] : linkMapping)
150 {
151 for (auto tid : tids)
152 {
153 ret[tid] = std::set<uint8_t>(links.cbegin(), links.cend());
154 }
155 }
156 return ret;
157}
158
159void
161 const std::map<std::list<uint8_t>, std::list<uint8_t>>& mapping)
162{
164 auto& linkMapping = (dir == WifiDirection::DOWNLINK ? m_linkMappingDl : m_linkMappingUl);
165 linkMapping.clear();
166 for (const auto& [tids, links] : mapping)
167 {
168 linkMapping.emplace(std::list<uint64_t>(tids.cbegin(), tids.cend()),
169 std::list<uint64_t>(links.cbegin(), links.cend()));
170 }
171}
172
173} // namespace ns3
A container for one type of attribute.
AttributeValue implementation for Boolean.
Definition: boolean.h:37
EHT configuration.
static TypeId GetTypeId()
Get the type ID.
bool m_emlsrActivated
whether EMLSR option is activated
WifiTidLinkMapping GetTidLinkMapping(WifiDirection dir) const
Time m_transitionTimeout
Transition timeout.
std::map< std::list< uint64_t >, std::list< uint64_t > > m_linkMappingDl
TIDs-indexed Link Mapping for downlink.
void SetTidLinkMapping(WifiDirection dir, const std::map< std::list< uint8_t >, std::list< uint8_t > > &mapping)
Set the TID-to-Link mapping for the given direction.
WifiTidToLinkMappingNegSupport m_tidLinkMappingSupport
TID-to-Link Mapping Negotiation Support.
std::map< std::list< uint64_t >, std::list< uint64_t > > m_linkMappingUl
TIDs-indexed Link Mapping for uplink.
Hold variables of type enum.
Definition: enum.h:56
A base class which provides memory management and object aggregation.
Definition: object.h:89
Hold objects of type std::pair<A, B>.
Definition: pair.h:56
Hold variables of type string.
Definition: string.h:56
AttributeValue implementation for Time.
Definition: nstime.h:1412
a unique identifier for an interface.
Definition: type-id.h:59
@ ATTR_GET
The attribute can be read.
Definition: type-id.h:64
@ ATTR_CONSTRUCT
The attribute can be written at construction-time.
Definition: type-id.h:66
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:930
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
Definition: assert.h:66
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
Definition: boolean.h:86
Ptr< const AttributeChecker > MakeBooleanChecker()
Definition: boolean.cc:124
Ptr< const AttributeAccessor > MakeEnumAccessor(T1 a1)
Definition: enum.h:205
Ptr< AttributeChecker > MakePairChecker()
Make a PairChecker without abscissa and ordinate AttributeCheckers.
Definition: pair.h:253
Ptr< const AttributeChecker > MakeTimeChecker()
Helper to make an unbounded Time checker.
Definition: nstime.h:1433
Ptr< const AttributeAccessor > MakeTimeAccessor(T1 a1)
Definition: nstime.h:1413
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:202
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:46
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1349
Every class exported by the ns3 library is enclosed in the ns3 namespace.
@ WIFI_TID_TO_LINK_MAPPING_SAME_LINK_SET
@ WIFI_TID_TO_LINK_MAPPING_NOT_SUPPORTED
@ WIFI_TID_TO_LINK_MAPPING_ANY_LINK_SET
WifiDirection
Wifi direction.
Definition: wifi-utils.h:43
std::map< uint8_t, std::set< uint8_t > > WifiTidLinkMapping
TID-indexed map of the link set to which the TID is mapped.
Definition: wifi-utils.h:74
Ptr< const AttributeChecker > MakeEnumChecker(int v, std::string n, Ts... args)
Make an EnumChecker pre-configured with a set of allowed values by name.
Definition: enum.h:163
std::string dir