A Discrete-Event Network Simulator
API
wifi-information-element.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2010 Dean Armstrong
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Dean Armstrong <deanarm@gmail.com>
19  */
20 
21 #ifndef WIFI_INFORMATION_ELEMENT_H
22 #define WIFI_INFORMATION_ELEMENT_H
23 
24 #include "ns3/header.h"
25 
26 namespace ns3 {
27 
40 typedef uint8_t WifiInformationElementId;
41 
42 
48 #define IE_SSID ((WifiInformationElementId)0)
49 #define IE_SUPPORTED_RATES ((WifiInformationElementId)1)
50 #define IE_FH_PARAMETER_SET ((WifiInformationElementId)2)
51 #define IE_DSSS_PARAMETER_SET ((WifiInformationElementId)3)
52 #define IE_CF_PARAMETER_SET ((WifiInformationElementId)4)
53 #define IE_TIM ((WifiInformationElementId)5)
54 #define IE_IBSS_PARAMETER_SET ((WifiInformationElementId)6)
55 #define IE_COUNTRY ((WifiInformationElementId)7)
56 #define IE_HOPPING_PATTERN_PARAMETERS ((WifiInformationElementId)8)
57 #define IE_HOPPING_PATTERN_TABLE ((WifiInformationElementId)9)
58 #define IE_REQUEST ((WifiInformationElementId)10)
59 #define IE_BSS_LOAD ((WifiInformationElementId)11)
60 #define IE_EDCA_PARAMETER_SET ((WifiInformationElementId)12)
61 #define IE_TSPEC ((WifiInformationElementId)13)
62 #define IE_TCLAS ((WifiInformationElementId)14)
63 #define IE_SCHEDULE ((WifiInformationElementId)15)
64 #define IE_CHALLENGE_TEXT ((WifiInformationElementId)16)
65 // 17 to 31 are reserved
66 #define IE_POWER_CONSTRAINT ((WifiInformationElementId)32)
67 #define IE_POWER_CAPABILITY ((WifiInformationElementId)33)
68 #define IE_TPC_REQUEST ((WifiInformationElementId)34)
69 #define IE_TPC_REPORT ((WifiInformationElementId)35)
70 #define IE_SUPPORTED_CHANNELS ((WifiInformationElementId)36)
71 #define IE_CHANNEL_SWITCH_ANNOUNCEMENT ((WifiInformationElementId)37)
72 #define IE_MEASUREMENT_REQUEST ((WifiInformationElementId)38)
73 #define IE_MEASUREMENT_REPORT ((WifiInformationElementId)39)
74 #define IE_QUIET ((WifiInformationElementId)40)
75 #define IE_IBSS_DFS ((WifiInformationElementId)41)
76 #define IE_ERP_INFORMATION ((WifiInformationElementId)42)
77 #define IE_TS_DELAY ((WifiInformationElementId)43)
78 #define IE_TCLAS_PROCESSING ((WifiInformationElementId)44)
79 #define IE_HT_CAPABILITIES ((WifiInformationElementId)45)
80 #define IE_QOS_CAPABILITY ((WifiInformationElementId)46)
81 // 47 is reserved
82 #define IE_RSN ((WifiInformationElementId)48)
83 // 49 is reserved
84 #define IE_EXTENDED_SUPPORTED_RATES ((WifiInformationElementId)50)
85 #define IE_AP_CHANNEL_REPORT ((WifiInformationElementId)51)
86 #define IE_NEIGHBOR_REPORT ((WifiInformationElementId)52)
87 #define IE_RCPI ((WifiInformationElementId)53)
88 #define IE_MOBILITY_DOMAIN ((WifiInformationElementId)54)
89 #define IE_FAST_BSS_TRANSITION ((WifiInformationElementId)55)
90 #define IE_TIMEOUT_INTERVAL ((WifiInformationElementId)56)
91 #define IE_RIC_DATA ((WifiInformationElementId)57)
92 #define IE_DSE_REGISTERED_LOCATION ((WifiInformationElementId)58)
93 #define IE_SUPPORTED_OPERATING_CLASSES ((WifiInformationElementId)59)
94 #define IE_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT ((WifiInformationElementId)60)
95 #define IE_HT_OPERATION ((WifiInformationElementId)61)
96 #define IE_SECONDARY_CHANNEL_OFFSET ((WifiInformationElementId)62)
97 #define IE_BSS_AVERAGE_ACCESS_DELAY ((WifiInformationElementId)63)
98 #define IE_ANTENNA ((WifiInformationElementId)64)
99 #define IE_RSNI ((WifiInformationElementId)65)
100 #define IE_MEASUREMENT_PILOT_TRANSMISSION ((WifiInformationElementId)66)
101 #define IE_BSS_AVAILABLE_ADMISSION_CAPACITY ((WifiInformationElementId)67)
102 #define IE_BSS_AC_ACCESS_DELAY ((WifiInformationElementId)68)
103 #define IE_TIME_ADVERTISEMENT ((WifiInformationElementId)69)
104 #define IE_RM_ENABLED_CAPACITIES ((WifiInformationElementId)70)
105 #define IE_MULTIPLE_BSSID ((WifiInformationElementId)71)
106 #define IE_20_40_BSS_COEXISTENCE ((WifiInformationElementId)72)
107 #define IE_20_40_BSS_INTOLERANT_CHANNEL_REPORT ((WifiInformationElementId)73)
108 #define IE_OVERLAPPING_BSS_SCAN_PARAMETERS ((WifiInformationElementId)74)
109 #define IE_RIC_DESCRIPTOR ((WifiInformationElementId)75)
110 #define IE_MANAGEMENT_MIC ((WifiInformationElementId)76)
111 // 77 is reserved
112 #define IE_EVENT_REQUEST ((WifiInformationElementId)78)
113 #define IE_EVENT_REPORT ((WifiInformationElementId)79)
114 #define IE_DIAGNOSTIC_REQUEST ((WifiInformationElementId)80)
115 #define IE_DIAGNOSTIC_REPORT ((WifiInformationElementId)81)
116 #define IE_LOCATION_PARAMETERS ((WifiInformationElementId)82)
117 #define IE_NONTRANSMITTED_BSSID_CAPABILITY ((WifiInformationElementId)83)
118 #define IE_SSID_LIST ((WifiInformationElementId)84)
119 #define IE_MULTIPLE_BSSID_INDEX ((WifiInformationElementId)85)
120 #define IE_FMS_DESCRIPTOR ((WifiInformationElementId)86)
121 #define IE_FMS_REQUEST ((WifiInformationElementId)87)
122 #define IE_FMS_RESPONSE ((WifiInformationElementId)88)
123 #define IE_QOS_TRAFFIC_CAPABILITY ((WifiInformationElementId)89)
124 #define IE_BSS_MAX_IDLE_PERIOD ((WifiInformationElementId)90)
125 #define IE_TFS_REQUEST ((WifiInformationElementId)91)
126 #define IE_TFS_RESPONSE ((WifiInformationElementId)92)
127 #define IE_WNM_SLEEP_MODE ((WifiInformationElementId)93)
128 #define IE_TIM_BROADCAST_REQUEST ((WifiInformationElementId)94)
129 #define IE_TIM_BROADCAST_RESPONSE ((WifiInformationElementId)95)
130 #define IE_COLLOCATED_INTERFERENCE_REPORT ((WifiInformationElementId)96)
131 #define IE_CHANNEL_USAGE ((WifiInformationElementId)97)
132 #define IE_TIME_ZONE ((WifiInformationElementId)98)
133 #define IE_DMS_REQUEST ((WifiInformationElementId)99)
134 #define IE_DMS_RESPONSE ((WifiInformationElementId)100)
135 #define IE_LINK_IDENTIFIER ((WifiInformationElementId)101)
136 #define IE_WAKEUP_SCHEDULE ((WifiInformationElementId)102)
137 // 103 is reserved
138 #define IE_CHANNEL_SWITCH_TIMING ((WifiInformationElementId)104)
139 #define IE_PTI_CONTROL ((WifiInformationElementId)105)
140 #define IE_TPU_BUFFER_STATUS ((WifiInformationElementId)106)
141 #define IE_INTERWORKING ((WifiInformationElementId)107)
142 #define IE_ADVERTISEMENT_PROTOCOL ((WifiInformationElementId)108)
143 #define IE_EXPEDITED_BANDWIDTH_REQUEST ((WifiInformationElementId)109)
144 #define IE_QOS_MAP_SET ((WifiInformationElementId)110)
145 #define IE_ROAMING_CONSORTIUM ((WifiInformationElementId)111)
146 #define IE_EMERGENCY_ALART_IDENTIFIER ((WifiInformationElementId)112)
147 #define IE_MESH_CONFIGURATION ((WifiInformationElementId)113)
148 #define IE_MESH_ID ((WifiInformationElementId)114)
149 #define IE_MESH_LINK_METRIC_REPORT ((WifiInformationElementId)115)
150 #define IE_CONGESTION_NOTIFICATION ((WifiInformationElementId)116)
151 #define IE_MESH_PEERING_MANAGEMENT ((WifiInformationElementId)117)
152 #define IE_MESH_CHANNEL_SWITCH_PARAMETERS ((WifiInformationElementId)118)
153 #define IE_MESH_AWAKE_WINDOW ((WifiInformationElementId)119)
154 #define IE_BEACON_TIMING ((WifiInformationElementId)120)
155 #define IE_MCCAOP_SETUP_REQUEST ((WifiInformationElementId)121)
156 #define IE_MCCAOP_SETUP_REPLY ((WifiInformationElementId)122)
157 #define IE_MCCAOP_ADVERTISEMENT ((WifiInformationElementId)123)
158 #define IE_MCCAOP_TEARDOWN ((WifiInformationElementId)124)
159 #define IE_GANN ((WifiInformationElementId)125)
160 #define IE_RANN ((WifiInformationElementId)126)
161 // 67 to 126 are reserved
162 #define IE_EXTENDED_CAPABILITIES ((WifiInformationElementId)127)
163 // 128 to 129 are reserved
164 #define IE_PREQ ((WifiInformationElementId)130)
165 #define IE_PREP ((WifiInformationElementId)131)
166 #define IE_PERR ((WifiInformationElementId)132)
167 // 133 to 136 are reserved
168 #define IE_PROXY_UPDATE ((WifiInformationElementId)137)
169 #define IE_PROXY_UPDATE_CONFIRMATION ((WifiInformationElementId)138)
170 #define IE_AUTHENTICATED_MESH_PEERING_EXCHANGE ((WifiInformationElementId)139)
171 #define IE_MIC ((WifiInformationElementId)140)
172 #define IE_DESTINATION_URI ((WifiInformationElementId)141)
173 #define IE_UAPSD_COEXISTENCE ((WifiInformationElementId)142)
174 // 143 to 173 are reserved
175 #define IE_MCCAOP_ADVERTISEMENT_OVERVIEW ((WifiInformationElementId)174)
176 // 175 to 190 are reserved
177 #define IE_VHT_CAPABILITIES ((WifiInformationElementId)191)
178 #define IE_VHT_OPERATION ((WifiInformationElementId)192)
179 #define IE_EXTENDED_BSS_LOAD ((WifiInformationElementId)193)
180 #define IE_WIDE_BANDWIDTH_CHANNEL_SWITCH ((WifiInformationElementId)194)
181 #define IE_VHT_TRANSMIT_POWER_ENVELOPE ((WifiInformationElementId)195)
182 #define IE_CHANNEL_SWITCH_WRAPPER ((WifiInformationElementId)196)
183 #define IE_AID ((WifiInformationElementId)197)
184 #define IE_QUIET_CHANNEL ((WifiInformationElementId)198)
185 #define IE_OPERATING_MODE_NOTIFICATION ((WifiInformationElementId)199)
186 // 200 to 220 are reserved
187 #define IE_VENDOR_SPECIFIC ((WifiInformationElementId)221)
188 // 222 to 255 are reserved
189 #define IE_HE_CAPABILITIES ((WifiInformationElementId)255) //todo: not defined yet in the standard!
190 #define IE_HE_OPERATION ((WifiInformationElementId)255) //todo: not defined yet in the standard!
191 
192 
230 class WifiInformationElement : public SimpleRefCount<WifiInformationElement>
231 {
232 public:
233  virtual ~WifiInformationElement ();
270  uint16_t GetSerializedSize () const;
271 
272  // Each subclass must implement these pure virtual functions:
276  virtual WifiInformationElementId ElementId () const = 0;
285  virtual uint8_t GetInformationFieldSize () const = 0;
293  virtual void SerializeInformationField (Buffer::Iterator start) const = 0;
303  virtual uint8_t DeserializeInformationField (Buffer::Iterator start,
304  uint8_t length) = 0;
305 
306  // In addition, a subclass may optionally override the following...
312  virtual void Print (std::ostream &os) const;
322  virtual bool operator== (WifiInformationElement const & a) const;
323 
324 };
325 
326 } //namespace ns3
327 
328 #endif /* WIFI_INFORMATION_ELEMENT_H */
virtual uint8_t DeserializeInformationField(Buffer::Iterator start, uint8_t length)=0
Deserialize information (i.e., the body of the IE, not including the Element ID and length octets) ...
virtual uint8_t GetInformationFieldSize() const =0
Length of serialized information (i.e., the length of the body of the IE, not including the Element I...
def start()
Definition: core.py:1806
virtual WifiInformationElementId ElementId() const =0
Buffer::Iterator Deserialize(Buffer::Iterator i)
Deserialize entire IE, which must be present.
uint16_t GetSerializedSize() const
Get the size of the serialized IE including Element ID and length fields.
iterator in a Buffer instance
Definition: buffer.h:98
Information element, as defined in 802.11-2007 standardThe IEEE 802.11 standard includes the notion o...
Buffer::Iterator DeserializeIfPresent(Buffer::Iterator i)
Deserialize entire IE if it is present.
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) ...
Every class exported by the ns3 library is enclosed in the ns3 namespace.
virtual void Print(std::ostream &os) const
Generate human-readable form of IE.
uint8_t WifiInformationElementId
This type is used to represent an Information Element ID.
virtual bool operator==(WifiInformationElement const &a) const
Compare two IEs for equality by ID & Length, and then through memcmp of serialised version...
A template-based reference counting class.
Buffer::Iterator Serialize(Buffer::Iterator i) const
Serialize entire IE including Element ID and length fields.