12#include "ns3/attribute-container.h"
13#include "ns3/boolean.h"
15#include "ns3/integer.h"
18#include "ns3/string.h"
19#include "ns3/uinteger.h"
34 return os <<
"NOT_SUPPORTED";
36 return os <<
"SAME_LINK_SET";
38 return os <<
"ANY_LINK_SET";
40 return os <<
"UNKNOWN(" <<
static_cast<uint32_t>(negsupport) <<
")";
56 using TidLinkMapValue =
64 .AddAttribute(
"EmlsrActivated",
65 "Whether EMLSR option is activated. If activated, EMLSR mode can be "
66 "enabled on the EMLSR links by an installed EMLSR Manager.",
72 .AddAttribute(
"TransitionTimeout",
73 "The Transition Timeout (not used by non-AP MLDs). "
74 "Possible values are 0us or 2^n us, with n=7..16.",
80 "The duration of the MediumSyncDelay timer (must be a multiple of 32 us). "
81 "The value of this attribute is only used by AP MLDs with EMLSR activated.",
87 "Threshold (dBm) to be used instead of the normal CCA sensitivity for the primary "
88 "20 MHz channel if the MediumSyncDelay timer has a nonzero value. "
89 "The value of this attribute is only used by AP MLDs with EMLSR activated.",
95 "Maximum number of TXOPs that an EMLSR client is allowed to attempt to initiate "
96 "while the MediumSyncDelay timer is running (zero indicates no limit). "
97 "The value of this attribute is only used by AP MLDs with EMLSR activated.",
101 .AddAttribute(
"TidToLinkMappingNegSupport",
102 "TID-to-Link Mapping Negotiation Support.",
113 "TidToLinkMappingDl",
114 "A list-of-TIDs-indexed map of the list of links where the TIDs are mapped to "
115 "for the downlink 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.",
140 "TidToLinkMappingUl",
141 "A list-of-TIDs-indexed map of the list of links where the TIDs are mapped to "
142 "for the uplink direction. "
143 "In case a string is used to set this attribute, the string shall contain the "
144 "(TID list, link list) pairs separated by a semicolon (;); in every pair, the "
145 "TID list and the link list are separated by a blank space, and the elements of "
146 "each list are separated by a comma (,) without spaces. "
147 "E.g., \"0,4 1,2,3; 1 0;2 0,1\" means that TIDs 0 and 4 are mapped on links "
148 "1, 2 and 3; TID 1 is mapped on link 0 and TID 2 is mapped on links 0 and 1. "
149 "An empty map indicates the default mapping, i.e., all TIDs are mapped to all "
150 "setup links. If the map contains the mapping for some TID(s), the mapping "
151 "corresponding to the missing TID(s) remains unchanged. "
152 "A non-AP MLD includes this mapping in the Association Request frame sent to "
153 "an AP MLD, unless the AP MLD advertises a negotiation support of 1 and this "
154 "mapping is such that TIDs are mapped to distinct link sets, in which case "
155 "the default mapping is included.",
176 for (
const auto& [tids, links] : linkMapping)
178 for (
auto tid : tids)
180 ret[tid] = std::set<uint8_t>(links.cbegin(), links.cend());
188 const std::map<std::list<uint8_t>, std::list<uint8_t>>& mapping)
193 for (
const auto& [tids, links] : mapping)
195 linkMapping.emplace(std::list<uint64_t>(tids.cbegin(), tids.cend()),
196 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 > MakeAttributeContainerChecker()
Make uninitialized AttributeContainerChecker using explicit types.
Ptr< const AttributeAccessor > MakeAttributeContainerAccessor(T1 a1)
Make AttributeContainerAccessor using explicit types.
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 AttributeChecker > MakeIntegerChecker()
Ptr< const AttributeAccessor > MakeIntegerAccessor(T1 a1)
Ptr< const AttributeChecker > MakeUintegerChecker()
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.
std::map< uint8_t, std::set< uint8_t > > WifiTidLinkMapping
TID-indexed map of the link set to which the TID is mapped.
WifiDirection
Wifi direction.
static constexpr int8_t DEFAULT_MSD_OFDM_ED_THRESH
default MediumSyncDelay timer OFDM ED threshold
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
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 AttributeAccessor > MakeEnumAccessor(T1 a1)
Ptr< const AttributeChecker > MakeTimeChecker()
Helper to make an unbounded Time checker.