INET Framework for OMNeT++/OMNEST
inet::ieee80211::Ieee80211MgmtFrameSerializer Class Reference

Converts between Ieee80211MgmtFrame and binary network byte order IEEE 802.11 mgmt frame. More...

#include <Ieee80211MgmtFrameSerializer.h>

Inheritance diagram for inet::ieee80211::Ieee80211MgmtFrameSerializer:
inet::FieldsChunkSerializer inet::ChunkSerializer

Public Member Functions

 Ieee80211MgmtFrameSerializer ()
 
- Public Member Functions inherited from inet::FieldsChunkSerializer
virtual void serialize (MemoryOutputStream &stream, const Ptr< const Chunk > &chunk, b offset, b length) const override
 Serializes a chunk into a stream by writing the bytes representing the chunk at the end of the stream. More...
 
virtual const Ptr< Chunkdeserialize (MemoryInputStream &stream, const std::type_info &typeInfo) const override
 Deserializes a chunk from a stream by reading the bytes at the current position of the stream. More...
 

Protected Member Functions

virtual void serialize (MemoryOutputStream &stream, const Ptr< const Chunk > &chunk) const override
 Serializes a chunk into a stream by writing all bytes representing the chunk at the end of the stream. More...
 
virtual const Ptr< Chunkdeserialize (MemoryInputStream &stream) const override
 Deserializes a chunk from a stream by reading the bytes at the current position of the stream. More...
 

Additional Inherited Members

- Static Public Attributes inherited from inet::ChunkSerializer
static b totalSerializedLength = b(0)
 
static b totalDeserializedLength = b(0)
 

Detailed Description

Converts between Ieee80211MgmtFrame and binary network byte order IEEE 802.11 mgmt frame.

Constructor & Destructor Documentation

◆ Ieee80211MgmtFrameSerializer()

inet::ieee80211::Ieee80211MgmtFrameSerializer::Ieee80211MgmtFrameSerializer ( )
inline
28 : FieldsChunkSerializer() {}

Member Function Documentation

◆ deserialize()

const Ptr< Chunk > inet::ieee80211::Ieee80211MgmtFrameSerializer::deserialize ( MemoryInputStream stream) const
overrideprotectedvirtual

Deserializes a chunk from a stream by reading the bytes at the current position of the stream.

The current stream position is updated according to the length of the returned chunk.

Implements inet::FieldsChunkSerializer.

259 {
260  switch (0) { // TODO receive and dispatch on type_info parameter
261  case 0xB0: // ST_AUTHENTICATION
262  {
263  auto frame = makeShared<Ieee80211AuthenticationFrame>();
264  stream.readUint16Be();
265  frame->setSequenceNumber(stream.readUint16Be());
266  frame->setStatusCode((Ieee80211StatusCode)stream.readUint16Be());
267  return frame;
268  }
269 
270  case 0xC0: // ST_ST_DEAUTHENTICATION
271  {
272  auto frame = makeShared<Ieee80211DeauthenticationFrame>();
273  frame->setReasonCode((Ieee80211ReasonCode)stream.readUint16Be());
274  return frame;
275  }
276 
277  case 0xA0: // ST_DISASSOCIATION
278  {
279  auto frame = makeShared<Ieee80211DisassociationFrame>();
280  frame->setReasonCode((Ieee80211ReasonCode)stream.readUint16Be());
281  return frame;
282  }
283 
284  case 0x40: // ST_PROBEREQUEST
285  {
286  auto frame = makeShared<Ieee80211ProbeRequestFrame>();
287 
288  char SSID[256];
289  stream.readByte();
290  unsigned int length = stream.readByte();
291  stream.readBytes((uint8_t *)SSID, B(length));
292  SSID[length] = '\0';
293  frame->setSSID(SSID);
294 
295  Ieee80211SupportedRatesElement supRat;
296  stream.readByte();
297  supRat.numRates = stream.readByte();
298  for (int i = 0; i < supRat.numRates; i++)
299  supRat.rate[i] = (double)(stream.readByte() & 0x7F) * 0.5;
300  frame->setSupportedRates(supRat);
301  return frame;
302  }
303 
304  case 0x00: // ST_ASSOCIATIONREQUEST
305  {
306  auto frame = makeShared<Ieee80211AssociationRequestFrame>();
307 
308  char SSID[256];
309  stream.readByte();
310  unsigned int length = stream.readByte();
311  stream.readBytes((uint8_t *)SSID, B(length));
312  SSID[length] = '\0';
313  frame->setSSID(SSID);
314 
315  Ieee80211SupportedRatesElement supRat;
316  stream.readByte();
317  supRat.numRates = stream.readByte();
318  for (int i = 0; i < supRat.numRates; i++)
319  supRat.rate[i] = (double)(stream.readByte() & 0x7F) * 0.5;
320  frame->setSupportedRates(supRat);
321  return frame;
322  }
323 
324  case 0x02: // ST_REASSOCIATIONREQUEST
325  {
326  auto frame = makeShared<Ieee80211ReassociationRequestFrame>();
327  stream.readUint16Be();
328  stream.readUint16Be();
329 
330  frame->setCurrentAP(stream.readMacAddress());
331 
332  char SSID[256];
333  stream.readByte();
334  unsigned int length = stream.readByte();
335  stream.readBytes((uint8_t *)SSID, B(length));
336  SSID[length] = '\0';
337  frame->setSSID(SSID);
338 
339  Ieee80211SupportedRatesElement supRat;
340  stream.readByte();
341  supRat.numRates = stream.readByte();
342  for (int i = 0; i < supRat.numRates; i++)
343  supRat.rate[i] = (double)(stream.readByte() & 0x7F) * 0.5;
344  frame->setSupportedRates(supRat);
345  return frame;
346  }
347 
348  case 0x01: // ST_ASSOCIATIONRESPONSE
349  {
350  auto frame = makeShared<Ieee80211AssociationResponseFrame>();
351  stream.readUint16Be();
352  frame->setStatusCode((Ieee80211StatusCode)stream.readUint16Be());
353  frame->setAid(stream.readUint16Be());
354 
355  Ieee80211SupportedRatesElement supRat;
356  stream.readByte();
357  supRat.numRates = stream.readByte();
358  for (int i = 0; i < supRat.numRates; i++)
359  supRat.rate[i] = (double)(stream.readByte() & 0x7F) * 0.5;
360  frame->setSupportedRates(supRat);
361  return frame;
362  }
363 
364  case 0x03: // ST_REASSOCIATIONRESPONSE
365  {
366  auto frame = makeShared<Ieee80211ReassociationResponseFrame>();
367  stream.readUint16Be();
368  frame->setStatusCode((Ieee80211StatusCode)stream.readUint16Be());
369  frame->setAid(stream.readUint16Be());
370 
371  Ieee80211SupportedRatesElement supRat;
372  stream.readByte();
373  supRat.numRates = stream.readByte();
374  for (int i = 0; i < supRat.numRates; i++)
375  supRat.rate[i] = (double)(stream.readByte() & 0x7F) * 0.5;
376  frame->setSupportedRates(supRat);
377  return frame;
378  }
379 
380  case 0x80: // ST_BEACON
381  {
382  auto frame = makeShared<Ieee80211BeaconFrame>();
383 
384  simtime_t timetstamp;
385  timetstamp.setRaw(stream.readUint64Be()); // TODO store timestamp
386 
387  frame->setBeaconInterval(SimTime((int64_t)stream.readUint16Be() * 1024, SIMTIME_US));
388  stream.readUint16Be(); // Capability
389 
390  char SSID[256];
391  stream.readByte();
392  unsigned int length = stream.readByte();
393  stream.readBytes((uint8_t *)SSID, B(length));
394  SSID[length] = '\0';
395  frame->setSSID(SSID);
396 
397  Ieee80211SupportedRatesElement supRat;
398  stream.readByte();
399  supRat.numRates = stream.readByte();
400  for (int i = 0; i < supRat.numRates; i++)
401  supRat.rate[i] = (double)(stream.readByte() & 0x7F) * 0.5;
402  frame->setSupportedRates(supRat);
403  return frame;
404  }
405 
406  case 0x50: // ST_PROBERESPONSE
407  {
408  auto frame = makeShared<Ieee80211ProbeResponseFrame>();
409 
410  simtime_t timestamp;
411  timestamp.setRaw(stream.readUint64Be()); // TODO store timestamp
412 
413  frame->setBeaconInterval(SimTime((int64_t)stream.readUint16Be() * 1024, SIMTIME_US));
414  stream.readUint16Be();
415 
416  char SSID[256];
417  stream.readByte();
418  unsigned int length = stream.readByte();
419  stream.readBytes((uint8_t *)SSID, B(length));
420  SSID[length] = '\0';
421  frame->setSSID(SSID);
422 
423  Ieee80211SupportedRatesElement supRat;
424  stream.readByte();
425  supRat.numRates = stream.readByte();
426  for (int i = 0; i < supRat.numRates; i++)
427  supRat.rate[i] = (double)(stream.readByte() & 0x7F) * 0.5;
428  frame->setSupportedRates(supRat);
429  return frame;
430  }
431 
432  default:
433  throw cRuntimeError("Cannot deserialize frame");
434  }
435 }

◆ serialize()

void inet::ieee80211::Ieee80211MgmtFrameSerializer::serialize ( MemoryOutputStream stream,
const Ptr< const Chunk > &  chunk 
) const
overrideprotectedvirtual

Serializes a chunk into a stream by writing all bytes representing the chunk at the end of the stream.

Implements inet::FieldsChunkSerializer.

29 {
30  if (auto authenticationFrame = dynamicPtrCast<const Ieee80211AuthenticationFrame>(chunk)) {
31 // type = ST_AUTHENTICATION;
32  // 1 Authentication algorithm number
33  stream.writeUint16Be(0);
34  // 2 Authentication transaction sequence number
35  stream.writeUint16Be(authenticationFrame->getSequenceNumber());
36  // 3 Status code The status code information is reserved in certain Authentication frames as defined in Table 7-17.
37  stream.writeUint16Be(authenticationFrame->getStatusCode());
38  // 4 Challenge text The challenge text information is present only in certain Authentication frames as defined in Table 7-17.
39  // Last Vendor Specific One or more vendor-specific information elements may appear in this frame. This information element follows all other information elements.
40  }
41  else if (auto deauthenticationFrame = dynamicPtrCast<const Ieee80211DeauthenticationFrame>(chunk)) {
42 // type = ST_DEAUTHENTICATION;
43  stream.writeUint16Be(deauthenticationFrame->getReasonCode());
44  }
45  else if (auto disassociationFrame = dynamicPtrCast<const Ieee80211DisassociationFrame>(chunk)) {
46 // type = ST_DISASSOCIATION;
47  stream.writeUint16Be(disassociationFrame->getReasonCode());
48  }
49  else if (auto probeRequestFrame = dynamicPtrCast<const Ieee80211ProbeRequestFrame>(chunk)) {
50 // type = ST_PROBEREQUEST;
51  // 1 SSID
52  const char *SSID = probeRequestFrame->getSSID();
53  unsigned int length = strlen(SSID);
54  stream.writeByte(0); // FIXME dummy, what is it?
55  stream.writeByte(length);
56  stream.writeBytes((uint8_t *)SSID, B(length));
57  // 2 Supported rates
58  const Ieee80211SupportedRatesElement& supportedRates = probeRequestFrame->getSupportedRates();
59  stream.writeByte(1);
60  stream.writeByte(supportedRates.numRates);
61  for (int i = 0; i < supportedRates.numRates; i++) {
62  uint8_t rate = ceil(supportedRates.rate[i] / 0.5);
63  // rate |= 0x80 if rate contained in the BSSBasicRateSet parameter
64  stream.writeByte(rate);
65  }
66  // 3 Request information May be included if dot11MultiDomainCapabilityEnabled is true.
67  // 4 Extended Supported Rates The Extended Supported Rates element is present whenever there are more than eight supported rates, and it is optional otherwise.
68  // Last Vendor Specific One or more vendor-specific information elements may appear in this frame. This information element follows all other information elements.
69  }
70  else if (auto associationRequestFrame = dynamicPtrCast<const Ieee80211AssociationRequestFrame>(chunk)) {
71 // type = ST_ASSOCIATIONREQUEST;
72  // 1 Capability
73  stream.writeUint16Be(0); // FIXME
74  // 2 Listen interval
75  stream.writeUint16Be(0); // FIXME
76  // 3 SSID
77  const char *SSID = associationRequestFrame->getSSID();
78  unsigned int length = strlen(SSID);
79  stream.writeByte(0); // FIXME dummy, what is it?
80  stream.writeByte(length);
81  stream.writeBytes((uint8_t *)SSID, B(length));
82  // 4 Supported rates
83  const Ieee80211SupportedRatesElement& supportedRates = associationRequestFrame->getSupportedRates();
84  stream.writeByte(1);
85  stream.writeByte(supportedRates.numRates);
86  for (int i = 0; i < supportedRates.numRates; i++) {
87  uint8_t rate = ceil(supportedRates.rate[i] / 0.5);
88  // rate |= 0x80 if rate contained in the BSSBasicRateSet parameter
89  stream.writeByte(rate);
90  }
91  // 5 Extended Supported Rates The Extended Supported Rates element is present whenever there are more than eight supported rates, and it is optional otherwise.
92  // 6 Power Capability The Power Capability element shall be present if dot11SpectrumManagementRequired is true.
93  // 7 Supported Channel The Supported Channels element shall be present if dot11SpectrumManagementRequired is true.
94  // 8 RSN The RSN information element is only present within Association Request frames generated by STAs that have dot11RSNAEnabled set to TRUE.
95  // 9 QoS Capability The QoS Capability element is present when dot11QosOption- Implemented is true.
96  // Last Vendor Specific One or more vendor-specific information elements may appear in this frame. This information element follows all other information elements.
97  }
98  else if (auto reassociationRequestFrame = dynamicPtrCast<const Ieee80211ReassociationRequestFrame>(chunk)) {
99 // type = ST_REASSOCIATIONREQUEST;
100  // 1 Capability
101  stream.writeUint16Be(0); // FIXME
102  // 2 Listen interval
103  stream.writeUint16Be(0); // FIXME
104  // 3 Current AP address
105  stream.writeMacAddress(reassociationRequestFrame->getCurrentAP());
106  // 4 SSID
107  const char *SSID = reassociationRequestFrame->getSSID();
108  unsigned int length = strlen(SSID);
109  // FIXME buffer.writeByte(buf + packetLength, ???);
110  stream.writeByte(0); // FIXME
111  stream.writeByte(length);
112  stream.writeBytes((uint8_t *)SSID, B(length));
113  // 5 Supported rates
114  const Ieee80211SupportedRatesElement& supportedRates = reassociationRequestFrame->getSupportedRates();
115  stream.writeByte(1);
116  stream.writeByte(supportedRates.numRates);
117  for (int i = 0; i < supportedRates.numRates; i++) {
118  uint8_t rate = ceil(supportedRates.rate[i] / 0.5);
119  // rate |= 0x80 if rate contained in the BSSBasicRateSet parameter
120  stream.writeByte(rate);
121  }
122  // 6 Extended Supported Rates The Extended Supported Rates element is present whenever there are more than eight supported rates, and it is optional otherwise.
123  // 7 Power Capability The Power Capability element shall be present if dot11SpectrumManagementRequired is true.
124  // 8 Supported Channels The Supported Channels element shall be present if dot11SpectrumManagementRequired is true.
125  // 9 RSN The RSN information element is only present within Reassociation Request frames generated by STAs that have dot11RSNAEnabled set to TRUE.
126  // 10 QoS Capability The QoS Capability element is present when dot11QosOption- Implemented is true.
127  // Last Vendor Specific One or more vendor-specific information elements may appear in this frame. This information element follows all other information elements.
128  }
129  else if (auto associationResponseFrame = dynamicPtrCast<const Ieee80211AssociationResponseFrame>(chunk)) {
130 // type = ST_ASSOCIATIONRESPONSE;
131  // 1 Capability
132  stream.writeUint16Be(0); // FIXME
133  // 2 Status code
134  stream.writeUint16Be(associationResponseFrame->getStatusCode());
135  // 3 AID
136  stream.writeUint16Be(associationResponseFrame->getAid());
137  // 4 Supported rates
138  stream.writeByte(1);
139  stream.writeByte(associationResponseFrame->getSupportedRates().numRates);
140  for (int i = 0; i < associationResponseFrame->getSupportedRates().numRates; i++) {
141  uint8_t rate = ceil(associationResponseFrame->getSupportedRates().rate[i] / 0.5);
142  // rate |= 0x80 if rate contained in the BSSBasicRateSet parameter
143  stream.writeByte(rate);
144  }
145  // 5 Extended Supported Rates The Extended Supported Rates element is present whenever there are more than eight supported rates, and it is optional otherwise.
146  // 6 EDCA Parameter Set
147  // Last Vendor Specific One or more vendor-specific information elements may appear in this frame. This information element follows all other information elements.
148  }
149  else if (auto reassociationResponseFrame = dynamicPtrCast<const Ieee80211ReassociationResponseFrame>(chunk)) {
150 // type = ST_REASSOCIATIONRESPONSE;
151  // 1 Capability
152  stream.writeUint16Be(0); // FIXME
153  // 2 Status code
154  stream.writeUint16Be(reassociationResponseFrame->getStatusCode());
155  // 3 AID
156  stream.writeUint16Be(reassociationResponseFrame->getAid());
157  // 4 Supported rates
158  stream.writeByte(1);
159  stream.writeByte(reassociationResponseFrame->getSupportedRates().numRates);
160  for (int i = 0; i < reassociationResponseFrame->getSupportedRates().numRates; i++) {
161  uint8_t rate = ceil(reassociationResponseFrame->getSupportedRates().rate[i] / 0.5);
162  // rate |= 0x80 if rate contained in the BSSBasicRateSet parameter
163  stream.writeByte(rate);
164  }
165  // 5 Extended Supported Rates The Extended Supported Rates element is present whenever there are more than eight supported rates, and it is optional otherwise.
166  // 6 EDCA Parameter Set
167  // Last Vendor Specific One or more vendor-specific information elements may appear in this frame. This information element follows all other information elements.
168  }
169  else if (auto beaconFrame = dynamicPtrCast<const Ieee80211BeaconFrame>(chunk)) {
170 // type = ST_BEACON;
171  // 1 Timestamp
172  stream.writeUint64Be(simTime().raw()); // FIXME
173  // 2 Beacon interval
174  stream.writeUint16Be((uint16_t)(beaconFrame->getBeaconInterval().inUnit(SIMTIME_US) / 1024));
175  // 3 Capability
176  stream.writeUint16Be(0); // FIXME set capability
177  // 4 Service Set Identifier (SSID)
178  const char *SSID = beaconFrame->getSSID();
179  unsigned int length = strlen(SSID);
180  stream.writeByte(0); // FIXME
181  stream.writeByte(length);
182  stream.writeBytes((uint8_t *)SSID, B(length));
183  // 5 Supported rates
184  stream.writeByte(1);
185  stream.writeByte(beaconFrame->getSupportedRates().numRates);
186  for (int i = 0; i < beaconFrame->getSupportedRates().numRates; i++) {
187  uint8_t rate = ceil(beaconFrame->getSupportedRates().rate[i] / 0.5);
188  // rate |= 0x80 if rate contained in the BSSBasicRateSet parameter
189  stream.writeByte(rate);
190  }
191  // 6 Frequency-Hopping (FH) Parameter Set The FH Parameter Set information element is present within Beacon frames generated by STAs using FH PHYs.
192  // 7 DS Parameter Set The DS Parameter Set information element is present within Beacon frames generated by STAs using Clause 15, Clause 18, and Clause 19 PHYs.
193  // 8 CF Parameter Set The CF Parameter Set information element is present only within Beacon frames generated by APs supporting a PCF.
194  // 9 IBSS Parameter Set The IBSS Parameter Set information element is present only within Beacon frames generated by STAs in an IBSS.
195  // 10 Traffic indication map (TIM) The TIM information element is present only within Beacon frames generated by APs.
196  // 11 Country The Country information element shall be present when dot11MultiDomainCapabilityEnabled is true or dot11SpectrumManagementRequired is true.
197  // 12 FH Parameters FH Parameters as specified in 7.3.2.10 may be included if dot11MultiDomainCapabilityEnabled is true.
198  // 13 FH Pattern Table FH Pattern Table information as specified in 7.3.2.11 may be included if dot11MultiDomainCapabilityEnabled is true.
199  // 14 Power Constraint Power Constraint element shall be present if dot11SpectrumManagementRequired is true.
200  // 15 Channel Switch Announcement Channel Switch Announcement element may be present if dot11SpectrumManagementRequired is true.
201  // 16 Quiet Quiet element may be present if dot11SpectrumManagementRequired is true.
202  // 17 IBSS DFS IBSS DFS element shall be present if dot11SpectrumManagementRequired is true in an IBSS.
203  // 18 TPC Report TPC Report element shall be present if dot11SpectrumManagementRequired is true.
204  // 19 ERP Information The ERP Information element is present within Beacon frames generated by STAs using extended rate PHYs (ERPs) defined in Clause 19 and is optionally present in other cases.
205  // 20 Extended Supported Rates The Extended Supported Rates element is present whenever there are more than eight supported rates, and it is optional otherwise.
206  // 21 RSN The RSN information element shall be present within Beacon frames generated by STAs that have dot11RSNAEnabled set to TRUE.
207  // 22 BSS Load The BSS Load element is present when dot11QosOption- Implemented and dot11QBSSLoadImplemented are both true.
208  // 23 EDCA Parameter Set The EDCA Parameter Set element is present when dot11QosOptionImplemented is true and the QoS Capability element is not present.
209  // 24 QoS Capability The QoS Capability element is present when dot11QosOption- Implemented is true and EDCA Parameter Set element is not present.
210  // Last Vendor Specific One or more vendor-specific information elements may appear in this frame. This information element follows all other information elements.
211  }
212  else if (auto probeResponseFrame = dynamicPtrCast<const Ieee80211ProbeResponseFrame>(chunk)) {
213 // type = ST_PROBERESPONSE;
214  // 1 Timestamp
215  stream.writeUint64Be(simTime().raw()); // FIXME
216  // 2 Beacon interval
217  stream.writeUint16Be((uint16_t)(probeResponseFrame->getBeaconInterval().inUnit(SIMTIME_US) / 1024));
218  // 3 Capability
219  stream.writeUint16Be(0); // FIXME
220  // 4 SSID
221  const char *SSID = probeResponseFrame->getSSID();
222  unsigned int length = strlen(SSID);
223  stream.writeByte(0); // FIXME
224  stream.writeByte(length);
225  stream.writeBytes((uint8_t *)SSID, B(length));
226  // 5 Supported rates
227  stream.writeByte(1);
228  stream.writeByte(probeResponseFrame->getSupportedRates().numRates);
229  for (int i = 0; i < probeResponseFrame->getSupportedRates().numRates; i++) {
230  uint8_t rate = ceil(probeResponseFrame->getSupportedRates().rate[i] / 0.5);
231  // rate |= 0x80 if rate contained in the BSSBasicRateSet parameter
232  stream.writeByte(rate);
233  }
234  // 6 FH Parameter Set The FH Parameter Set information element is present within Probe Response frames generated by STAs using FH PHYs.
235  // 7 DS Parameter Set The DS Parameter Set information element is present within Probe Response frames generated by STAs using Clause 15, Clause 18, and Clause 19 PHYs.
236  // 8 CF Parameter Set The CF Parameter Set information element is present only within Probe Response frames generated by APs supporting a PCF.
237  // 9 IBSS Parameter Set The IBSS Parameter Set information element is present only within Probe Response frames generated by STAs in an IBSS.
238  // 10 Country Included if dot11MultiDomainCapabilityEnabled or dot11SpectrumManagementRequired is true.
239  // 11 FH Parameters FH Parameters, as specified in 7.3.2.10, may be included if dot11MultiDomainCapabilityEnabled is true.
240  // 12 FH Pattern Table FH Pattern Table information, as specified in 7.3.2.11, may be included if dot11MultiDomainCapabilityEnabled is true.
241  // 13 Power Constraint Shall be included if dot11SpectrumManagementRequired is true.
242  // 14 Channel Switch Announcement May be included if dot11SpectrumManagementRequired is true.
243  // 15 Quiet May be included if dot11SpectrumManagementRequired is true.
244  // 16 IBSS DFS Shall be included if dot11SpectrumManagementRequired is true in an IBSS.
245  // 17 TPC Report Shall be included if dot11SpectrumManagementRequired is true.
246  // 18 ERP Information The ERP Information element is present within Probe Response frames generated by STAs using ERPs and is optionally present in other cases.
247  // 19 Extended Supported Rates The Extended Supported Rates element is present whenever there are more than eight supported rates, and it is optional otherwise.
248  // 20 RSN The RSN information element is only present within Probe Response frames generated by STAs that have dot11RSNA- Enabled set to TRUE.
249  // 21 BSS Load The BSS Load element is present when dot11QosOption- Implemented and dot11QBSSLoadImplemented are both true.
250  // 22 EDCA Parameter Set The EDCA Parameter Set element is present when dot11QosOptionImplemented is true.
251  // Last�1 Vendor Specific One or more vendor-specific information elements may appear in this frame. This information element follows all other information elements, except the Requested Information elements.
252  // Last�n Requested information elements Elements requested by the Request information element of the Probe Request frame.
253  }
254  else
255  throw cRuntimeError("Cannot serialize frame");
256 }

The documentation for this class was generated from the following files:
inet::ieee80211::Ieee80211ReasonCode
Ieee80211ReasonCode
Enum generated from inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrame.msg:53 by opp_msgtool.
Definition: Ieee80211MgmtFrame_m.h:140
inet::ieee80211::Ieee80211StatusCode
Ieee80211StatusCode
Enum generated from inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrame.msg:85 by opp_msgtool.
Definition: Ieee80211MgmtFrame_m.h:195
inet::units::units::B
intscale< b, 1, 8 > B
Definition: Units.h:1168