A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
mgt-action-headers.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2006 INRIA
3 * Copyright (c) 2009 MIRKO BANCHI
4 *
5 * SPDX-License-Identifier: GPL-2.0-only
6 *
7 * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
8 * Mirko Banchi <mk.banchi@gmail.com>
9 */
10
11#ifndef MGT_ACTION_HEADERS_H
12#define MGT_ACTION_HEADERS_H
13
15#include "status-code.h"
16#include "tim.h"
17#include "wifi-opt-field.h"
18#include "wifi-standards.h"
19
20#include "ns3/header.h"
21
22#include <list>
23#include <optional>
24
25namespace ns3
26{
27
28class Packet;
29
30/**
31 * \ingroup wifi
32 *
33 * See IEEE 802.11 chapter 7.3.1.11
34 * Header format: | category: 1 | action value: 1 |
35 *
36 */
38{
39 public:
41 ~WifiActionHeader() override;
42
43 /*
44 * Compatible with table 8-38 IEEE 802.11, Part11, (Year 2012)
45 * Category values - see 802.11-2012 Table 8-38
46 */
47
48 /// CategoryValue enumeration
49 enum CategoryValue : uint8_t // table 9-51 of IEEE 802.11-2020
50 {
52 QOS = 1,
54 PUBLIC = 4,
55 RADIO_MEASUREMENT = 5, // Category: Radio Measurement
56 MESH = 13, // Category: Mesh
57 MULTIHOP = 14, // not used so far
58 SELF_PROTECTED = 15, // Category: Self Protected
59 DMG = 16, // Category: DMG
60 FST = 18, // Category: Fast Session Transfer
61 UNPROTECTED_DMG = 20, // Category: Unprotected DMG
62 PROTECTED_EHT = 37, // Category: Protected EHT
63 // Since vendor specific action has no stationary Action value,the parse process is not
64 // here. Refer to vendor-specific-action in wave module.
66 // values 128 to 255 are illegal
67 };
68
69 /// QosActionValue enumeration
78
79 /**
80 * Block Ack Action field values
81 * See 802.11 Table 8-202
82 */
89
90 /// PublicActionValue enumeration
91 enum PublicActionValue : uint8_t
92 {
96 };
97
98 /// RadioMeasurementActionValue enumeration
108
109 /// MeshActionValue enumeration
110 enum MeshActionValue : uint8_t
111 {
112 LINK_METRIC_REPORT = 0, // Action Value:0 in Category 13: Mesh
113 PATH_SELECTION = 1, // Action Value:1 in Category 13: Mesh
114 PORTAL_ANNOUNCEMENT = 2, // Action Value:2 in Category 13: Mesh
115 CONGESTION_CONTROL_NOTIFICATION = 3, // Action Value:3 in Category 13: Mesh
117 4, // Action Value:4 in Category 13: Mesh MCCA-Setup-Request (not used so far)
119 5, // Action Value:5 in Category 13: Mesh MCCA-Setup-Reply (not used so far)
121 6, // Action Value:6 in Category 13: Mesh MCCA-Advertisement-Request (not used so far)
122 MDAOP_ADVERTISEMENTS = 7, // Action Value:7 in Category 13: Mesh (not used so far)
123 MDAOP_SET_TEARDOWN = 8, // Action Value:8 in Category 13: Mesh (not used so far)
124 TBTT_ADJUSTMENT_REQUEST = 9, // Action Value:9 in Category 13: Mesh (not used so far)
125 TBTT_ADJUSTMENT_RESPONSE = 10, // Action Value:10 in Category 13: Mesh (not used so far)
126 };
127
128 /// MultihopActionValue enumeration
129 enum MultihopActionValue : uint8_t
130 {
131 PROXY_UPDATE = 0, // not used so far
132 PROXY_UPDATE_CONFIRMATION = 1, // not used so far
133 };
134
135 /// SelfProtectedActionValue enumeration
136 enum SelfProtectedActionValue : uint8_t // Category: 15 (Self Protected)
137 {
138 PEER_LINK_OPEN = 1, // Mesh Peering Open
139 PEER_LINK_CONFIRM = 2, // Mesh Peering Confirm
140 PEER_LINK_CLOSE = 3, // Mesh Peering Close
141 GROUP_KEY_INFORM = 4, // Mesh Group Key Inform
142 GROUP_KEY_ACK = 5, // Mesh Group Key Acknowledge
143 };
144
145 /**
146 * DMG Action field values
147 * See 802.11ad Table 8-281b
148 */
175
176 /**
177 * FST Action field values
178 * See 802.11ad Table 8-281x
179 */
189
190 /**
191 * Unprotected DMG action field values
192 * See 802.11ad Table 8-281ae
193 */
203
204 /**
205 * Protected EHT action field values
206 * See 802.11be D3.0 Table 9-623c
207 */
221
222 /**
223 * typedef for union of different ActionValues
224 */
238
239 /**
240 * Set action for this Action header.
241 *
242 * \param type category
243 * \param action action
244 */
245 void SetAction(CategoryValue type, ActionValue action);
246
247 /**
248 * Return the category value.
249 *
250 * \return CategoryValue
251 */
253 /**
254 * Return the action value.
255 *
256 * \return ActionValue
257 */
258 ActionValue GetAction() const;
259
260 /**
261 * Peek an Action header from the given packet.
262 *
263 * \param pkt the given packet
264 * \return the category value and the action value in the peeked Action header
265 */
266 static std::pair<CategoryValue, ActionValue> Peek(Ptr<const Packet> pkt);
267
268 /**
269 * Remove an Action header from the given packet.
270 *
271 * \param pkt the given packet
272 * \return the category value and the action value in the removed Action header
273 */
274 static std::pair<CategoryValue, ActionValue> Remove(Ptr<Packet> pkt);
275
276 /**
277 * Register this type.
278 * \return The TypeId.
279 */
280 static TypeId GetTypeId();
281 TypeId GetInstanceTypeId() const override;
282 void Print(std::ostream& os) const override;
283 uint32_t GetSerializedSize() const override;
284 void Serialize(Buffer::Iterator start) const override;
285 uint32_t Deserialize(Buffer::Iterator start) override;
286
287 private:
288 uint8_t m_category; //!< Category of the action
289 uint8_t m_actionValue; //!< Action value
290};
291
292/**
293 * \ingroup wifi
294 * Implement the header for management frames of type Add Block Ack request.
295 */
297{
298 public:
299 /**
300 * Register this type.
301 * \return The TypeId.
302 */
303 static TypeId GetTypeId();
304 TypeId GetInstanceTypeId() const override;
305 void Print(std::ostream& os) const override;
306 uint32_t GetSerializedSize() const override;
307 void Serialize(Buffer::Iterator start) const override;
308 uint32_t Deserialize(Buffer::Iterator start) override;
309
310 /**
311 * Enable delayed BlockAck.
312 */
313 void SetDelayedBlockAck();
314 /**
315 * Enable immediate BlockAck
316 */
318 /**
319 * Set Traffic ID (TID).
320 *
321 * \param tid traffic ID
322 */
323 void SetTid(uint8_t tid);
324 /**
325 * Set timeout.
326 *
327 * \param timeout timeout
328 */
329 void SetTimeout(uint16_t timeout);
330 /**
331 * Set buffer size.
332 *
333 * \param size buffer size
334 */
335 void SetBufferSize(uint16_t size);
336 /**
337 * Set the starting sequence number.
338 *
339 * \param seq the starting sequence number
340 */
341 void SetStartingSequence(uint16_t seq);
342 /**
343 * Enable or disable A-MSDU support.
344 *
345 * \param supported enable or disable A-MSDU support
346 */
347 void SetAmsduSupport(bool supported);
348
349 /**
350 * Return the starting sequence number.
351 *
352 * \return the starting sequence number
353 */
354 uint16_t GetStartingSequence() const;
355 /**
356 * Return the Traffic ID (TID).
357 *
358 * \return TID
359 */
360 uint8_t GetTid() const;
361 /**
362 * Return whether the Block Ack policy is immediate Block Ack.
363 *
364 * \return true if immediate Block Ack is being used, false otherwise
365 */
366 bool IsImmediateBlockAck() const;
367 /**
368 * Return the timeout.
369 *
370 * \return timeout
371 */
372 uint16_t GetTimeout() const;
373 /**
374 * Return the buffer size.
375 *
376 * \return the buffer size.
377 */
378 uint16_t GetBufferSize() const;
379 /**
380 * Return whether A-MSDU capability is supported.
381 *
382 * \return true is A-MSDU is supported, false otherwise
383 */
384 bool IsAmsduSupported() const;
385
386 private:
387 /**
388 * Return the raw parameter set.
389 *
390 * \return the raw parameter set
391 */
392 uint16_t GetParameterSet() const;
393 /**
394 * Set the parameter set from the given raw value.
395 *
396 * \param params raw parameter set value
397 */
398 void SetParameterSet(uint16_t params);
399 /**
400 * Return the raw sequence control.
401 *
402 * \return the raw sequence control
403 */
404 uint16_t GetStartingSequenceControl() const;
405 /**
406 * Set sequence control with the given raw value.
407 *
408 * \param seqControl the raw sequence control
409 */
410 void SetStartingSequenceControl(uint16_t seqControl);
411
412 uint8_t m_dialogToken{1}; //!< Not used for now
413 uint8_t m_amsduSupport{1}; //!< Flag if A-MSDU is supported
414 uint8_t m_policy{1}; //!< Block Ack policy
415 uint8_t m_tid{0}; //!< Traffic ID
416 uint16_t m_bufferSize{0}; //!< Buffer size
417 uint16_t m_timeoutValue{0}; //!< Timeout
418 uint16_t m_startingSeq{0}; //!< Starting sequence number
419};
420
421/**
422 * \ingroup wifi
423 * Implement the header for management frames of type Add Block Ack response.
424 */
426{
427 public:
428 /**
429 * Register this type.
430 * \return The TypeId.
431 */
432 static TypeId GetTypeId();
433 TypeId GetInstanceTypeId() const override;
434 void Print(std::ostream& os) const override;
435 uint32_t GetSerializedSize() const override;
436 void Serialize(Buffer::Iterator start) const override;
437 uint32_t Deserialize(Buffer::Iterator start) override;
438
439 /**
440 * Enable delayed BlockAck.
441 */
442 void SetDelayedBlockAck();
443 /**
444 * Enable immediate BlockAck.
445 */
447 /**
448 * Set Traffic ID (TID).
449 *
450 * \param tid traffic ID
451 */
452 void SetTid(uint8_t tid);
453 /**
454 * Set timeout.
455 *
456 * \param timeout timeout
457 */
458 void SetTimeout(uint16_t timeout);
459 /**
460 * Set buffer size.
461 *
462 * \param size buffer size
463 */
464 void SetBufferSize(uint16_t size);
465 /**
466 * Set the status code.
467 *
468 * \param code the status code
469 */
470 void SetStatusCode(StatusCode code);
471 /**
472 * Enable or disable A-MSDU support.
473 *
474 * \param supported enable or disable A-MSDU support
475 */
476 void SetAmsduSupport(bool supported);
477
478 /**
479 * Return the status code.
480 *
481 * \return the status code
482 */
484 /**
485 * Return the Traffic ID (TID).
486 *
487 * \return TID
488 */
489 uint8_t GetTid() const;
490 /**
491 * Return whether the Block Ack policy is immediate Block Ack.
492 *
493 * \return true if immediate Block Ack is being used, false otherwise
494 */
495 bool IsImmediateBlockAck() const;
496 /**
497 * Return the timeout.
498 *
499 * \return timeout
500 */
501 uint16_t GetTimeout() const;
502 /**
503 * Return the buffer size.
504 *
505 * \return the buffer size.
506 */
507 uint16_t GetBufferSize() const;
508 /**
509 * Return whether A-MSDU capability is supported.
510 *
511 * \return true is A-MSDU is supported, false otherwise
512 */
513 bool IsAmsduSupported() const;
514
515 private:
516 /**
517 * Return the raw parameter set.
518 *
519 * \return the raw parameter set
520 */
521 uint16_t GetParameterSet() const;
522 /**
523 * Set the parameter set from the given raw value.
524 *
525 * \param params raw parameter set value
526 */
527 void SetParameterSet(uint16_t params);
528
529 uint8_t m_dialogToken{1}; //!< Not used for now
530 StatusCode m_code{}; //!< Status code
531 uint8_t m_amsduSupport{1}; //!< Flag if A-MSDU is supported
532 uint8_t m_policy{1}; //!< Block ACK policy
533 uint8_t m_tid{0}; //!< Traffic ID
534 uint16_t m_bufferSize{0}; //!< Buffer size
535 uint16_t m_timeoutValue{0}; //!< Timeout
536};
537
538/**
539 * \ingroup wifi
540 * Implement the header for management frames of type Delete Block Ack.
541 */
542class MgtDelBaHeader : public Header
543{
544 public:
545 /**
546 * Register this type.
547 * \return The TypeId.
548 */
549 static TypeId GetTypeId();
550
551 TypeId GetInstanceTypeId() const override;
552 void Print(std::ostream& os) const override;
553 uint32_t GetSerializedSize() const override;
554 void Serialize(Buffer::Iterator start) const override;
555 uint32_t Deserialize(Buffer::Iterator start) override;
556
557 /**
558 * Check if the initiator bit in the DELBA is set.
559 *
560 * \return true if the initiator bit in the DELBA is set,
561 * false otherwise
562 */
563 bool IsByOriginator() const;
564 /**
565 * Return the Traffic ID (TID).
566 *
567 * \return TID
568 */
569 uint8_t GetTid() const;
570 /**
571 * Set Traffic ID (TID).
572 *
573 * \param tid traffic ID
574 */
575 void SetTid(uint8_t tid);
576 /**
577 * Set the initiator bit in the DELBA.
578 */
579 void SetByOriginator();
580 /**
581 * Un-set the initiator bit in the DELBA.
582 */
583 void SetByRecipient();
584
585 private:
586 /**
587 * Return the raw parameter set.
588 *
589 * \return the raw parameter set
590 */
591 uint16_t GetParameterSet() const;
592 /**
593 * Set the parameter set from the given raw value.
594 *
595 * \param params raw parameter set value
596 */
597 void SetParameterSet(uint16_t params);
598
599 uint16_t m_initiator{0}; //!< initiator
600 uint16_t m_tid{0}; //!< Traffic ID
601 uint16_t m_reasonCode{1}; //!< Not used for now. Always set to 1: "Unspecified reason"
602};
603
604/**
605 * \ingroup wifi
606 * Implement the header for Action frames of type EML Operating Mode Notification.
607 */
608class MgtEmlOmn : public Header
609{
610 public:
611 MgtEmlOmn() = default;
612
613 /**
614 * Register this type.
615 * \return The TypeId.
616 */
617 static TypeId GetTypeId();
618 TypeId GetInstanceTypeId() const override;
619 void Print(std::ostream& os) const override;
620 uint32_t GetSerializedSize() const override;
621 void Serialize(Buffer::Iterator start) const override;
622 uint32_t Deserialize(Buffer::Iterator start) override;
623
624 /**
625 * EML Control field.
626 */
628 {
629 uint8_t emlsrMode : 1; //!< EMLSR Mode
630 uint8_t emlmrMode : 1; //!< EMLMR Mode
631 uint8_t emlsrParamUpdateCtrl : 1; //!< EMLSR Parameter Update Control
632 uint8_t : 5; //!< reserved
633 std::optional<uint16_t> linkBitmap; //!< EMLSR/EMLMR Link Bitmap
634 std::optional<uint8_t> mcsMapCountCtrl; //!< MCS Map Count Control
635 // TODO Add EMLMR Supported MCS And NSS Set subfield when EMLMR is supported
636 };
637
638 /**
639 * EMLSR Parameter Update field.
640 */
642 {
643 uint8_t paddingDelay : 3; //!< EMLSR Padding Delay
644 uint8_t transitionDelay : 3; //!< EMLSR Transition Delay
645 };
646
647 /**
648 * Set the bit position in the link bitmap corresponding to the given link.
649 *
650 * \param linkId the ID of the given link
651 */
652 void SetLinkIdInBitmap(uint8_t linkId);
653 /**
654 * \return the ID of the links whose bit position in the link bitmap is set to 1
655 */
656 std::list<uint8_t> GetLinkBitmap() const;
657
658 uint8_t m_dialogToken{0}; //!< Dialog Token
659 EmlControl m_emlControl{}; //!< EML Control field
660 std::optional<EmlsrParamUpdate> m_emlsrParamUpdate{}; //!< EMLSR Parameter Update field
661};
662
663/**
664 * \ingroup wifi
665 * Implement the FILS (Fast Initial Link Setup) action frame.
666 * See sec. 9.6.7.36 of IEEE 802.11-2020 and IEEE 802.11ax-2021.
667 */
668class FilsDiscHeader : public Header
669{
670 public:
672
673 /// \return the object TypeId
674 static TypeId GetTypeId();
675 TypeId GetInstanceTypeId() const override;
676 void Print(std::ostream& os) const override;
677 uint32_t GetSerializedSize() const override;
678 void Serialize(Buffer::Iterator start) const override;
679 uint32_t Deserialize(Buffer::Iterator start) override;
680
681 /**
682 * Set the SSID field.
683 *
684 * \param ssid the SSID
685 */
686 void SetSsid(const std::string& ssid);
687
688 /// \return the SSID
689 const std::string& GetSsid() const;
690
691 /// \return size of FILS Discovery Information field in octets
693
694 /// \return size of non-optional subfields in octets
696
697 /// \brief sets value of Length subfield
698 void SetLengthSubfield();
699
700 /// FILS Discovery Frame Control subfield of FILS Discovery Information field
701 struct FilsDiscFrameControl // 2 octets
702 {
703 uint8_t m_ssidLen : 5 {0}; ///< SSID Length
704 bool m_capPresenceInd{false}; ///< Capability Presence Indicator
705 uint8_t m_shortSsidInd : 1 {0}; ///< Short SSID Indicator (not supported)
706 bool m_apCsnPresenceInd{false}; ///< AP-CSN Presence Indicator
707 bool m_anoPresenceInd{false}; ///< ANO Presence Indicator
708 bool m_chCntrFreqSeg1PresenceInd{false}; ///< Channel Center Frequency Segment 1
709 ///< Presence Indicator
710 bool m_primChPresenceInd{false}; ///< Primary Channel Presence Indicator
711 uint8_t m_rsnInfoPresenceInd : 1 {0}; ///< RSN info Presence Indicator (not supported)
712 bool m_lenPresenceInd{false}; ///< Length Presence Indicator
713 uint8_t m_mdPresenceInd : 1 {0}; ///< MD Presence Indicator (not supported)
714 uint8_t m_reserved : 2 {0}; ///< Reserved Bits
715
716 /**
717 * \brief serialize content to a given buffer
718 * \param start given input buffer iterator
719 */
720 void Serialize(Buffer::Iterator& start) const;
721
722 /**
723 * \brief read content from a given buffer
724 * \param start input buffer iterator
725 * \return number of read octets
726 */
728 };
729
730 /// FD Capability subfield of FILS Discovery Information field
731 struct FdCapability // 2 octets
732 {
733 uint8_t m_ess : 1 {0}; ///< ESS
734 uint8_t m_privacy : 1 {0}; ///< Privacy
735 uint8_t m_chWidth : 3 {0}; ///< BSS Operating Channel Width
736 uint8_t m_maxNss : 3 {0}; ///< Maximum Number of Spatial Streams
737 uint8_t m_reserved : 1 {0}; ///< Reserved Bit
738 uint8_t m_multiBssidPresenceInd : 1 {0}; ///< Multiple BSSIDs Presence Indicator
739 uint8_t m_phyIdx : 3 {0}; ///< PHY Index
740 uint8_t m_minRate : 3 {0}; ///< FILS Minimum Rate
741
742 /**
743 * \brief Set the BSS Operating Channel Width field based on the operating channel width
744 * \param width the operating channel width
745 */
746 void SetOpChannelWidth(MHz_u width);
747
748 /// \return the operating channel width encoded in the BSS Operating Channel Width field
749 MHz_u GetOpChannelWidth() const;
750
751 /**
752 * \brief Set the Maximum Number of Spatial Streams field
753 * \param maxNss the maximum number of supported spatial streams
754 */
755 void SetMaxNss(uint8_t maxNss);
756
757 /**
758 * Note that this function returns 5 if the maximum number of supported spatial streams
759 * is greater than 4.
760 *
761 * \return the maximum number of supported spatial streams
762 */
763 uint8_t GetMaxNss() const;
764
765 /**
766 * \brief Set the PHY Index field based on the given wifi standard
767 * \param standard the wifi standard
768 */
769 void SetStandard(WifiStandard standard);
770
771 /**
772 * \param band the PHY band in which the device is operating (needed to distinguish
773 * between 802.11a and 802.11g)
774 * \return the wifi standard encoded in the PHY Index field
775 */
777
778 /**
779 * \brief serialize content to a given buffer
780 * \param start given input buffer iterator
781 */
782 void Serialize(Buffer::Iterator& start) const;
783
784 /**
785 * \brief read content from a given buffer
786 * \param start input buffer iterator
787 * \return number of read octets
788 */
790 };
791
792 // FILS Discovery Frame Information field
793 // TODO: add optional FD-RSN and Mobility domain subfields
794 FilsDiscFrameControl m_frameCtl; ///< FILS Discovery Frame Control
795 uint64_t m_timeStamp{0}; ///< Timestamp
796 uint16_t m_beaconInt{0}; ///< Beacon Interval in TU (1024 us)
799 std::optional<uint8_t> m_opClass; ///< Operating Class
802 m_apConfigSeqNum; ///< AP Configuration Sequence Number (AP-CSN)
804 OptFieldWithPresenceInd<uint8_t> m_chCntrFreqSeg1; ///< Channel Center Frequency Segment 1
805
806 // (Optional) Information Elements
807 std::optional<ReducedNeighborReport> m_rnr; ///< Reduced Neighbor Report
808 std::optional<Tim> m_tim; ///< Traffic Indication Map element
809
810 private:
811 std::string m_ssid; ///< SSID
812};
813
814/**
815 * \brief Stream insertion operator.
816 *
817 * \param os the output stream
818 * \param control the Fils Discovery Frame Control field
819 * \returns a reference to the stream
820 */
821std::ostream& operator<<(std::ostream& os, const FilsDiscHeader::FilsDiscFrameControl& control);
822
823/**
824 * \brief Stream insertion operator.
825 *
826 * \param os the output stream
827 * \param capability the Fils Discovery Frame Capability field
828 * \returns a reference to the stream
829 */
830std::ostream& operator<<(std::ostream& os, const FilsDiscHeader::FdCapability& capability);
831
832} // namespace ns3
833
834#endif /* MGT_ACTION_HEADERS_H */
iterator in a Buffer instance
Definition buffer.h:89
Implement the FILS (Fast Initial Link Setup) action frame.
uint16_t m_beaconInt
Beacon Interval in TU (1024 us)
std::optional< ReducedNeighborReport > m_rnr
Reduced Neighbor Report.
OptFieldWithPresenceInd< uint8_t > m_chCntrFreqSeg1
Channel Center Frequency Segment 1.
uint32_t GetSerializedSize() const override
OptFieldWithPresenceInd< uint8_t > m_primaryCh
Primary Channel.
OptFieldWithPresenceInd< uint8_t > m_accessNetOpt
Access Network Options.
const std::string & GetSsid() const
void SetSsid(const std::string &ssid)
Set the SSID field.
uint32_t Deserialize(Buffer::Iterator start) override
FilsDiscFrameControl m_frameCtl
FILS Discovery Frame Control.
OptFieldWithPresenceInd< FdCapability > m_fdCap
FD Capability.
std::optional< uint8_t > m_opClass
Operating Class.
void Print(std::ostream &os) const override
uint32_t GetSizeNonOptSubfields() const
OptFieldWithPresenceInd< uint8_t > m_len
Length.
uint32_t GetInformationFieldSize() const
uint64_t m_timeStamp
Timestamp.
void SetLengthSubfield()
sets value of Length subfield
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
void Serialize(Buffer::Iterator start) const override
std::string m_ssid
SSID.
OptFieldWithPresenceInd< uint8_t > m_apConfigSeqNum
AP Configuration Sequence Number (AP-CSN)
std::optional< Tim > m_tim
Traffic Indication Map element.
Protocol header serialization and deserialization.
Definition header.h:33
Implement the header for management frames of type Add Block Ack request.
void SetParameterSet(uint16_t params)
Set the parameter set from the given raw value.
uint16_t m_startingSeq
Starting sequence number.
void Serialize(Buffer::Iterator start) const override
uint16_t GetStartingSequenceControl() const
Return the raw sequence control.
void SetStartingSequenceControl(uint16_t seqControl)
Set sequence control with the given raw value.
static TypeId GetTypeId()
Register this type.
uint8_t m_amsduSupport
Flag if A-MSDU is supported.
void SetBufferSize(uint16_t size)
Set buffer size.
void Print(std::ostream &os) const override
void SetDelayedBlockAck()
Enable delayed BlockAck.
uint8_t m_dialogToken
Not used for now.
uint16_t GetParameterSet() const
Return the raw parameter set.
uint32_t Deserialize(Buffer::Iterator start) override
void SetAmsduSupport(bool supported)
Enable or disable A-MSDU support.
void SetImmediateBlockAck()
Enable immediate BlockAck.
uint16_t GetBufferSize() const
Return the buffer size.
uint16_t m_bufferSize
Buffer size.
uint16_t GetTimeout() const
Return the timeout.
uint8_t GetTid() const
Return the Traffic ID (TID).
uint16_t GetStartingSequence() const
Return the starting sequence number.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
uint32_t GetSerializedSize() const override
bool IsAmsduSupported() const
Return whether A-MSDU capability is supported.
bool IsImmediateBlockAck() const
Return whether the Block Ack policy is immediate Block Ack.
void SetTimeout(uint16_t timeout)
Set timeout.
void SetTid(uint8_t tid)
Set Traffic ID (TID).
uint8_t m_policy
Block Ack policy.
void SetStartingSequence(uint16_t seq)
Set the starting sequence number.
Implement the header for management frames of type Add Block Ack response.
uint16_t m_bufferSize
Buffer size.
void SetTid(uint8_t tid)
Set Traffic ID (TID).
uint32_t GetSerializedSize() const override
uint8_t m_amsduSupport
Flag if A-MSDU is supported.
uint8_t m_dialogToken
Not used for now.
void Serialize(Buffer::Iterator start) const override
void SetParameterSet(uint16_t params)
Set the parameter set from the given raw value.
uint16_t GetBufferSize() const
Return the buffer size.
bool IsAmsduSupported() const
Return whether A-MSDU capability is supported.
StatusCode GetStatusCode() const
Return the status code.
void SetTimeout(uint16_t timeout)
Set timeout.
uint8_t m_policy
Block ACK policy.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
void SetBufferSize(uint16_t size)
Set buffer size.
void Print(std::ostream &os) const override
void SetStatusCode(StatusCode code)
Set the status code.
uint8_t GetTid() const
Return the Traffic ID (TID).
bool IsImmediateBlockAck() const
Return whether the Block Ack policy is immediate Block Ack.
void SetAmsduSupport(bool supported)
Enable or disable A-MSDU support.
uint16_t GetParameterSet() const
Return the raw parameter set.
uint32_t Deserialize(Buffer::Iterator start) override
uint16_t GetTimeout() const
Return the timeout.
void SetDelayedBlockAck()
Enable delayed BlockAck.
void SetImmediateBlockAck()
Enable immediate BlockAck.
static TypeId GetTypeId()
Register this type.
StatusCode m_code
Status code.
Implement the header for management frames of type Delete Block Ack.
static TypeId GetTypeId()
Register this type.
void SetTid(uint8_t tid)
Set Traffic ID (TID).
uint32_t Deserialize(Buffer::Iterator start) override
void SetByRecipient()
Un-set the initiator bit in the DELBA.
void Print(std::ostream &os) const override
uint16_t m_initiator
initiator
void SetParameterSet(uint16_t params)
Set the parameter set from the given raw value.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
uint8_t GetTid() const
Return the Traffic ID (TID).
uint16_t m_reasonCode
Not used for now.
bool IsByOriginator() const
Check if the initiator bit in the DELBA is set.
uint16_t GetParameterSet() const
Return the raw parameter set.
void Serialize(Buffer::Iterator start) const override
uint16_t m_tid
Traffic ID.
uint32_t GetSerializedSize() const override
void SetByOriginator()
Set the initiator bit in the DELBA.
Implement the header for Action frames of type EML Operating Mode Notification.
void Serialize(Buffer::Iterator start) const override
uint32_t GetSerializedSize() const override
void SetLinkIdInBitmap(uint8_t linkId)
Set the bit position in the link bitmap corresponding to the given link.
EmlControl m_emlControl
EML Control field.
uint32_t Deserialize(Buffer::Iterator start) override
void Print(std::ostream &os) const override
std::optional< EmlsrParamUpdate > m_emlsrParamUpdate
EMLSR Parameter Update field.
MgtEmlOmn()=default
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
uint8_t m_dialogToken
Dialog Token.
std::list< uint8_t > GetLinkBitmap() const
static TypeId GetTypeId()
Register this type.
OptFieldWithPresenceInd is a class modeling an optional field (in an Information Element,...
Smart pointer class similar to boost::intrusive_ptr.
Status code for association response.
Definition status-code.h:21
a unique identifier for an interface.
Definition type-id.h:48
See IEEE 802.11 chapter 7.3.1.11 Header format: | category: 1 | action value: 1 |.
uint32_t GetSerializedSize() const override
CategoryValue
CategoryValue enumeration.
uint8_t m_category
Category of the action.
DmgActionValue
DMG Action field values See 802.11ad Table 8-281b.
RadioMeasurementActionValue
RadioMeasurementActionValue enumeration.
SelfProtectedActionValue
SelfProtectedActionValue enumeration.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
FstActionValue
FST Action field values See 802.11ad Table 8-281x.
UnprotectedDmgActionValue
Unprotected DMG action field values See 802.11ad Table 8-281ae.
uint8_t m_actionValue
Action value.
QosActionValue
QosActionValue enumeration.
uint32_t Deserialize(Buffer::Iterator start) override
BlockAckActionValue
Block Ack Action field values See 802.11 Table 8-202.
static std::pair< CategoryValue, ActionValue > Peek(Ptr< const Packet > pkt)
Peek an Action header from the given packet.
void Print(std::ostream &os) const override
MultihopActionValue
MultihopActionValue enumeration.
ProtectedEhtActionValue
Protected EHT action field values See 802.11be D3.0 Table 9-623c.
static std::pair< CategoryValue, ActionValue > Remove(Ptr< Packet > pkt)
Remove an Action header from the given packet.
static TypeId GetTypeId()
Register this type.
void SetAction(CategoryValue type, ActionValue action)
Set action for this Action header.
MeshActionValue
MeshActionValue enumeration.
void Serialize(Buffer::Iterator start) const override
PublicActionValue
PublicActionValue enumeration.
CategoryValue GetCategory() const
Return the category value.
ActionValue GetAction() const
Return the action value.
WifiStandard
Identifies the IEEE 802.11 specifications that a Wifi device can be configured to use.
WifiPhyBand
Identifies the PHY band.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition angles.cc:148
ns3::Time timeout
FD Capability subfield of FILS Discovery Information field.
WifiStandard GetStandard(WifiPhyBand band) const
void SetOpChannelWidth(MHz_u width)
Set the BSS Operating Channel Width field based on the operating channel width.
uint8_t GetMaxNss() const
Note that this function returns 5 if the maximum number of supported spatial streams is greater than ...
uint8_t m_minRate
FILS Minimum Rate.
void SetMaxNss(uint8_t maxNss)
Set the Maximum Number of Spatial Streams field.
uint8_t m_chWidth
BSS Operating Channel Width.
uint8_t m_multiBssidPresenceInd
Multiple BSSIDs Presence Indicator.
uint8_t m_maxNss
Maximum Number of Spatial Streams.
void Serialize(Buffer::Iterator &start) const
serialize content to a given buffer
uint32_t Deserialize(Buffer::Iterator start)
read content from a given buffer
void SetStandard(WifiStandard standard)
Set the PHY Index field based on the given wifi standard.
FILS Discovery Frame Control subfield of FILS Discovery Information field.
bool m_apCsnPresenceInd
AP-CSN Presence Indicator.
bool m_chCntrFreqSeg1PresenceInd
Channel Center Frequency Segment 1 Presence Indicator.
uint8_t m_shortSsidInd
Short SSID Indicator (not supported)
void Serialize(Buffer::Iterator &start) const
serialize content to a given buffer
uint8_t m_rsnInfoPresenceInd
RSN info Presence Indicator (not supported)
bool m_capPresenceInd
Capability Presence Indicator.
uint8_t m_mdPresenceInd
MD Presence Indicator (not supported)
uint32_t Deserialize(Buffer::Iterator start)
read content from a given buffer
bool m_lenPresenceInd
Length Presence Indicator.
bool m_primChPresenceInd
Primary Channel Presence Indicator.
std::optional< uint8_t > mcsMapCountCtrl
MCS Map Count Control.
uint8_t emlsrParamUpdateCtrl
EMLSR Parameter Update Control.
std::optional< uint16_t > linkBitmap
EMLSR/EMLMR Link Bitmap.
EMLSR Parameter Update field.
uint8_t transitionDelay
EMLSR Transition Delay.
uint8_t paddingDelay
EMLSR Padding Delay.
typedef for union of different ActionValues
UnprotectedDmgActionValue unprotectedDmgAction
unprotected dmg
ProtectedEhtActionValue protectedEhtAction
protected eht
SelfProtectedActionValue selfProtectedAction
self protected
MultihopActionValue multihopAction
multi hop
RadioMeasurementActionValue radioMeasurementAction
radio measurement
BlockAckActionValue blockAck
block ack