23#include "ns3/attribute-container.h"
24#include "ns3/boolean.h"
26#include "ns3/integer.h"
29#include "ns3/string.h"
30#include "ns3/uinteger.h"
45 return os <<
"NOT_SUPPORTED";
47 return os <<
"SAME_LINK_SET";
49 return os <<
"ANY_LINK_SET";
51 return os <<
"UNKNOWN(" <<
static_cast<uint32_t>(negsupport) <<
")";
67 using TidLinkMapValue =
75 .AddAttribute(
"EmlsrActivated",
76 "Whether EMLSR option is activated. If activated, EMLSR mode can be "
77 "enabled on the EMLSR links by an installed EMLSR Manager.",
83 .AddAttribute(
"TransitionTimeout",
84 "The Transition Timeout (not used by non-AP MLDs). "
85 "Possible values are 0us or 2^n us, with n=7..16.",
91 "The duration of the MediumSyncDelay timer (must be a multiple of 32 us). "
92 "The value of this attribute is only used by AP MLDs with EMLSR activated.",
98 "Threshold (dBm) to be used instead of the normal CCA sensitivity for the primary "
99 "20 MHz channel if the MediumSyncDelay timer has a nonzero value. "
100 "The value of this attribute is only used by AP MLDs with EMLSR activated.",
103 MakeIntegerChecker<int8_t>(-72, -62))
106 "Maximum number of TXOPs that an EMLSR client is allowed to attempt to initiate "
107 "while the MediumSyncDelay timer is running (zero indicates no limit). "
108 "The value of this attribute is only used by AP MLDs with EMLSR activated.",
111 MakeUintegerChecker<uint8_t>(0, 15))
112 .AddAttribute(
"TidToLinkMappingNegSupport",
113 "TID-to-Link Mapping Negotiation Support.",
115 MakeEnumAccessor<WifiTidToLinkMappingNegSupport>(
124 "TidToLinkMappingDl",
125 "A list-of-TIDs-indexed map of the list of links where the TIDs are mapped to "
126 "for the downlink direction. "
127 "In case a string is used to set this attribute, the string shall contain the "
128 "(TID list, link list) pairs separated by a semicolon (;); in every pair, the "
129 "TID list and the link list are separated by a blank space, and the elements of "
130 "each list are separated by a comma (,) without spaces. "
131 "E.g., \"0,4 1,2,3; 1 0;2 0,1\" means that TIDs 0 and 4 are mapped on links "
132 "1, 2 and 3; TID 1 is mapped on link 0 and TID 2 is mapped on links 0 and 1. "
133 "An empty map indicates the default mapping, i.e., all TIDs are mapped to all "
134 "setup links. If the map contains the mapping for some TID(s), the mapping "
135 "corresponding to the missing TID(s) remains unchanged. "
136 "A non-AP MLD includes this mapping in the Association Request frame sent to "
137 "an AP MLD, unless the AP MLD advertises a negotiation support of 1 and this "
138 "mapping is such that TIDs are mapped to distinct link sets, in which case "
139 "the default mapping is included.",
141 MakeAttributeContainerAccessor<TidLinkMapValue, ';'>(
143 MakeAttributeContainerChecker<TidLinkMapValue, ';'>(
146 MakeAttributeContainerChecker<UintegerValue>(
147 MakeUintegerChecker<uint8_t>()),
148 MakeAttributeContainerChecker<UintegerValue>(
149 MakeUintegerChecker<uint8_t>()))))
151 "TidToLinkMappingUl",
152 "A list-of-TIDs-indexed map of the list of links where the TIDs are mapped to "
153 "for the uplink direction. "
154 "In case a string is used to set this attribute, the string shall contain the "
155 "(TID list, link list) pairs separated by a semicolon (;); in every pair, the "
156 "TID list and the link list are separated by a blank space, and the elements of "
157 "each list are separated by a comma (,) without spaces. "
158 "E.g., \"0,4 1,2,3; 1 0;2 0,1\" means that TIDs 0 and 4 are mapped on links "
159 "1, 2 and 3; TID 1 is mapped on link 0 and TID 2 is mapped on links 0 and 1. "
160 "An empty map indicates the default mapping, i.e., all TIDs are mapped to all "
161 "setup links. If the map contains the mapping for some TID(s), the mapping "
162 "corresponding to the missing TID(s) remains unchanged. "
163 "A non-AP MLD includes this mapping in the Association Request frame sent to "
164 "an AP MLD, unless the AP MLD advertises a negotiation support of 1 and this "
165 "mapping is such that TIDs are mapped to distinct link sets, in which case "
166 "the default mapping is included.",
168 MakeAttributeContainerAccessor<TidLinkMapValue, ';'>(
170 MakeAttributeContainerChecker<TidLinkMapValue, ';'>(
173 MakeAttributeContainerChecker<UintegerValue>(
174 MakeUintegerChecker<uint8_t>()),
175 MakeAttributeContainerChecker<UintegerValue>(
176 MakeUintegerChecker<uint8_t>()))));
187 for (
const auto& [tids, links] : linkMapping)
189 for (
auto tid : tids)
191 ret[tid] = std::set<uint8_t>(links.cbegin(), links.cend());
199 const std::map<std::list<uint8_t>, std::list<uint8_t>>& mapping)
204 for (
const auto& [tids, links] : mapping)
206 linkMapping.emplace(std::list<uint64_t>(tids.cbegin(), tids.cend()),
207 std::list<uint64_t>(links.cbegin(), links.cend()));
A container for one type of attribute.
static TypeId GetTypeId()
Get the type ID.
Time m_mediumSyncDuration
duration of the MediumSyncDelay timer
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.
uint8_t m_msdMaxNTxops
MediumSyncDelay max number of TXOPs.
std::map< std::list< uint64_t >, std::list< uint64_t > > m_linkMappingUl
TIDs-indexed Link Mapping for uplink.
~EhtConfiguration() override
int8_t m_msdOfdmEdThreshold
MediumSyncDelay OFDM ED threshold.
Hold variables of type enum.
Hold a signed integer type.
A base class which provides memory management and object aggregation.
AttributeValue implementation for Pair.
Hold variables of type string.
a unique identifier for an interface.
@ ATTR_GET
The attribute can be read.
@ ATTR_CONSTRUCT
The attribute can be written at construction-time.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Hold an unsigned integer type.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
Ptr< AttributeChecker > MakePairChecker()
Make a PairChecker without abscissa and ordinate AttributeCheckers.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#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.
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Ptr< const AttributeChecker > MakeBooleanChecker()
Ptr< const AttributeAccessor > MakeIntegerAccessor(T1 a1)
static constexpr uint8_t DEFAULT_MSD_MAX_N_TXOPS
default MediumSyncDelay max number of TXOP attempts
Ptr< const AttributeAccessor > MakeTimeAccessor(T1 a1)
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
WifiTidToLinkMappingNegSupport
TID-to-Link Mapping Negotiation Support.
std::ostream & operator<<(std::ostream &os, const Angles &a)
Ptr< const AttributeChecker > MakeEnumChecker(T v, std::string n, Ts... args)
Make an EnumChecker pre-configured with a set of allowed values by name.
WifiDirection
Wifi direction.
static constexpr int8_t DEFAULT_MSD_OFDM_ED_THRESH
default MediumSyncDelay timer OFDM ED threshold
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
std::map< uint8_t, std::set< uint8_t > > WifiTidLinkMapping
TID-indexed map of the link set to which the TID is mapped.
static constexpr uint16_t DEFAULT_MSD_DURATION_USEC
default MediumSyncDelay timer duration (max PPDU TX time rounded to a multiple of 32 us)
Ptr< const AttributeChecker > MakeTimeChecker()
Helper to make an unbounded Time checker.