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