A Discrete-Event Network Simulator
API
wifi-information-element.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2010 Dean Armstrong
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: Dean Armstrong <deanarm@gmail.com>
18 */
19
20#ifndef WIFI_INFORMATION_ELEMENT_H
21#define WIFI_INFORMATION_ELEMENT_H
22
23#include "ns3/header.h"
24
25#include <optional>
26
27namespace ns3
28{
29
43
49#define IE_SSID ((WifiInformationElementId)0)
50#define IE_SUPPORTED_RATES ((WifiInformationElementId)1)
51#define IE_FH_PARAMETER_SET ((WifiInformationElementId)2)
52#define IE_DSSS_PARAMETER_SET ((WifiInformationElementId)3)
53#define IE_CF_PARAMETER_SET ((WifiInformationElementId)4)
54#define IE_TIM ((WifiInformationElementId)5)
55#define IE_IBSS_PARAMETER_SET ((WifiInformationElementId)6)
56#define IE_COUNTRY ((WifiInformationElementId)7)
57#define IE_HOPPING_PATTERN_PARAMETERS ((WifiInformationElementId)8)
58#define IE_HOPPING_PATTERN_TABLE ((WifiInformationElementId)9)
59#define IE_REQUEST ((WifiInformationElementId)10)
60#define IE_BSS_LOAD ((WifiInformationElementId)11)
61#define IE_EDCA_PARAMETER_SET ((WifiInformationElementId)12)
62#define IE_TSPEC ((WifiInformationElementId)13)
63#define IE_TCLAS ((WifiInformationElementId)14)
64#define IE_SCHEDULE ((WifiInformationElementId)15)
65#define IE_CHALLENGE_TEXT ((WifiInformationElementId)16)
66// 17 to 31 are reserved
67#define IE_POWER_CONSTRAINT ((WifiInformationElementId)32)
68#define IE_POWER_CAPABILITY ((WifiInformationElementId)33)
69#define IE_TPC_REQUEST ((WifiInformationElementId)34)
70#define IE_TPC_REPORT ((WifiInformationElementId)35)
71#define IE_SUPPORTED_CHANNELS ((WifiInformationElementId)36)
72#define IE_CHANNEL_SWITCH_ANNOUNCEMENT ((WifiInformationElementId)37)
73#define IE_MEASUREMENT_REQUEST ((WifiInformationElementId)38)
74#define IE_MEASUREMENT_REPORT ((WifiInformationElementId)39)
75#define IE_QUIET ((WifiInformationElementId)40)
76#define IE_IBSS_DFS ((WifiInformationElementId)41)
77#define IE_ERP_INFORMATION ((WifiInformationElementId)42)
78#define IE_TS_DELAY ((WifiInformationElementId)43)
79#define IE_TCLAS_PROCESSING ((WifiInformationElementId)44)
80#define IE_HT_CAPABILITIES ((WifiInformationElementId)45)
81#define IE_QOS_CAPABILITY ((WifiInformationElementId)46)
82// 47 is reserved
83#define IE_RSN ((WifiInformationElementId)48)
84// 49 is reserved
85#define IE_EXTENDED_SUPPORTED_RATES ((WifiInformationElementId)50)
86#define IE_AP_CHANNEL_REPORT ((WifiInformationElementId)51)
87#define IE_NEIGHBOR_REPORT ((WifiInformationElementId)52)
88#define IE_RCPI ((WifiInformationElementId)53)
89#define IE_MOBILITY_DOMAIN ((WifiInformationElementId)54)
90#define IE_FAST_BSS_TRANSITION ((WifiInformationElementId)55)
91#define IE_TIMEOUT_INTERVAL ((WifiInformationElementId)56)
92#define IE_RIC_DATA ((WifiInformationElementId)57)
93#define IE_DSE_REGISTERED_LOCATION ((WifiInformationElementId)58)
94#define IE_SUPPORTED_OPERATING_CLASSES ((WifiInformationElementId)59)
95#define IE_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT ((WifiInformationElementId)60)
96#define IE_HT_OPERATION ((WifiInformationElementId)61)
97#define IE_SECONDARY_CHANNEL_OFFSET ((WifiInformationElementId)62)
98#define IE_BSS_AVERAGE_ACCESS_DELAY ((WifiInformationElementId)63)
99#define IE_ANTENNA ((WifiInformationElementId)64)
100#define IE_RSNI ((WifiInformationElementId)65)
101#define IE_MEASUREMENT_PILOT_TRANSMISSION ((WifiInformationElementId)66)
102#define IE_BSS_AVAILABLE_ADMISSION_CAPACITY ((WifiInformationElementId)67)
103#define IE_BSS_AC_ACCESS_DELAY ((WifiInformationElementId)68)
104#define IE_TIME_ADVERTISEMENT ((WifiInformationElementId)69)
105#define IE_RM_ENABLED_CAPACITIES ((WifiInformationElementId)70)
106#define IE_MULTIPLE_BSSID ((WifiInformationElementId)71)
107#define IE_20_40_BSS_COEXISTENCE ((WifiInformationElementId)72)
108#define IE_20_40_BSS_INTOLERANT_CHANNEL_REPORT ((WifiInformationElementId)73)
109#define IE_OVERLAPPING_BSS_SCAN_PARAMETERS ((WifiInformationElementId)74)
110#define IE_RIC_DESCRIPTOR ((WifiInformationElementId)75)
111#define IE_MANAGEMENT_MIC ((WifiInformationElementId)76)
112// 77 is reserved
113#define IE_EVENT_REQUEST ((WifiInformationElementId)78)
114#define IE_EVENT_REPORT ((WifiInformationElementId)79)
115#define IE_DIAGNOSTIC_REQUEST ((WifiInformationElementId)80)
116#define IE_DIAGNOSTIC_REPORT ((WifiInformationElementId)81)
117#define IE_LOCATION_PARAMETERS ((WifiInformationElementId)82)
118#define IE_NONTRANSMITTED_BSSID_CAPABILITY ((WifiInformationElementId)83)
119#define IE_SSID_LIST ((WifiInformationElementId)84)
120#define IE_MULTIPLE_BSSID_INDEX ((WifiInformationElementId)85)
121#define IE_FMS_DESCRIPTOR ((WifiInformationElementId)86)
122#define IE_FMS_REQUEST ((WifiInformationElementId)87)
123#define IE_FMS_RESPONSE ((WifiInformationElementId)88)
124#define IE_QOS_TRAFFIC_CAPABILITY ((WifiInformationElementId)89)
125#define IE_BSS_MAX_IDLE_PERIOD ((WifiInformationElementId)90)
126#define IE_TFS_REQUEST ((WifiInformationElementId)91)
127#define IE_TFS_RESPONSE ((WifiInformationElementId)92)
128#define IE_WNM_SLEEP_MODE ((WifiInformationElementId)93)
129#define IE_TIM_BROADCAST_REQUEST ((WifiInformationElementId)94)
130#define IE_TIM_BROADCAST_RESPONSE ((WifiInformationElementId)95)
131#define IE_COLLOCATED_INTERFERENCE_REPORT ((WifiInformationElementId)96)
132#define IE_CHANNEL_USAGE ((WifiInformationElementId)97)
133#define IE_TIME_ZONE ((WifiInformationElementId)98)
134#define IE_DMS_REQUEST ((WifiInformationElementId)99)
135#define IE_DMS_RESPONSE ((WifiInformationElementId)100)
136#define IE_LINK_IDENTIFIER ((WifiInformationElementId)101)
137#define IE_WAKEUP_SCHEDULE ((WifiInformationElementId)102)
138// 103 is reserved
139#define IE_CHANNEL_SWITCH_TIMING ((WifiInformationElementId)104)
140#define IE_PTI_CONTROL ((WifiInformationElementId)105)
141#define IE_TPU_BUFFER_STATUS ((WifiInformationElementId)106)
142#define IE_INTERWORKING ((WifiInformationElementId)107)
143#define IE_ADVERTISEMENT_PROTOCOL ((WifiInformationElementId)108)
144#define IE_EXPEDITED_BANDWIDTH_REQUEST ((WifiInformationElementId)109)
145#define IE_QOS_MAP_SET ((WifiInformationElementId)110)
146#define IE_ROAMING_CONSORTIUM ((WifiInformationElementId)111)
147#define IE_EMERGENCY_ALART_IDENTIFIER ((WifiInformationElementId)112)
148#define IE_MESH_CONFIGURATION ((WifiInformationElementId)113)
149#define IE_MESH_ID ((WifiInformationElementId)114)
150#define IE_MESH_LINK_METRIC_REPORT ((WifiInformationElementId)115)
151#define IE_CONGESTION_NOTIFICATION ((WifiInformationElementId)116)
152#define IE_MESH_PEERING_MANAGEMENT ((WifiInformationElementId)117)
153#define IE_MESH_CHANNEL_SWITCH_PARAMETERS ((WifiInformationElementId)118)
154#define IE_MESH_AWAKE_WINDOW ((WifiInformationElementId)119)
155#define IE_BEACON_TIMING ((WifiInformationElementId)120)
156#define IE_MCCAOP_SETUP_REQUEST ((WifiInformationElementId)121)
157#define IE_MCCAOP_SETUP_REPLY ((WifiInformationElementId)122)
158#define IE_MCCAOP_ADVERTISEMENT ((WifiInformationElementId)123)
159#define IE_MCCAOP_TEARDOWN ((WifiInformationElementId)124)
160#define IE_GANN ((WifiInformationElementId)125)
161#define IE_RANN ((WifiInformationElementId)126)
162// 67 to 126 are reserved
163#define IE_EXTENDED_CAPABILITIES ((WifiInformationElementId)127)
164// 128 to 129 are reserved
165#define IE_PREQ ((WifiInformationElementId)130)
166#define IE_PREP ((WifiInformationElementId)131)
167#define IE_PERR ((WifiInformationElementId)132)
168// 133 to 136 are reserved
169#define IE_PROXY_UPDATE ((WifiInformationElementId)137)
170#define IE_PROXY_UPDATE_CONFIRMATION ((WifiInformationElementId)138)
171#define IE_AUTHENTICATED_MESH_PEERING_EXCHANGE ((WifiInformationElementId)139)
172#define IE_MIC ((WifiInformationElementId)140)
173#define IE_DESTINATION_URI ((WifiInformationElementId)141)
174#define IE_UAPSD_COEXISTENCE ((WifiInformationElementId)142)
175#define IE_DMG_WAKEUP_SCHEDULE ((WifiInformationElementId)143)
176#define IE_EXTENDED_SCHEDULE ((WifiInformationElementId)144)
177#define IE_STA_AVAILABILITY ((WifiInformationElementId)145)
178#define IE_DMG_TSPEC ((WifiInformationElementId)146)
179#define IE_NEXT_DMG_ATI ((WifiInformationElementId)147)
180#define IE_DMG_CAPABILITIES ((WifiInformationElementId)148)
181// 149 to 150 are reserved
182#define IE_DMG_OPERATION ((WifiInformationElementId)151)
183#define IE_DMG_BSS_PARAMETER_CHANGE ((WifiInformationElementId)152)
184#define IE_DMG_BEAM_REFINEMENT ((WifiInformationElementId)153)
185#define IE_CHANNEL_MEASUREMENT_FEEDBACK ((WifiInformationElementId)154)
186// 155 to 156 are reserved
187#define IE_AWAKE_WINDOW ((WifiInformationElementId)157)
188#define IE_MULTI_BAND ((WifiInformationElementId)158)
189#define IE_ADDBA_EXTENSION ((WifiInformationElementId)159)
190#define IE_NEXT_PCP_LIST ((WifiInformationElementId)160)
191#define IE_PCP_HANDOVER ((WifiInformationElementId)161)
192#define IE_DMG_LINK_MARGIN ((WifiInformationElementId)162)
193#define IE_SWITCHING_STREAM ((WifiInformationElementId)163)
194#define IE_SESSION_TRANSITION ((WifiInformationElementId)164)
195#define IE_DYNAMIC_TONE_PAIRING_REPORT ((WifiInformationElementId)165)
196#define IE_CLUSTER_REPORT ((WifiInformationElementId)166)
197#define IE_RELAY_CAPABILITIES ((WifiInformationElementId)167)
198#define IE_RELAY_TRANSFER_PARAMETER_SET ((WifiInformationElementId)168)
199#define IE_BEAMLINK_MAINENANCE ((WifiInformationElementId)169)
200// 170 to 171 are reserved
201#define IE_DMG_LINK_ADAPTATION_ACKNOWLEDGMENT ((WifiInformationElementId)172)
202// 173 is reserved
203#define IE_MCCAOP_ADVERTISEMENT_OVERVIEW ((WifiInformationElementId)174)
204#define IE_QUIET_PERIOD_REQUEST ((WifiInformationElementId)175)
205// 176 is reserved
206#define IE_QUIET_PERIOD_RESPONSE ((WifiInformationElementId)177)
207// 178 to 181 are reserved
208#define IE_ECPAC_POLICY ((WifiInformationElementId)182)
209// 183 to 190 are reserved
210#define IE_VHT_CAPABILITIES ((WifiInformationElementId)191)
211#define IE_VHT_OPERATION ((WifiInformationElementId)192)
212#define IE_EXTENDED_BSS_LOAD ((WifiInformationElementId)193)
213#define IE_WIDE_BANDWIDTH_CHANNEL_SWITCH ((WifiInformationElementId)194)
214#define IE_VHT_TRANSMIT_POWER_ENVELOPE ((WifiInformationElementId)195)
215#define IE_CHANNEL_SWITCH_WRAPPER ((WifiInformationElementId)196)
216#define IE_AID ((WifiInformationElementId)197)
217#define IE_QUIET_CHANNEL ((WifiInformationElementId)198)
218#define IE_OPERATING_MODE_NOTIFICATION ((WifiInformationElementId)199)
219#define IE_UPSIM ((WifiInformationElementId)200)
220#define IE_REDUCED_NEIGHBOR_REPORT ((WifiInformationElementId)201)
221// TODO Add 202 to 220. See Table 9-92 of 802.11-2020
222#define IE_VENDOR_SPECIFIC ((WifiInformationElementId)221)
223// TODO Add 222 to 241. See Table 9-92 of 802.11-2020
224#define IE_FRAGMENT ((WifiInformationElementId)242)
225// 243 to 254 are reserved
226#define IE_EXTENSION ((WifiInformationElementId)255)
227
228#define IE_EXT_HE_CAPABILITIES ((WifiInformationElementId)35)
229#define IE_EXT_HE_OPERATION ((WifiInformationElementId)36)
230#define IE_EXT_UORA_PARAMETER_SET ((WifiInformationElementId)37)
231#define IE_EXT_MU_EDCA_PARAMETER_SET ((WifiInformationElementId)38)
232
233#define IE_EXT_MULTI_LINK_ELEMENT ((WifiInformationElementId)107)
234#define IE_EXT_EHT_CAPABILITIES ((WifiInformationElementId)108)
235
279class WifiInformationElement : public SimpleRefCount<WifiInformationElement>
280{
281 public:
282 virtual ~WifiInformationElement();
319 template <typename IE, typename... Args>
320 static Buffer::Iterator DeserializeIfPresent(std::optional<IE>& optElem,
322 Args&&... args);
329 uint16_t GetSerializedSize() const;
330
331 // Each subclass must implement these pure virtual functions:
337
343
344 // In addition, a subclass may optionally override the following...
350 virtual void Print(std::ostream& os) const;
360 virtual bool operator==(const WifiInformationElement& a) const;
361
362 private:
400 virtual uint16_t GetInformationFieldSize() const = 0;
418 virtual uint16_t DeserializeInformationField(Buffer::Iterator start, uint16_t length) = 0;
419};
420
421} // namespace ns3
422
423/***************************************************************
424 * Implementation of the templates declared above.
425 ***************************************************************/
426
427namespace ns3
428{
429
430template <typename IE, typename... Args>
431Buffer::Iterator
434 Args&&... args)
435{
436 optElem = std::nullopt;
437 IE elem(std::forward<Args>(args)...);
438
440 i = elem.DeserializeIfPresent(i);
441
442 if (i.GetDistanceFrom(start) != 0)
443 {
444 // the element is present and has been deserialized
445 optElem = elem;
446 }
447
448 return i;
449}
450
451} // namespace ns3
452
453#endif /* WIFI_INFORMATION_ELEMENT_H */
iterator in a Buffer instance
Definition: buffer.h:100
uint32_t GetDistanceFrom(const Iterator &o) const
Definition: buffer.cc:783
A template-based reference counting class.
Information element, as defined in 802.11-2007 standard.
virtual WifiInformationElementId ElementId() const =0
Get the wifi information element ID.
uint16_t GetSerializedSize() const
Get the size of the serialized IE including Element ID and length fields (for every element this IE i...
Buffer::Iterator Deserialize(Buffer::Iterator i)
Deserialize entire IE (which may possibly be fragmented into multiple elements), which must be presen...
static Buffer::Iterator DeserializeIfPresent(std::optional< IE > &optElem, Buffer::Iterator i, Args &&... args)
Deserialize an entire IE (which may possibly be fragmented into multiple elements) that is optionally...
Buffer::Iterator Serialize(Buffer::Iterator i) const
Serialize entire IE including Element ID and length fields.
virtual uint16_t DeserializeInformationField(Buffer::Iterator start, uint16_t length)=0
Deserialize information (i.e., the body of the IE, not including the Element ID and length octets)
Buffer::Iterator SerializeFragments(Buffer::Iterator i, uint16_t size) const
Serialize an IE that needs to be fragmented.
virtual void Print(std::ostream &os) const
Generate human-readable form of IE.
virtual void SerializeInformationField(Buffer::Iterator start) const =0
Serialize information (i.e., the body of the IE, not including the Element ID and length octets)
virtual uint16_t GetInformationFieldSize() const =0
Length of serialized information (i.e., the length of the body of the IE, not including the Element I...
virtual WifiInformationElementId ElementIdExt() const
Get the wifi information element ID extension.
Buffer::Iterator DoDeserialize(Buffer::Iterator i, uint16_t length)
Deserialize the Information field of an IE.
virtual bool operator==(const WifiInformationElement &a) const
Compare two IEs for equality by ID & Length, and then through memcmp of serialised version.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
uint8_t WifiInformationElementId
This type is used to represent an Information Element ID.
def start()
Definition: core.py:1861