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
39using AssocReqRefVariant = std::variant<std::reference_wrapper<MgtAssocRequestHeader>,
40 std::reference_wrapper<MgtReassocRequestHeader>>;
41
47{
52 {
55 uint8_t mediumSyncMaxNTxops : 4;
56 };
57
62 {
63 uint8_t emlsrSupport : 1;
64 uint8_t emlsrPaddingDelay : 3;
66 uint8_t emlmrSupport : 1;
67 uint8_t emlmrDelay : 3;
68 uint8_t transitionTimeout : 4;
69 };
70
75 {
77 uint8_t srsSupport : 1;
79 uint8_t freqSepForStrApMld : 5;
80 uint8_t aarSupport : 1;
81 };
82
87 std::optional<uint8_t> m_linkIdInfo;
88 std::optional<uint8_t> m_bssParamsChangeCount;
89 std::optional<MediumSyncDelayInfo>
91 std::optional<EmlCapabilities> m_emlCapabilities;
92 std::optional<MldCapabilities> m_mldCapabilities;
93
99 uint16_t GetPresenceBitmap() const;
105 uint8_t GetSize() const;
111 void Serialize(Buffer::Iterator& start) const;
120 uint8_t Deserialize(Buffer::Iterator start, uint16_t presence);
121
126 static uint8_t EncodeEmlsrPaddingDelay(Time delay);
131 static Time DecodeEmlsrPaddingDelay(uint8_t value);
132
137 static uint8_t EncodeEmlsrTransitionDelay(Time delay);
142 static Time DecodeEmlsrTransitionDelay(uint8_t value);
143};
144
157{
158 public:
168 enum Variant : uint8_t
169 {
171 // PROBE_REQUEST_VARIANT,
172 // RECONFIGURATION_VARIANT,
173 // TDLS_VARIANT,
174 // PRIORITY_ACCESS_VARIANT,
175 UNSET
176 };
177
182 enum SubElementId : uint8_t
183 {
185 };
186
188 using ContainingFrame = std::variant<std::monostate,
189 std::reference_wrapper<const MgtAssocRequestHeader>,
190 std::reference_wrapper<const MgtReassocRequestHeader>,
191 std::reference_wrapper<const MgtAssocResponseHeader>>;
192
205 MultiLinkElement(Variant variant, ContainingFrame frame = {});
206
207 WifiInformationElementId ElementId() const override;
208 WifiInformationElementId ElementIdExt() const override;
209 uint16_t GetInformationFieldSize() const override;
210 void SerializeInformationField(Buffer::Iterator start) const override;
211 uint16_t DeserializeInformationField(Buffer::Iterator start, uint16_t length) override;
212
218 Variant GetVariant() const;
219
221 CommonInfoBasicMle& GetCommonInfoBasic();
222
224 const CommonInfoBasicMle& GetCommonInfoBasic() const;
225
232 void SetMldMacAddress(Mac48Address address);
233
240 Mac48Address GetMldMacAddress() const;
241
248 void SetLinkIdInfo(uint8_t linkIdInfo);
256 bool HasLinkIdInfo() const;
263 uint8_t GetLinkIdInfo() const;
264
271 void SetBssParamsChangeCount(uint8_t count);
279 bool HasBssParamsChangeCount() const;
286 uint8_t GetBssParamsChangeCount() const;
287
295 void SetMediumSyncDelayTimer(Time delay);
303 void SetMediumSyncOfdmEdThreshold(int8_t threshold);
312 void SetMediumSyncMaxNTxops(uint8_t nTxops);
321 bool HasMediumSyncDelayInfo() const;
329 Time GetMediumSyncDelayTimer() const;
344 uint8_t GetMediumSyncMaxNTxops() const;
345
353 void SetEmlsrSupported(bool supported);
360 void SetEmlsrPaddingDelay(Time delay);
367 void SetEmlsrTransitionDelay(Time delay);
374 void SetTransitionTimeout(Time timeout);
381 bool HasEmlCapabilities() const;
389 bool IsEmlsrSupported() const;
397 Time GetEmlsrPaddingDelay() const;
405 Time GetEmlsrTransitionDelay() const;
413 Time GetTransitionTimeout() const;
414
416
430 {
431 public:
438
459
460 WifiInformationElementId ElementId() const override;
461
467 void SetLinkId(uint8_t linkId);
473 uint8_t GetLinkId() const;
474
478 void SetCompleteProfile();
482 bool IsCompleteProfileSet() const;
483
489 void SetStaMacAddress(Mac48Address address);
495 bool HasStaMacAddress() const;
502
509 void SetAssocRequest(
510 const std::variant<MgtAssocRequestHeader, MgtReassocRequestHeader>& assoc);
512 void SetAssocRequest(std::variant<MgtAssocRequestHeader, MgtReassocRequestHeader>&& assoc);
519 bool HasAssocRequest() const;
526 bool HasReassocRequest() const;
534
541 void SetAssocResponse(const MgtAssocResponseHeader& assoc);
550 bool HasAssocResponse() const;
558
565 uint8_t GetStaInfoLength() const;
566
567 mutable ContainingFrame
569
570 private:
571 uint16_t GetInformationFieldSize() const override;
572 void SerializeInformationField(Buffer::Iterator start) const override;
573 uint16_t DeserializeInformationField(Buffer::Iterator start, uint16_t length) override;
574
576 uint16_t m_staControl;
578 std::variant<std::monostate,
579 std::unique_ptr<MgtAssocRequestHeader>,
580 std::unique_ptr<MgtReassocRequestHeader>,
581 std::unique_ptr<MgtAssocResponseHeader>>
584 };
585
595 std::size_t GetNPerStaProfileSubelements() const;
609 const PerStaProfileSubelement& GetPerStaProfile(std::size_t i) const;
610
611 private:
617 void SetVariant(Variant variant);
618
620 using CommonInfo = std::variant<CommonInfoBasicMle,
621 // TODO Add other variants
622 std::monostate /* UNSET variant*/>;
623
625
626 /*
627 * Link Info field
628 */
629 std::vector<PerStaProfileSubelement>
631};
632
633} // namespace ns3
634
635#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:338
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< MldCapabilities > m_mldCapabilities
MLD Capabilities.
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.
Mac48Address m_mldMacAddress
Subfields.
std::optional< uint8_t > m_bssParamsChangeCount
BSS Parameters Change Count.
std::optional< uint8_t > m_linkIdInfo
Link ID Info.
static uint8_t EncodeEmlsrPaddingDelay(Time delay)