A Discrete-Event Network Simulator
API
ns3::WifiInformationElement Class Referenceabstract

Information element, as defined in 802.11-2007 standard. More...

#include "wifi-information-element.h"

+ Inheritance diagram for ns3::WifiInformationElement:
+ Collaboration diagram for ns3::WifiInformationElement:

Public Member Functions

virtual ~WifiInformationElement ()
 
Buffer::Iterator Deserialize (Buffer::Iterator i)
 Deserialize entire IE (which may possibly be fragmented into multiple elements), which must be present. More...
 
virtual WifiInformationElementId ElementId () const =0
 Get the wifi information element ID. More...
 
virtual WifiInformationElementId ElementIdExt () const
 Get the wifi information element ID extension. More...
 
uint16_t GetSerializedSize () const
 Get the size of the serialized IE including Element ID and length fields (for every element this IE is possibly fragmented into). More...
 
virtual bool operator== (WifiInformationElement const &a) const
 Compare two IEs for equality by ID & Length, and then through memcmp of serialised version. More...
 
virtual void Print (std::ostream &os) const
 Generate human-readable form of IE. More...
 
Buffer::Iterator Serialize (Buffer::Iterator i) const
 Serialize entire IE including Element ID and length fields. More...
 
- Public Member Functions inherited from ns3::SimpleRefCount< WifiInformationElement >
 SimpleRefCount ()
 Default constructor. More...
 
 SimpleRefCount (const SimpleRefCount &o)
 Copy constructor. More...
 
uint32_t GetReferenceCount (void) const
 Get the reference count of the object. More...
 
SimpleRefCountoperator= (const SimpleRefCount &o)
 Assignment operator. More...
 
void Ref (void) const
 Increment the reference count. More...
 
void Unref (void) const
 Decrement the reference count. More...
 

Static Public Member Functions

template<typename IE , typename... Args>
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 present. More...
 

Private Member Functions

Buffer::Iterator DeserializeIfPresent (Buffer::Iterator i)
 Deserialize entire IE (which may possibly be fragmented into multiple elements) if it is present. More...
 
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) More...
 
Buffer::Iterator DoDeserialize (Buffer::Iterator i, uint16_t length)
 Deserialize the Information field of an IE. More...
 
virtual uint16_t GetInformationFieldSize () const =0
 Length of serialized information (i.e., the length of the body of the IE, not including the Element ID and length octets. More...
 
Buffer::Iterator SerializeFragments (Buffer::Iterator i, uint16_t size) const
 Serialize an IE that needs to be fragmented. More...
 
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) More...
 

Detailed Description

Information element, as defined in 802.11-2007 standard.

The IEEE 802.11 standard includes the notion of Information Elements, which are encodings of management information to be communicated between STAs in the payload of various frames of type Management. Information Elements (IEs) have a common format, each starting with a single octet - the Element ID, which indicates the specific type of IE (a type to represent the options here is defined as WifiInformationElementId). The next octet is a length field and encodes the number of octets in the third and final field, which is the IE Information field.

The class ns3::WifiInformationElement provides a base for classes which represent specific Information Elements. This class defines pure virtual methods for serialisation (ns3::WifiInformationElement::SerializeInformationField) and deserialisation (ns3::WifiInformationElement::DeserializeInformationField) of IEs, from or to data members or other objects that simulation objects use to maintain the relevant state.

This class also provides an implementation of the equality operator, which operates by comparing the serialised versions of the two WifiInformationElement objects concerned.

Elements are defined to have a common general format consisting of a 1 octet Element ID field, a 1 octet length field, and a variable-length element-specific information field. Each element is assigned a unique Element ID as defined in this standard. The Length field specifies the number of octets in the Information field.

Fragmentation of an Information Element is handled transparently by the base class. Subclasses can simply serialize/deserialize their data into/from a single large buffer. It is the base class that takes care of splitting serialized data into multiple fragments (when serializing) or reconstructing data from multiple fragments when deserializing.

This class is pure virtual and acts as base for classes which know how to serialize specific IEs.

Definition at line 279 of file wifi-information-element.h.

Constructor & Destructor Documentation

◆ ~WifiInformationElement()

ns3::WifiInformationElement::~WifiInformationElement ( )
virtual

Definition at line 25 of file wifi-information-element.cc.

Member Function Documentation

◆ Deserialize()

Buffer::Iterator ns3::WifiInformationElement::Deserialize ( Buffer::Iterator  i)

Deserialize entire IE (which may possibly be fragmented into multiple elements), which must be present.

The iterator passed in must be pointing at the Element ID (i.e., the very first octet) of the correct type of information element, otherwise this method will generate a fatal error.

Parameters
ian iterator which points to where the IE should be read.
Returns
an iterator

Definition at line 132 of file wifi-information-element.cc.

References DeserializeIfPresent(), ns3::Buffer::Iterator::GetDistanceFrom(), NS_ASSERT, and visualizer.core::start().

Referenced by ns3::dot11s::PeerLinkOpenStart::Deserialize(), ns3::dot11s::PeerLinkConfirmStart::Deserialize(), ns3::MgtReassocRequestHeader::Deserialize(), ns3::MgtAssocResponseHeader::Deserialize(), ns3::MgtProbeRequestHeader::Deserialize(), ns3::MgtProbeResponseHeader::Deserialize(), ns3::MgtAssocRequestHeader::Deserialize(), ns3::MultiLinkElement::DeserializeInformationField(), TestWifiInformationElement::DeserializeInformationField(), and ns3::MeshInformationElementVector::DeserializeSingleIe().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ DeserializeIfPresent() [1/2]

Buffer::Iterator ns3::WifiInformationElement::DeserializeIfPresent ( Buffer::Iterator  i)
private

Deserialize entire IE (which may possibly be fragmented into multiple elements) if it is present.

The iterator passed in must be pointing at the Element ID of an information element. If the Element ID is not the one that the given class is interested in then it will return the same iterator.

Parameters
ian iterator which points to where the IE should be read.
Returns
an iterator

Definition at line 143 of file wifi-information-element.cc.

References DoDeserialize(), ElementId(), ElementIdExt(), IE_EXTENSION, ns3::Buffer::Iterator::IsEnd(), ns3::Buffer::Iterator::ReadU8(), and visualizer.core::start().

+ Here is the call graph for this function:

◆ DeserializeIfPresent() [2/2]

template<typename IE , typename... Args>
Buffer::Iterator ns3::WifiInformationElement::DeserializeIfPresent ( std::optional< IE > &  optElem,
Buffer::Iterator  i,
Args &&...  args 
)
static

Deserialize an entire IE (which may possibly be fragmented into multiple elements) that is optionally present.

The iterator passed in must be pointing at the Element ID of an information element. If the Element ID is not the requested one, the same iterator will be returned. Otherwise, an iterator pointing to the octet after the end of the information element is returned.

Template Parameters
IE[deduced] Information Element type
Args[deduced] type of the arguments to forward to the constructor of the IE
Parameters
[out]optEleman object that contains the information element, if present
ian iterator which points to where the IE should be read
argsarguments to forward to the constructor of the IE.
Returns
the input iterator, if the requested IE is not present, or an iterator pointing to the octet after the end of the information element, otherwise

Definition at line 432 of file wifi-information-element.h.

References trim-trailing-whitespace::args, ns3::Buffer::Iterator::GetDistanceFrom(), and visualizer.core::start().

Referenced by Deserialize(), ns3::dot11s::PeerLinkOpenStart::Deserialize(), ns3::dot11s::PeerLinkConfirmStart::Deserialize(), ns3::MgtReassocRequestHeader::Deserialize(), ns3::MgtAssocResponseHeader::Deserialize(), ns3::MgtProbeRequestHeader::Deserialize(), ns3::MgtProbeResponseHeader::Deserialize(), and ns3::MgtAssocRequestHeader::Deserialize().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ DeserializeInformationField()

virtual uint16_t ns3::WifiInformationElement::DeserializeInformationField ( Buffer::Iterator  start,
uint16_t  length 
)
privatepure virtual

◆ DoDeserialize()

Buffer::Iterator ns3::WifiInformationElement::DoDeserialize ( Buffer::Iterator  i,
uint16_t  length 
)
private

Deserialize the Information field of an IE.

Also handle the case in which the IE is fragmented.

Parameters
ian iterator which points to where the Information field should be read.
lengththe expected number of bytes to read
Returns
an iterator pointing to past the IE that was deserialized

Definition at line 178 of file wifi-information-element.cc.

References ns3::Buffer::AddAtEnd(), ns3::Buffer::AddAtStart(), ns3::Buffer::Begin(), DeserializeInformationField(), ElementId(), IE_EXTENSION, IE_FRAGMENT, ns3::Buffer::Iterator::IsEnd(), ns3::Buffer::Iterator::Next(), NS_ASSERT, ns3::Buffer::Iterator::PeekU8(), ns3::Buffer::Iterator::ReadU8(), and ns3::Buffer::Iterator::WriteU8().

Referenced by DeserializeIfPresent().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ElementId()

◆ ElementIdExt()

WifiInformationElementId ns3::WifiInformationElement::ElementIdExt ( ) const
virtual

Get the wifi information element ID extension.

Returns
the wifi information element ID extension

Reimplemented in ns3::EhtCapabilities, ns3::MultiLinkElement, ns3::HeCapabilities, ns3::HeOperation, ns3::MuEdcaParameterSet, and TestWifiInformationElement.

Definition at line 55 of file wifi-information-element.cc.

Referenced by DeserializeIfPresent(), operator==(), Serialize(), and SerializeFragments().

+ Here is the caller graph for this function:

◆ GetInformationFieldSize()

virtual uint16_t ns3::WifiInformationElement::GetInformationFieldSize ( ) const
privatepure virtual

◆ GetSerializedSize()

uint16_t ns3::WifiInformationElement::GetSerializedSize ( void  ) const

Get the size of the serialized IE including Element ID and length fields (for every element this IE is possibly fragmented into).

Returns
the size of the serialized IE in bytes

Definition at line 35 of file wifi-information-element.cc.

References GetInformationFieldSize().

Referenced by ns3::WifiInformationElementVector::AddInformationElement(), ns3::dot11s::PeerLinkOpenStart::GetSerializedSize(), ns3::dot11s::PeerLinkConfirmStart::GetSerializedSize(), ns3::MgtReassocRequestHeader::GetSerializedSize(), ns3::MgtAssocResponseHeader::GetSerializedSize(), ns3::MgtProbeRequestHeader::GetSerializedSize(), ns3::MgtProbeResponseHeader::GetSerializedSize(), ns3::MgtAssocRequestHeader::GetSerializedSize(), and WifiIeFragmentationTest::SerializeIntoBuffer().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ operator==()

bool ns3::WifiInformationElement::operator== ( WifiInformationElement const &  a) const
virtual

Compare two IEs for equality by ID & Length, and then through memcmp of serialised version.

Parameters
aanother information element to compare with
Returns
true if the two IEs are equal, false otherwise

Reimplemented in ns3::dot11s::IeBeaconTiming.

Definition at line 234 of file wifi-information-element.cc.

References ns3::Buffer::AddAtEnd(), ns3::Buffer::Begin(), ElementId(), ElementIdExt(), GetInformationFieldSize(), ns3::Buffer::PeekData(), and SerializeInformationField().

+ Here is the call graph for this function:

◆ Print()

void ns3::WifiInformationElement::Print ( std::ostream &  os) const
virtual

◆ Serialize()

Buffer::Iterator ns3::WifiInformationElement::Serialize ( Buffer::Iterator  i) const

◆ SerializeFragments()

Buffer::Iterator ns3::WifiInformationElement::SerializeFragments ( Buffer::Iterator  i,
uint16_t  size 
) const
private

Serialize an IE that needs to be fragmented.

Parameters
ian iterator which points to where the IE should be written.
sizethe size of the body of the IE
Returns
an iterator pointing to past the IE that was serialized

Definition at line 87 of file wifi-information-element.cc.

References ns3::Buffer::AddAtStart(), ns3::Buffer::Begin(), ElementId(), ElementIdExt(), IE_EXTENSION, IE_FRAGMENT, NS_ASSERT, ns3::Buffer::Iterator::ReadU8(), SerializeInformationField(), and ns3::Buffer::Iterator::WriteU8().

Referenced by Serialize().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ SerializeInformationField()


The documentation for this class was generated from the following files: