A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
multi-link-element.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2021 Universita' degli Studi di Napoli Federico II
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Author: Stefano Avallone <stavallo@unina.it>
7 */
8
9#ifndef MULTI_LINK_ELEMENT_H
10#define MULTI_LINK_ELEMENT_H
11
12#include "ns3/nstime.h"
13#include "ns3/wifi-information-element.h"
14#include "ns3/wifi-mac-header.h"
15
16#include <memory>
17#include <optional>
18#include <variant>
19
20namespace ns3
21{
22
23class MgtAssocRequestHeader;
24class MgtReassocRequestHeader;
25class MgtAssocResponseHeader;
26
27/// variant holding a reference to a (Re)Association Request
28using AssocReqRefVariant = std::variant<std::reference_wrapper<MgtAssocRequestHeader>,
29 std::reference_wrapper<MgtReassocRequestHeader>>;
30
31/**
32 * Common Info field of the Basic Multi-Link element.
33 * See Sec. 9.4.2.312.2.2 of 802.11be D1.5
34 */
36{
37 /**
38 * Medium Synchronization Delay Information subfield
39 */
41 {
42 uint8_t mediumSyncDuration; //!< Medium Synchronization Duration
43 uint8_t mediumSyncOfdmEdThreshold : 4; //!< Medium Synchronization OFDM ED Threshold
44 uint8_t mediumSyncMaxNTxops : 4; //!< Medium Synchronization MAximum Number of TXOPs
45 };
46
47 /**
48 * EML Capabilities subfield
49 */
51 {
52 uint8_t emlsrSupport : 1; //!< EMLSR Support
53 uint8_t emlsrPaddingDelay : 3; //!< EMLSR Padding Delay
54 uint8_t emlsrTransitionDelay : 3; //!< EMLSR Transition Delay
55 uint8_t emlmrSupport : 1; //!< EMLMR Support
56 uint8_t emlmrDelay : 3; //!< EMLMR Delay
57 uint8_t transitionTimeout : 4; //!< Transition Timeout
58 };
59
60 /**
61 * MLD Capabilities subfield
62 */
64 {
65 uint8_t maxNSimultaneousLinks : 4; //!< Max number of simultaneous links
66 uint8_t srsSupport : 1; //!< SRS Support
67 uint8_t tidToLinkMappingSupport : 2; //!< TID-To-Link Mapping Negotiation Supported
68 uint8_t freqSepForStrApMld : 5; //!< Frequency Separation For STR/AP MLD Type Indication
69 uint8_t aarSupport : 1; //!< AAR Support
70 };
71
72 /**
73 * Subfields
74 */
75 Mac48Address m_mldMacAddress; //!< MLD MAC Address
76 std::optional<uint8_t> m_linkIdInfo; //!< Link ID Info
77 std::optional<uint8_t> m_bssParamsChangeCount; //!< BSS Parameters Change Count
78 std::optional<MediumSyncDelayInfo>
79 m_mediumSyncDelayInfo; //!< Medium Synchronization Delay Information
80 std::optional<EmlCapabilities> m_emlCapabilities; //!< EML Capabilities
81 std::optional<MldCapabilities> m_mldCapabilities; //!< MLD Capabilities
82
83 /**
84 * Get the Presence Bitmap subfield of the Common Info field
85 *
86 * \return the Presence Bitmap subfield of the Common Info field
87 */
88 uint16_t GetPresenceBitmap() const;
89 /**
90 * Get the size of the serialized Common Info field
91 *
92 * \return the size of the serialized Common Info field
93 */
94 uint8_t GetSize() const;
95 /**
96 * Serialize the Common Info field
97 *
98 * \param start iterator pointing to where the Common Info field should be written to
99 */
100 void Serialize(Buffer::Iterator& start) const;
101 /**
102 * Deserialize the Common Info field
103 *
104 * \param start iterator pointing to where the Common Info field should be read from
105 * \param presence the value of the Presence Bitmap field indicating which subfields
106 * are present in the Common Info field
107 * \return the number of bytes read
108 */
109 uint8_t Deserialize(Buffer::Iterator start, uint16_t presence);
110
111 /**
112 * \param delay the EMLSR Padding delay
113 * \return the encoded value for the EMLSR Padding Delay subfield
114 */
115 static uint8_t EncodeEmlsrPaddingDelay(Time delay);
116 /**
117 * \param value the value for the EMLSR Padding Delay subfield
118 * \return the corresponding EMLSR Padding delay
119 */
120 static Time DecodeEmlsrPaddingDelay(uint8_t value);
121
122 /**
123 * \param delay the EMLSR Transition delay
124 * \return the encoded value for the EMLSR Transition Delay subfield
125 */
126 static uint8_t EncodeEmlsrTransitionDelay(Time delay);
127 /**
128 * \param value the value for the EMLSR Transition Delay subfield
129 * \return the corresponding EMLSR Transition delay
130 */
131 static Time DecodeEmlsrTransitionDelay(uint8_t value);
132
133 /**
134 * Set the Medium Synchronization Duration subfield of the Medium Synchronization
135 * Delay Information in the Common Info field.
136 *
137 * \param delay the timer duration (must be a multiple of 32 microseconds)
138 */
139 void SetMediumSyncDelayTimer(Time delay);
140 /**
141 * Set the Medium Synchronization OFDM ED Threshold subfield of the Medium Synchronization
142 * Delay Information in the Common Info field.
143 *
144 * \param threshold the threshold in dBm (ranges from -72 to -62 dBm)
145 */
146 void SetMediumSyncOfdmEdThreshold(int8_t threshold);
147 /**
148 * Set the Medium Synchronization Maximum Number of TXOPs subfield of the Medium Synchronization
149 * Delay Information in the Common Info field. A value of zero indicates no limit on the
150 * maximum number of TXOPs.
151 *
152 * \param nTxops the maximum number of TXOPs a non-AP STA is allowed to attempt to
153 * initiate while the MediumSyncDelay timer is running at a non-AP STA
154 */
155 void SetMediumSyncMaxNTxops(uint8_t nTxops);
156 /**
157 * Get the Medium Synchronization Duration subfield of the Medium Synchronization Delay
158 * Information in the Common Info field. Make sure that the Medium Synchronization Delay
159 * Information subfield is present.
160 *
161 * \return the timer duration
162 */
164 /**
165 * Get the Medium Synchronization OFDM ED Threshold in dBm. Make sure that the Medium
166 * Synchronization Delay Information subfield is present.
167 *
168 * \return the threshold in dBm
169 */
171 /**
172 * Get the maximum number of TXOPs a non-AP STA is allowed to attempt to initiate
173 * while the MediumSyncDelay timer is running at a non-AP STA. If no value is returned,
174 * no limit is imposed on the number of TXOPs. Make sure that the Medium Synchronization
175 * Delay Information subfield is present.
176 *
177 * \return the number of TXOPs
178 */
179 std::optional<uint8_t> GetMediumSyncMaxNTxops() const;
180};
181
182/**
183 * \brief The Multi-Link element
184 * \ingroup wifi
185 *
186 * The 802.11be Multi-Link element (see Sec.9.4.2.312 of 802.11be D1.5)
187 *
188 * TODO:
189 * - Add setters/getters for EML Capabilities and MLD Capabilities subfields of
190 * the Common Info field of the Basic variant of a Multi-Link Element.
191 * - Add support for variants other than the Basic one.
192 */
194{
195 public:
196 /**
197 * \ingroup wifi
198 * Multi-Link element variants
199 *
200 * Note that Multi-Link element variants can be added to this enum only when
201 * the corresponding CommonInfo variant is implemented. This is because the
202 * index of m_commonInfo, which is a std::variant, is casted to this enum and
203 * the index of the "unset" variant must correspond to UNSET.
204 */
205 enum Variant : uint8_t
206 {
208 // PROBE_REQUEST_VARIANT,
209 // RECONFIGURATION_VARIANT,
210 // TDLS_VARIANT,
211 // PRIORITY_ACCESS_VARIANT,
212 UNSET
213 };
214
215 /**
216 * \ingroup wifi
217 * SubElement IDs
218 */
219 enum SubElementId : uint8_t
220 {
222 };
223
224 /// Typedef for structure holding a reference to the containing frame
225 using ContainingFrame = std::variant<std::monostate,
226 std::reference_wrapper<const MgtAssocRequestHeader>,
227 std::reference_wrapper<const MgtReassocRequestHeader>,
228 std::reference_wrapper<const MgtAssocResponseHeader>>;
229
230 /**
231 * Construct a Multi-Link Element with no variant set.
232 *
233 * \param frame the management frame containing this Multi-Link Element
234 */
236 /**
237 * Constructor
238 *
239 * \param variant the Multi-Link element variant (cannot be UNSET)
240 * \param frame the management frame containing this Multi-Link Element
241 */
242 MultiLinkElement(Variant variant, ContainingFrame frame = {});
243
244 WifiInformationElementId ElementId() const override;
245 WifiInformationElementId ElementIdExt() const override;
246 uint16_t GetInformationFieldSize() const override;
247 void SerializeInformationField(Buffer::Iterator start) const override;
248 uint16_t DeserializeInformationField(Buffer::Iterator start, uint16_t length) override;
249
250 /**
251 * Get the Multi-Link element variant
252 *
253 * \return the Multi-Link element variant
254 */
255 Variant GetVariant() const;
256
257 /// \return a reference to the Common Info field (the MLE variant must be Basic)
258 CommonInfoBasicMle& GetCommonInfoBasic();
259
260 /// \return a const reference to the Common Info field (the MLE variant must be Basic)
261 const CommonInfoBasicMle& GetCommonInfoBasic() const;
262
263 /**
264 * Set the MLD MAC Address subfield in the Common Info field. Make sure that
265 * this is a Basic Multi-Link Element.
266 *
267 * \param address the MLD MAC address
268 */
269 void SetMldMacAddress(Mac48Address address);
270
271 /**
272 * Return the MLD MAC Address subfield in the Common Info field. Make sure that
273 * this is a Basic Multi-Link Element.
274 *
275 * \return the MLD MAC Address subfield in the Common Info field.
276 */
277 Mac48Address GetMldMacAddress() const;
278
279 /**
280 * Set the Link ID Info subfield in the Common Info field. Make sure that
281 * this is a Basic Multi-Link Element.
282 *
283 * \param linkIdInfo the link ID information
284 */
285 void SetLinkIdInfo(uint8_t linkIdInfo);
286 /**
287 * Return true if the Link ID Info subfield in the Common Info field is present
288 * and false otherwise. Make sure that this is a Basic Multi-Link Element.
289 *
290 * \return true if the Link ID Info subfield in the Common Info field is present
291 * and false otherwise
292 */
293 bool HasLinkIdInfo() const;
294 /**
295 * Return the Link ID Info subfield in the Common Info field. Make sure that
296 * this is a Basic Multi-Link Element and the Link ID Info subfield is present.
297 *
298 * \return the Link ID Info subfield in the Common Info field
299 */
300 uint8_t GetLinkIdInfo() const;
301
302 /**
303 * Set the BSS Parameters Change Count subfield in the Common Info field. Make sure that
304 * this is a Basic Multi-Link Element.
305 *
306 * \param count the BSS Parameters Change Count
307 */
308 void SetBssParamsChangeCount(uint8_t count);
309 /**
310 * Return true if the BSS Parameters Change Count subfield in the Common Info field is present
311 * and false otherwise. Make sure that this is a Basic Multi-Link Element.
312 *
313 * \return true if the BSS Parameters Change Count subfield in the Common Info field is present
314 * and false otherwise
315 */
316 bool HasBssParamsChangeCount() const;
317 /**
318 * Return the BSS Parameters Change Count subfield in the Common Info field. Make sure that
319 * this is a Basic Multi-Link Element and the BSS Parameters Change Count subfield is present.
320 *
321 * \return the BSS Parameters Change Count subfield in the Common Info field
322 */
323 uint8_t GetBssParamsChangeCount() const;
324
325 /**
326 * Set the EMLSR Support subfield of the EML Capabilities subfield in the Common Info field
327 * to 1 if EMLSR mode is supported and set it to 0 otherwise. Make sure that this is a Basic
328 * Multi-Link Element.
329 *
330 * \param supported whether EMLSR mode is supported
331 */
332 void SetEmlsrSupported(bool supported);
333 /**
334 * Set the EMLSR Padding Delay subfield of the EML Capabilities subfield in the
335 * Common Info field. Make sure that this is a Basic Multi-Link Element.
336 *
337 * \param delay the EMLSR Padding delay (0us, 32us, 64us, 128us or 256us)
338 */
339 void SetEmlsrPaddingDelay(Time delay);
340 /**
341 * Set the EMLSR Transition Delay subfield of the EML Capabilities subfield in the
342 * Common Info field. Make sure that this is a Basic Multi-Link Element.
343 *
344 * \param delay the EMLSR Transition delay (0us, 16us, 32us, 64us, 128us or 256us)
345 */
346 void SetEmlsrTransitionDelay(Time delay);
347 /**
348 * Set the Transition Timeout subfield of the EML Capabilities subfield in the
349 * Common Info field. Make sure that this is a Basic Multi-Link Element.
350 *
351 * \param timeout the Transition Timeout (0us or 2^n us, with n=7..16)
352 */
353 void SetTransitionTimeout(Time timeout);
354 /**
355 * Return true if the EML Capabilities subfield in the Common Info field is present
356 * and false otherwise. Make sure that this is a Basic Multi-Link Element.
357 *
358 * \return whether the EML Capabilities subfield in the Common Info field is present
359 */
360 bool HasEmlCapabilities() const;
361 /**
362 * Return true if the EMLSR Support subfield of the EML Capabilities subfield in the
363 * Common Info field is set to 1 and false otherwise. Make sure that this is a Basic
364 * Multi-Link Element and the EML Capabilities subfield is present.
365 *
366 * \return whether the EMLSR Support subfield is set to 1
367 */
368 bool IsEmlsrSupported() const;
369 /**
370 * Get the EMLSR Padding Delay subfield of the EML Capabilities subfield in the
371 * Common Info field. Make sure that this is a Basic Multi-Link Element and the
372 * EML Capabilities subfield is present.
373 *
374 * \return the EMLSR Padding Delay
375 */
376 Time GetEmlsrPaddingDelay() const;
377 /**
378 * Get the EMLSR Transition Delay subfield of the EML Capabilities subfield in the
379 * Common Info field. Make sure that this is a Basic Multi-Link Element and the
380 * EML Capabilities subfield is present.
381 *
382 * \return the EMLSR Transition Delay
383 */
384 Time GetEmlsrTransitionDelay() const;
385 /**
386 * Get the Transition Timeout subfield of the EML Capabilities subfield in the
387 * Common Info field. Make sure that this is a Basic Multi-Link Element and the
388 * EML Capabilities subfield is present.
389 *
390 * \return the Transition Timeout
391 */
392 Time GetTransitionTimeout() const;
393
394 mutable ContainingFrame m_containingFrame; //!< reference to the mgt frame containing this MLE
395
396 /**
397 * \ingroup wifi
398 * Per-STA Profile Subelement of Multi-Link element.
399 * See Sec. 9.4.2.312.2.3 of 802.11be D1.5
400 *
401 * The frame body of the management frame included in the Per-STA Profile field
402 * is stored as a (unique) pointer to the Header base class, because we cannot
403 * include mgt-headers.h here (otherwise, we would create a circular dependency).
404 *
405 * TODO:
406 * - complete the implementation of STA Control and STA Info subfields
407 */
409 {
410 public:
411 /**
412 * Constructor
413 *
414 * \param variant the Multi-Link element variant
415 */
417
418 /**
419 * Copy constructor performing a deep copy of the object
420 *
421 * \param perStaProfile the object to copy
422 */
424 /**
425 * Copy assignment operator performing a deep copy of the object
426 *
427 * \param perStaProfile the object to copy-assign
428 * \return a reference to this object
429 */
431 /**
432 * Use default move assignment operator
433 *
434 * \param perStaProfile the object to move-assign
435 * \return a reference to this object
436 */
438
439 WifiInformationElementId ElementId() const override;
440
441 /**
442 * Set the Link ID subfield in the STA Control field
443 *
444 * \param linkId the Link ID value
445 */
446 void SetLinkId(uint8_t linkId);
447 /**
448 * Get the Link ID subfield in the STA Control field
449 *
450 * \return the Link ID subfield in the STA Control field
451 */
452 uint8_t GetLinkId() const;
453
454 /**
455 * Set the Complete Profile flag in the STA Control field
456 */
457 void SetCompleteProfile();
458 /**
459 * \return whether the Complete Profile flag in the STA Control field is set
460 */
461 bool IsCompleteProfileSet() const;
462
463 /**
464 * Set the STA MAC Address subfield in the STA Info field
465 *
466 * \param address the MAC address to set
467 */
468 void SetStaMacAddress(Mac48Address address);
469 /**
470 * Return true if the STA MAC Address subfield in the STA Info field is present
471 *
472 * \return true if the STA MAC Address subfield in the STA Info field is present
473 */
474 bool HasStaMacAddress() const;
475 /**
476 * Get the STA MAC Address subfield in the STA Info field, if present
477 *
478 * \return the STA MAC Address subfield in the STA Info field, if present
479 */
481
482 /**
483 * Include the given (Re)Association Request frame body in the STA Profile field
484 * of this Per-STA Profile subelement
485 *
486 * \param assoc the given (Re)Association Request frame body
487 */
488 void SetAssocRequest(
489 const std::variant<MgtAssocRequestHeader, MgtReassocRequestHeader>& assoc);
490 /** \copydoc SetAssocRequest */
491 void SetAssocRequest(std::variant<MgtAssocRequestHeader, MgtReassocRequestHeader>&& assoc);
492 /**
493 * Return true if an Association Request frame body is included in the
494 * STA Profile field of this Per-STA Profile subelement
495 *
496 * \return true if an Association Request frame body is included
497 */
498 bool HasAssocRequest() const;
499 /**
500 * Return true if a Reassociation Request frame body is included in the
501 * STA Profile field of this Per-STA Profile subelement
502 *
503 * \return true if a Reassociation Request frame body is included
504 */
505 bool HasReassocRequest() const;
506 /**
507 * Get the (Re)Association Request frame body included in the STA Profile
508 * field of this Per-STA Profile subelement
509 *
510 * \return the (Re)Association Request frame body
511 */
513
514 /**
515 * Include the given (Re)Association Response frame body in the STA Profile field
516 * of this Per-STA Profile subelement
517 *
518 * \param assoc the given (Re)Association Response frame body
519 */
520 void SetAssocResponse(const MgtAssocResponseHeader& assoc);
521 /** \copydoc SetAssocResponse */
523 /**
524 * Return true if a (Re)Association Response frame body is included in the
525 * STA Profile field of this Per-STA Profile subelement
526 *
527 * \return true if a (Re)Association Response frame body is included
528 */
529 bool HasAssocResponse() const;
530 /**
531 * Get the (Re)Association Response frame body included in the STA Profile
532 * field of this Per-STA Profile subelement
533 *
534 * \return the (Re)Association Response frame body
535 */
537
538 /**
539 * Get the size in bytes of the serialized STA Info Length subfield of
540 * the STA Info field
541 *
542 * \return the size in bytes of the serialized STA Info Length subfield
543 */
544 uint8_t GetStaInfoLength() const;
545
546 mutable ContainingFrame
547 m_containingFrame; //!< the mgt frame containing this Per-STA Profile
548
549 private:
550 uint16_t GetInformationFieldSize() const override;
551 void SerializeInformationField(Buffer::Iterator start) const override;
552 uint16_t DeserializeInformationField(Buffer::Iterator start, uint16_t length) override;
553
554 Variant m_variant; //!< Multi-Link element variant
555 uint16_t m_staControl; //!< STA Control field
556 Mac48Address m_staMacAddress; //!< STA MAC address
557 std::variant<std::monostate,
558 std::unique_ptr<MgtAssocRequestHeader>,
559 std::unique_ptr<MgtReassocRequestHeader>,
560 std::unique_ptr<MgtAssocResponseHeader>>
561 m_staProfile; /**< STA Profile field, containing the frame body of a frame of the
562 same type as the frame containing the Multi-Link Element */
563 };
564
565 /**
566 * Add a Per-STA Profile Subelement in the Link Info field
567 */
569 /**
570 * Return the number of Per-STA Profile Subelement in the Link Info field
571 *
572 * \return the number of Per-STA Profile Subelement in the Link Info field
573 */
574 std::size_t GetNPerStaProfileSubelements() const;
575 /**
576 * Get a reference to the <i>i</i>-th Per-STA Profile Subelement in the Link Info field
577 *
578 * \param i the index of the Per-STA Profile Subelement in the Link Info field
579 * \return a reference to the <i>i</i>-th Per-STA Profile Subelement in the Link Info field
580 */
582 /**
583 * Get a reference to the <i>i</i>-th Per-STA Profile Subelement in the Link Info field
584 *
585 * \param i the index of the Per-STA Profile Subelement in the Link Info field
586 * \return a reference to the <i>i</i>-th Per-STA Profile Subelement in the Link Info field
587 */
588 const PerStaProfileSubelement& GetPerStaProfile(std::size_t i) const;
589
590 private:
591 /**
592 * Set the variant of this Multi-Link Element
593 *
594 * \param variant the variant of this Multi-Link Element
595 */
596 void SetVariant(Variant variant);
597
598 /// Typedef for structure holding a Common Info field
599 using CommonInfo = std::variant<CommonInfoBasicMle,
600 // TODO Add other variants
601 std::monostate /* UNSET variant*/>;
602
603 CommonInfo m_commonInfo; //!< Common Info field
604
605 /*
606 * Link Info field
607 */
608 std::vector<PerStaProfileSubelement>
609 m_perStaProfileSubelements; //!< Per-STA Profile Subelements
610};
611
612} // namespace ns3
613
614#endif /* MULTI_LINK_ELEMENT_H */
iterator in a Buffer instance
Definition buffer.h:89
an EUI-48 address
Implement the header for management frames of type association and reassociation response.
Simulation virtual time values and global simulation resolution.
Definition nstime.h:94
Information element, as defined in 802.11-2007 standard.
Variant
Multi-Link element variants.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::variant< std::reference_wrapper< MgtAssocRequestHeader >, std::reference_wrapper< MgtReassocRequestHeader > > AssocReqRefVariant
variant holding a reference to a (Re)Association Request
Definition ap-wifi-mac.h:48
uint8_t WifiInformationElementId
This type is used to represent an Information Element ID.
ns3::Time timeout
uint8_t emlsrPaddingDelay
EMLSR Padding Delay.
uint8_t emlsrTransitionDelay
EMLSR Transition Delay.
uint8_t transitionTimeout
Transition Timeout.
Medium Synchronization Delay Information subfield.
uint8_t mediumSyncOfdmEdThreshold
Medium Synchronization OFDM ED Threshold.
uint8_t mediumSyncDuration
Medium Synchronization Duration.
uint8_t mediumSyncMaxNTxops
Medium Synchronization MAximum Number of TXOPs.
uint8_t freqSepForStrApMld
Frequency Separation For STR/AP MLD Type Indication.
uint8_t maxNSimultaneousLinks
Max number of simultaneous links.
uint8_t tidToLinkMappingSupport
TID-To-Link Mapping Negotiation Supported.
Common Info field of the Basic Multi-Link element.
uint16_t GetPresenceBitmap() const
Get the Presence Bitmap subfield of the Common Info field.
uint8_t GetSize() const
Get the size of the serialized Common Info field.
static uint8_t EncodeEmlsrTransitionDelay(Time delay)
static Time DecodeEmlsrTransitionDelay(uint8_t value)
std::optional< EmlCapabilities > m_emlCapabilities
EML Capabilities.
uint8_t Deserialize(Buffer::Iterator start, uint16_t presence)
Deserialize the Common Info field.
std::optional< uint8_t > GetMediumSyncMaxNTxops() const
Get the maximum number of TXOPs a non-AP STA is allowed to attempt to initiate while the MediumSyncDe...
int8_t GetMediumSyncOfdmEdThreshold() const
Get the Medium Synchronization OFDM ED Threshold in dBm.
std::optional< MldCapabilities > m_mldCapabilities
MLD Capabilities.
void SetMediumSyncOfdmEdThreshold(int8_t threshold)
Set the Medium Synchronization OFDM ED Threshold subfield of the Medium Synchronization Delay Informa...
static Time DecodeEmlsrPaddingDelay(uint8_t value)
void Serialize(Buffer::Iterator &start) const
Serialize the Common Info field.
std::optional< MediumSyncDelayInfo > m_mediumSyncDelayInfo
Medium Synchronization Delay Information.
void SetMediumSyncDelayTimer(Time delay)
Set the Medium Synchronization Duration subfield of the Medium Synchronization Delay Information in t...
Time GetMediumSyncDelayTimer() const
Get the Medium Synchronization Duration subfield of the Medium Synchronization Delay Information in t...
Mac48Address m_mldMacAddress
Subfields.
std::optional< uint8_t > m_bssParamsChangeCount
BSS Parameters Change Count.
void SetMediumSyncMaxNTxops(uint8_t nTxops)
Set the Medium Synchronization Maximum Number of TXOPs subfield of the Medium Synchronization Delay I...
std::optional< uint8_t > m_linkIdInfo
Link ID Info.
static uint8_t EncodeEmlsrPaddingDelay(Time delay)