Headers for BlockAck response. More...
#include "ctrl-headers.h"
Classes | |
struct | BaInfoInstance |
The following structure can hold the BA Information field for the Basic and Compressed variants, one instance of the {Per TID Info, Block Ack Starting Sequence Control, Block Ack Bitmap} subfields for the Multi-TID variant or one instance of the Per AID TID Info subfield for the Multi-STA variant (which includes the AID TID Info, Block Ack Starting Sequence Control and Block Ack Bitmap subfields). More... | |
Public Member Functions | |
CtrlBAckResponseHeader () | |
~CtrlBAckResponseHeader () override | |
uint32_t | Deserialize (Buffer::Iterator start) override |
std::vector< uint32_t > | FindPerAidTidInfoWithAid (uint16_t aid) const |
For Multi-STA Block Acks, get the indices of the Per AID TID Info subfields carrying the given AID in the AID11 subfield. | |
bool | GetAckType (std::size_t index) const |
For Multi-STA Block Acks, get the Ack Type subfield of the Per AID TID Info subfield identified by the given index. | |
uint16_t | GetAid11 (std::size_t index) const |
For Multi-STA Block Acks, get the AID11 subfield of the Per AID TID Info subfield identified by the given index. | |
const std::vector< uint8_t > & | GetBitmap (std::size_t index=0) const |
Return a const reference to the bitmap from the BlockAck response header. | |
TypeId | GetInstanceTypeId () const override |
Get the most derived TypeId for this Object. | |
std::size_t | GetNPerAidTidInfoSubfields () const |
For Multi-STA Block Acks, get the number of Per AID TID Info subfields included in this Block Ack. | |
uint32_t | GetSerializedSize () const override |
uint16_t | GetStartingSequence (std::size_t index=0) const |
For Block Ack variants other than Multi-STA Block Ack, get the starting sequence number. | |
uint16_t | GetStartingSequenceControl (std::size_t index=0) const |
Return the value of the Starting Sequence Control subfield. | |
uint8_t | GetTidInfo (std::size_t index=0) const |
For Block Ack variants other than Multi-STA Block Ack, get the TID_INFO subfield of the BA Control field. | |
BlockAckType | GetType () const |
Return the block ack type ID. | |
Mac48Address | GetUnassociatedStaAddress (std::size_t index) const |
For Multi-STA Block Acks, get the RA subfield of the Per AID TID Info subfield (with AID11 subfield equal to 2045) identified by the given index to the given MAC address. | |
bool | IsBasic () const |
Check if the current BA policy is Basic Block Ack. | |
bool | IsCompressed () const |
Check if the current BA policy is Compressed Block Ack. | |
bool | IsExtendedCompressed () const |
Check if the current BA policy is Extended Compressed Block Ack. | |
bool | IsFragmentReceived (uint16_t seq, uint8_t frag) const |
Check if the packet with the given sequence number and fragment number was acknowledged in this BlockAck response. | |
bool | IsMultiSta () const |
Check if the BlockAck frame variant is Multi-STA Block Ack. | |
bool | IsMultiTid () const |
Check if the current BA policy is Multi-TID Block Ack. | |
bool | IsPacketReceived (uint16_t seq, std::size_t index=0) const |
Check if the packet with the given sequence number was acknowledged in this BlockAck response. | |
bool | MustSendHtImmediateAck () const |
Check if the current Ack Policy is immediate. | |
void | Print (std::ostream &os) const override |
void | ResetBitmap (std::size_t index=0) |
Reset the bitmap to 0. | |
void | Serialize (Buffer::Iterator start) const override |
void | SetAckType (bool type, std::size_t index) |
For Multi-STA Block Acks, set the Ack Type subfield of the Per AID TID Info subfield identified by the given index to the given value. | |
void | SetAid11 (uint16_t aid, std::size_t index) |
For Multi-STA Block Acks, set the AID11 subfield of the Per AID TID Info subfield identified by the given index to the given value. | |
void | SetHtImmediateAck (bool immediateAck) |
Enable or disable HT immediate Ack. | |
void | SetReceivedFragment (uint16_t seq, uint8_t frag) |
Set the bitmap that the packet with the given sequence number and fragment number was received. | |
void | SetReceivedPacket (uint16_t seq, std::size_t index=0) |
Record in the bitmap that the packet with the given sequence number was received. | |
void | SetStartingSequence (uint16_t seq, std::size_t index=0) |
For Block Ack variants other than Multi-STA Block Ack, set the starting sequence number to the given value. | |
void | SetStartingSequenceControl (uint16_t seqControl, std::size_t index=0) |
Set the Starting Sequence Control subfield with the given sequence control value. | |
void | SetTidInfo (uint8_t tid, std::size_t index=0) |
For Block Ack variants other than Multi-STA Block Ack, set the TID_INFO subfield of the BA Control field. | |
void | SetType (BlockAckType type) |
Set the block ack type. | |
void | SetUnassociatedStaAddress (const Mac48Address &ra, std::size_t index) |
For Multi-STA Block Acks, set the RA subfield of the Per AID TID Info subfield (with AID11 subfield equal to 2045) identified by the given index to the given MAC address. | |
Public Member Functions inherited from ns3::Header | |
~Header () override | |
virtual uint32_t | Deserialize (Buffer::Iterator start, Buffer::Iterator end) |
Deserialize the object from a buffer iterator. | |
Public Member Functions inherited from ns3::ObjectBase | |
virtual | ~ObjectBase () |
Virtual destructor. | |
void | GetAttribute (std::string name, AttributeValue &value, bool permissive=false) const |
Get the value of an attribute, raising fatal errors if unsuccessful. | |
bool | GetAttributeFailSafe (std::string name, AttributeValue &value) const |
Get the value of an attribute without raising errors. | |
void | SetAttribute (std::string name, const AttributeValue &value) |
Set a single attribute, raising fatal errors if unsuccessful. | |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
Set a single attribute without raising errors. | |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
Connect a TraceSource to a Callback with a context. | |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
Connect a TraceSource to a Callback without a context. | |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected with a context. | |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected without a context. | |
Static Public Member Functions | |
static TypeId | GetTypeId () |
Get the type ID. | |
Static Public Member Functions inherited from ns3::Header | |
static TypeId | GetTypeId () |
Get the type ID. | |
Static Public Member Functions inherited from ns3::Chunk | |
static TypeId | GetTypeId () |
Get the type ID. | |
Static Public Member Functions inherited from ns3::ObjectBase | |
static TypeId | GetTypeId () |
Get the type ID. | |
Private Member Functions | |
Buffer::Iterator | DeserializeBitmap (Buffer::Iterator start, std::size_t index=0) |
Deserialize bitmap from the given buffer. | |
uint16_t | GetBaControl () const |
Return the Block Ack control. | |
uint16_t | IndexInBitmap (uint16_t seq, std::size_t index=0) const |
This function is used to correctly index in both bitmap and compressed bitmap, one bit or one block of 16 bits respectively. | |
bool | IsInBitmap (uint16_t seq, std::size_t index=0) const |
Check if sequence number seq can be acknowledged in the bitmap. | |
Buffer::Iterator | SerializeBitmap (Buffer::Iterator start, std::size_t index=0) const |
Serialize bitmap to the given buffer. | |
void | SetBaControl (uint16_t ba) |
Set the Block Ack control. | |
Private Attributes | |
bool | m_baAckPolicy |
The LSB bit of the BA control field is used only for the HT (High Throughput) delayed block ack configuration. | |
std::vector< BaInfoInstance > | m_baInfo |
BA Information field. | |
BlockAckType | m_baType |
BA type. | |
uint16_t | m_tidInfo |
TID info (reserved if Multi-STA Block Ack) | |
Additional Inherited Members | |
Protected Member Functions inherited from ns3::ObjectBase | |
void | ConstructSelf (const AttributeConstructionList &attributes) |
Complete construction of ObjectBase; invoked by derived classes. | |
virtual void | NotifyConstructionCompleted () |
Notifier called once the ObjectBase is fully constructed. | |
Related Symbols inherited from ns3::ObjectBase | |
static TypeId | GetObjectIid () |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. | |
Headers for BlockAck response.
802.11n standard includes three types of BlockAck:
Definition at line 191 of file ctrl-headers.h.
ns3::CtrlBAckResponseHeader::CtrlBAckResponseHeader | ( | ) |
Definition at line 264 of file ctrl-headers.cc.
References ns3::BlockAckType::BASIC, and SetType().
|
override |
Definition at line 271 of file ctrl-headers.cc.
|
overridevirtual |
start | an iterator which points to where the header should read from. |
This method is used by Packet::RemoveHeader to re-create a header from the byte buffer of a packet. The data read is expected to match bit-for-bit the representation of this header in real networks.
Note that data is not actually removed from the buffer to which the iterator points. Both Packet::RemoveHeader() and Packet::PeekHeader() call Deserialize(), but only the RemoveHeader() has additional statements to remove the header bytes from the underlying buffer and associated metadata.
Implements ns3::Header.
Definition at line 382 of file ctrl-headers.cc.
References ns3::BlockAckType::BASIC, ns3::BlockAckType::COMPRESSED, DeserializeBitmap(), ns3::BlockAckType::EXTENDED_COMPRESSED, GetAckType(), GetAid11(), ns3::Buffer::Iterator::GetDistanceFrom(), ns3::Buffer::Iterator::GetRemainingSize(), GetTidInfo(), m_baInfo, m_baType, ns3::BlockAckType::m_bitmapLen, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, ns3::BlockAckType::MULTI_TID, NS_FATAL_ERROR, ns3::ReadFrom(), ns3::Buffer::Iterator::ReadLsbtohU16(), ns3::Buffer::Iterator::ReadLsbtohU32(), SetBaControl(), and SetStartingSequenceControl().
|
private |
Deserialize bitmap from the given buffer.
For Multi-STA Block Acks, index identifies the Per AID TID Info subfield whose bitmap has to be deserialized.
start | iterator pointing to the beginning of the buffer to read from. |
index | the index of the Per AID TID Info subfield (Multi-STA Block Ack only) |
Definition at line 872 of file ctrl-headers.cc.
References ns3::BlockAckType::BASIC, ns3::BlockAckType::COMPRESSED, ns3::BlockAckType::EXTENDED_COMPRESSED, m_baInfo, m_baType, ns3::BlockAckType::m_bitmapLen, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, ns3::BlockAckType::MULTI_TID, NS_ASSERT, NS_ASSERT_MSG, NS_FATAL_ERROR, and ns3::Buffer::Iterator::ReadU8().
Referenced by Deserialize().
std::vector< uint32_t > ns3::CtrlBAckResponseHeader::FindPerAidTidInfoWithAid | ( | uint16_t | aid | ) | const |
For Multi-STA Block Acks, get the indices of the Per AID TID Info subfields carrying the given AID in the AID11 subfield.
aid | the given AID |
Definition at line 617 of file ctrl-headers.cc.
References GetAid11(), m_baInfo, m_baType, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, and NS_ASSERT.
Referenced by MultiLinkMuTxTest::CheckBlockAck(), ns3::EhtFrameExchangeManager::GetEmlsrSwitchToListening(), and ns3::HeFrameExchangeManager::ReceiveMpdu().
bool ns3::CtrlBAckResponseHeader::GetAckType | ( | std::size_t | index | ) | const |
For Multi-STA Block Acks, get the Ack Type subfield of the Per AID TID Info subfield identified by the given index.
index | the index of the Per AID TID Info subfield |
Definition at line 586 of file ctrl-headers.cc.
References m_baInfo, m_baType, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, and NS_ASSERT.
Referenced by OfdmaAckSequenceTest::CheckResults(), Deserialize(), MultiStaCtrlBAckResponseHeaderTest::DoRun(), IsPacketReceived(), ns3::BlockAckManager::NotifyGotBlockAck(), and ns3::HeFrameExchangeManager::ReceiveMpdu().
uint16_t ns3::CtrlBAckResponseHeader::GetAid11 | ( | std::size_t | index | ) | const |
For Multi-STA Block Acks, get the AID11 subfield of the Per AID TID Info subfield identified by the given index.
index | the index of the Per AID TID Info subfield |
Definition at line 567 of file ctrl-headers.cc.
References m_baInfo, m_baType, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, and NS_ASSERT.
Referenced by Deserialize(), MultiStaCtrlBAckResponseHeaderTest::DoRun(), FindPerAidTidInfoWithAid(), GetUnassociatedStaAddress(), Print(), Serialize(), and SetUnassociatedStaAddress().
|
private |
Return the Block Ack control.
Definition at line 634 of file ctrl-headers.cc.
References ns3::BlockAckType::BASIC, ns3::BlockAckType::COMPRESSED, ns3::BlockAckType::EXTENDED_COMPRESSED, m_baAckPolicy, m_baType, m_tidInfo, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, ns3::BlockAckType::MULTI_TID, and NS_FATAL_ERROR.
Referenced by Serialize().
const std::vector< uint8_t > & ns3::CtrlBAckResponseHeader::GetBitmap | ( | std::size_t | index = 0 | ) | const |
Return a const reference to the bitmap from the BlockAck response header.
For Multi-STA Block Acks, return a const reference to the bitmap included in the Per AID TID Info subfield identified by index.
index | the index of the Per AID TID Info subfield (Multi-STA Block Ack only) |
Definition at line 1075 of file ctrl-headers.cc.
References m_baInfo, m_baType, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, NS_ASSERT, and NS_ASSERT_MSG.
Referenced by CtrlBAckResponseHeaderTest::DoRun(), MultiStaCtrlBAckResponseHeaderTest::DoRun(), and ns3::HeFrameExchangeManager::ReceiveMpdu().
|
overridevirtual |
Get the most derived TypeId for this Object.
This method is typically implemented by ns3::Object::GetInstanceTypeId but some classes which derive from ns3::ObjectBase directly have to implement it themselves.
Implements ns3::ObjectBase.
Definition at line 286 of file ctrl-headers.cc.
References GetTypeId().
std::size_t ns3::CtrlBAckResponseHeader::GetNPerAidTidInfoSubfields | ( | ) | const |
For Multi-STA Block Acks, get the number of Per AID TID Info subfields included in this Block Ack.
Definition at line 610 of file ctrl-headers.cc.
References m_baInfo, m_baType, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, and NS_ASSERT.
Referenced by OfdmaAckSequenceTest::CheckResults().
|
overridevirtual |
This method is used by Packet::AddHeader to store a header into the byte buffer of a packet. This method should return the number of bytes which are needed to store the full header data by Serialize.
Implements ns3::Header.
Definition at line 310 of file ctrl-headers.cc.
References ns3::BlockAckType::BASIC, ns3::BlockAckType::COMPRESSED, ns3::BlockAckType::EXTENDED_COMPRESSED, m_baType, ns3::BlockAckType::m_bitmapLen, m_tidInfo, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, ns3::BlockAckType::MULTI_TID, and NS_FATAL_ERROR.
Referenced by ns3::GetBlockAckSize().
uint16_t ns3::CtrlBAckResponseHeader::GetStartingSequence | ( | std::size_t | index = 0 | ) | const |
For Block Ack variants other than Multi-STA Block Ack, get the starting sequence number.
For Multi-STA Block Acks, get the starting sequence number in the Per AID TID Info subfield identified by the given index.
index | the index of the Per AID TID Info subfield (Multi-STA Block Ack only) |
Definition at line 519 of file ctrl-headers.cc.
References m_baInfo, m_baType, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, NS_ASSERT, and NS_ASSERT_MSG.
Referenced by MultiStaCtrlBAckResponseHeaderTest::DoRun(), and ns3::HeFrameExchangeManager::SendMultiStaBlockAck().
uint16_t ns3::CtrlBAckResponseHeader::GetStartingSequenceControl | ( | std::size_t | index = 0 | ) | const |
Return the value of the Starting Sequence Control subfield.
For Multi-STA Block Acks, index identifies the Per AID TID Info subfield whose Starting Sequence Control subfield has to be returned.
index | the index of the Per AID TID Info subfield (Multi-STA Block Ack only) |
Definition at line 703 of file ctrl-headers.cc.
References ns3::BlockAckType::COMPRESSED, m_baInfo, m_baType, ns3::BlockAckType::m_bitmapLen, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, NS_ABORT_MSG, NS_ASSERT, and NS_ASSERT_MSG.
Referenced by Serialize().
uint8_t ns3::CtrlBAckResponseHeader::GetTidInfo | ( | std::size_t | index = 0 | ) | const |
For Block Ack variants other than Multi-STA Block Ack, get the TID_INFO subfield of the BA Control field.
For Multi-STA Block Acks, get the TID subfield of the AID TID Info subfield of the Per AID TID Info subfield identified by the given index.
index | the index of the Per AID TID Info subfield (Multi-STA Block Ack only) |
Definition at line 499 of file ctrl-headers.cc.
References m_baInfo, m_baType, m_tidInfo, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, NS_ASSERT, and NS_ASSERT_MSG.
Referenced by OfdmaAckSequenceTest::CheckResults(), Deserialize(), MultiStaCtrlBAckResponseHeaderTest::DoRun(), ns3::GetTid(), IsPacketReceived(), ns3::BlockAckManager::NotifyGotBlockAck(), Print(), ns3::HeFrameExchangeManager::ReceiveMpdu(), and ns3::HtFrameExchangeManager::ReceiveMpdu().
BlockAckType ns3::CtrlBAckResponseHeader::GetType | ( | ) | const |
Return the block ack type ID.
Definition at line 460 of file ctrl-headers.cc.
References m_baType.
Referenced by MultiStaCtrlBAckResponseHeaderTest::DoRun().
|
static |
Get the type ID.
Definition at line 276 of file ctrl-headers.cc.
References ns3::TypeId::SetParent().
Referenced by GetInstanceTypeId().
Mac48Address ns3::CtrlBAckResponseHeader::GetUnassociatedStaAddress | ( | std::size_t | index | ) | const |
For Multi-STA Block Acks, get the RA subfield of the Per AID TID Info subfield (with AID11 subfield equal to 2045) identified by the given index to the given MAC address.
index | the index of the Per AID TID Info subfield |
Definition at line 602 of file ctrl-headers.cc.
References GetAid11(), m_baInfo, and NS_ASSERT.
Referenced by MultiStaCtrlBAckResponseHeaderTest::DoRun().
|
private |
This function is used to correctly index in both bitmap and compressed bitmap, one bit or one block of 16 bits respectively.
for more details see 7.2.1.8 in IEEE 802.11n/D4.00
seq | the sequence number |
index | the index of the Per AID TID Info subfield (Multi-STA Block Ack only) |
Definition at line 1033 of file ctrl-headers.cc.
References ns3::BlockAckType::BASIC, m_baInfo, m_baType, ns3::BlockAckType::m_bitmapLen, ns3::BlockAckType::m_variant, NS_ASSERT, and ns3::SEQNO_SPACE_SIZE.
Referenced by IsFragmentReceived(), IsPacketReceived(), SetReceivedFragment(), and SetReceivedPacket().
bool ns3::CtrlBAckResponseHeader::IsBasic | ( | ) | const |
Check if the current BA policy is Basic Block Ack.
Definition at line 529 of file ctrl-headers.cc.
References ns3::BlockAckType::BASIC, m_baType, and ns3::BlockAckType::m_variant.
Referenced by ns3::RecipientBlockAckAgreement::FillBlockAckBitmap(), and ns3::BlockAckManager::NotifyGotBlockAck().
bool ns3::CtrlBAckResponseHeader::IsCompressed | ( | ) | const |
Check if the current BA policy is Compressed Block Ack.
Definition at line 535 of file ctrl-headers.cc.
References ns3::BlockAckType::COMPRESSED, m_baType, and ns3::BlockAckType::m_variant.
Referenced by ns3::RecipientBlockAckAgreement::FillBlockAckBitmap(), and ns3::BlockAckManager::NotifyGotBlockAck().
bool ns3::CtrlBAckResponseHeader::IsExtendedCompressed | ( | ) | const |
Check if the current BA policy is Extended Compressed Block Ack.
Definition at line 541 of file ctrl-headers.cc.
References ns3::BlockAckType::EXTENDED_COMPRESSED, m_baType, and ns3::BlockAckType::m_variant.
Referenced by ns3::RecipientBlockAckAgreement::FillBlockAckBitmap(), and ns3::BlockAckManager::NotifyGotBlockAck().
bool ns3::CtrlBAckResponseHeader::IsFragmentReceived | ( | uint16_t | seq, |
uint8_t | frag ) const |
Check if the packet with the given sequence number and fragment number was acknowledged in this BlockAck response.
seq | the sequence number |
frag | the fragment number |
Definition at line 1002 of file ctrl-headers.cc.
References ns3::BlockAckType::BASIC, ns3::BlockAckType::COMPRESSED, ns3::BlockAckType::EXTENDED_COMPRESSED, IndexInBitmap(), IsInBitmap(), m_baInfo, m_baType, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, ns3::BlockAckType::MULTI_TID, NS_ASSERT, and NS_FATAL_ERROR.
|
private |
Check if sequence number seq can be acknowledged in the bitmap.
For Multi-STA Block Acks, check if sequence number seq can be acknowledged in the bitmap included in the Per AID TID Info subfield identified by index.
seq | the sequence number |
index | the index of the Per AID TID Info subfield (Multi-STA Block Ack only) |
Definition at line 1057 of file ctrl-headers.cc.
References ns3::BlockAckType::BASIC, m_baInfo, m_baType, ns3::BlockAckType::m_bitmapLen, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, NS_ASSERT, NS_ASSERT_MSG, and ns3::SEQNO_SPACE_SIZE.
Referenced by IsFragmentReceived(), IsPacketReceived(), SetReceivedFragment(), and SetReceivedPacket().
bool ns3::CtrlBAckResponseHeader::IsMultiSta | ( | ) | const |
Check if the BlockAck frame variant is Multi-STA Block Ack.
Definition at line 553 of file ctrl-headers.cc.
References m_baType, ns3::BlockAckType::m_variant, and ns3::BlockAckType::MULTI_STA.
Referenced by MultiLinkMuTxTest::CheckBlockAck(), OfdmaAckSequenceTest::CheckResults(), ns3::RecipientBlockAckAgreement::FillBlockAckBitmap(), ns3::EhtFrameExchangeManager::GetEmlsrSwitchToListening(), ns3::BlockAckManager::NotifyGotBlockAck(), ns3::HeFrameExchangeManager::ReceiveMpdu(), and OfdmaAckSequenceTest::Transmit().
bool ns3::CtrlBAckResponseHeader::IsMultiTid | ( | ) | const |
Check if the current BA policy is Multi-TID Block Ack.
Definition at line 547 of file ctrl-headers.cc.
References m_baType, ns3::BlockAckType::m_variant, and ns3::BlockAckType::MULTI_TID.
Referenced by ns3::RecipientBlockAckAgreement::FillBlockAckBitmap(), and ns3::BlockAckManager::NotifyGotBlockAck().
bool ns3::CtrlBAckResponseHeader::IsPacketReceived | ( | uint16_t | seq, |
std::size_t | index = 0 ) const |
Check if the packet with the given sequence number was acknowledged in this BlockAck response.
For Multi-STA Block Acks, index identifies the Per AID TID Info subfield whose bitmap has to be checked.
seq | the sequence number to be checked |
index | the index of the Per AID TID Info subfield (Multi-STA Block Ack only) |
Definition at line 963 of file ctrl-headers.cc.
References ns3::BlockAckType::BASIC, ns3::BlockAckType::COMPRESSED, ns3::BlockAckType::EXTENDED_COMPRESSED, GetAckType(), GetTidInfo(), IndexInBitmap(), IsInBitmap(), m_baInfo, m_baType, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, ns3::BlockAckType::MULTI_TID, NS_ASSERT, NS_ASSERT_MSG, and NS_FATAL_ERROR.
Referenced by MultiLinkMuTxTest::CheckBlockAck(), MultiLinkTxTest::CheckBlockAck(), CtrlBAckResponseHeaderTest::DoRun(), and ns3::BlockAckManager::NotifyGotBlockAck().
bool ns3::CtrlBAckResponseHeader::MustSendHtImmediateAck | ( | ) | const |
Check if the current Ack Policy is immediate.
Definition at line 493 of file ctrl-headers.cc.
References m_baAckPolicy.
|
overridevirtual |
os | output stream This method is used by Packet::Print to print the content of a header as ascii data to a c++ output stream. Although the header is free to format its output as it wishes, it is recommended to follow a few rules to integrate with the packet pretty printer: start with flags, small field values located between a pair of parens. Values should be separated by whitespace. Follow the parens with the important fields, separated by whitespace. i.e.: (field1 val1 field2 val2 field3 val3) field4 val4 field5 val5 |
Implements ns3::Header.
Definition at line 292 of file ctrl-headers.cc.
References GetAid11(), GetTidInfo(), m_baInfo, m_baType, m_tidInfo, ns3::BlockAckType::m_variant, and ns3::BlockAckType::MULTI_STA.
void ns3::CtrlBAckResponseHeader::ResetBitmap | ( | std::size_t | index = 0 | ) |
Reset the bitmap to 0.
For Multi-STA Block Acks, reset the bitmap included in the Per AID TID Info subfield identified by index.
index | the index of the Per AID TID Info subfield (Multi-STA Block Ack only) |
Definition at line 1085 of file ctrl-headers.cc.
References m_baInfo, m_baType, ns3::BlockAckType::m_bitmapLen, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, NS_ASSERT, and NS_ASSERT_MSG.
Referenced by CtrlBAckResponseHeaderTest::DoRun(), and ns3::RecipientBlockAckAgreement::FillBlockAckBitmap().
|
overridevirtual |
start | an iterator which points to where the header should be written. |
This method is used by Packet::AddHeader to store a header into the byte buffer of a packet. The data written is expected to match bit-for-bit the representation of this header in a real network.
Implements ns3::Header.
Definition at line 340 of file ctrl-headers.cc.
References ns3::BlockAckType::BASIC, ns3::BlockAckType::COMPRESSED, ns3::BlockAckType::EXTENDED_COMPRESSED, GetAid11(), GetBaControl(), GetStartingSequenceControl(), m_baInfo, m_baType, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, ns3::BlockAckType::MULTI_TID, NS_FATAL_ERROR, SerializeBitmap(), ns3::Buffer::Iterator::WriteHtolsbU16(), ns3::Buffer::Iterator::WriteHtolsbU32(), and ns3::WriteTo().
|
private |
Serialize bitmap to the given buffer.
For Multi-STA Block Acks, index identifies the Per AID TID Info subfield whose bitmap has to be serialized.
start | iterator pointing to the beginning of the buffer to write into. |
index | the index of the Per AID TID Info subfield (Multi-STA Block Ack only) |
Definition at line 843 of file ctrl-headers.cc.
References ns3::BlockAckType::BASIC, ns3::BlockAckType::COMPRESSED, ns3::BlockAckType::EXTENDED_COMPRESSED, m_baInfo, m_baType, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, ns3::BlockAckType::MULTI_TID, NS_ASSERT, NS_ASSERT_MSG, NS_FATAL_ERROR, and ns3::Buffer::Iterator::WriteU8().
Referenced by Serialize().
void ns3::CtrlBAckResponseHeader::SetAckType | ( | bool | type, |
std::size_t | index ) |
For Multi-STA Block Acks, set the Ack Type subfield of the Per AID TID Info subfield identified by the given index to the given value.
type | the ack type value |
index | the index of the Per AID TID Info subfield |
Definition at line 575 of file ctrl-headers.cc.
References m_baInfo, m_baType, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, and NS_ASSERT.
Referenced by ns3::HeFrameExchangeManager::SendMultiStaBlockAck().
void ns3::CtrlBAckResponseHeader::SetAid11 | ( | uint16_t | aid, |
std::size_t | index ) |
For Multi-STA Block Acks, set the AID11 subfield of the Per AID TID Info subfield identified by the given index to the given value.
aid | the AID11 value |
index | the index of the Per AID TID Info subfield |
Definition at line 559 of file ctrl-headers.cc.
References m_baInfo, m_baType, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, and NS_ASSERT.
Referenced by ns3::HeFrameExchangeManager::SendMultiStaBlockAck().
|
private |
Set the Block Ack control.
ba | the BA control to set |
Definition at line 669 of file ctrl-headers.cc.
References ns3::BlockAckType::BASIC, ns3::BlockAckType::COMPRESSED, ns3::BlockAckType::EXTENDED_COMPRESSED, m_baAckPolicy, m_baType, m_tidInfo, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, ns3::BlockAckType::MULTI_TID, NS_FATAL_ERROR, and SetType().
Referenced by Deserialize().
void ns3::CtrlBAckResponseHeader::SetHtImmediateAck | ( | bool | immediateAck | ) |
Enable or disable HT immediate Ack.
immediateAck | enable or disable HT immediate Ack |
Definition at line 437 of file ctrl-headers.cc.
References m_baAckPolicy.
void ns3::CtrlBAckResponseHeader::SetReceivedFragment | ( | uint16_t | seq, |
uint8_t | frag ) |
Set the bitmap that the packet with the given sequence number and fragment number was received.
seq | the sequence number |
frag | the fragment number |
Definition at line 935 of file ctrl-headers.cc.
References ns3::BlockAckType::BASIC, ns3::BlockAckType::COMPRESSED, ns3::BlockAckType::EXTENDED_COMPRESSED, IndexInBitmap(), IsInBitmap(), m_baInfo, m_baType, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, ns3::BlockAckType::MULTI_TID, NS_ASSERT, and NS_FATAL_ERROR.
void ns3::CtrlBAckResponseHeader::SetReceivedPacket | ( | uint16_t | seq, |
std::size_t | index = 0 ) |
Record in the bitmap that the packet with the given sequence number was received.
For Multi-STA Block Acks, index identifies the Per AID TID Info subfield whose bitmap has to be updated.
seq | the sequence number of the received packet |
index | the index of the Per AID TID Info subfield (Multi-STA Block Ack only) |
Definition at line 901 of file ctrl-headers.cc.
References ns3::BlockAckType::BASIC, ns3::BlockAckType::COMPRESSED, ns3::BlockAckType::EXTENDED_COMPRESSED, IndexInBitmap(), IsInBitmap(), m_baInfo, m_baType, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, ns3::BlockAckType::MULTI_TID, NS_ASSERT, NS_ASSERT_MSG, and NS_FATAL_ERROR.
Referenced by CtrlBAckResponseHeaderTest::DoRun(), and ns3::RecipientBlockAckAgreement::FillBlockAckBitmap().
void ns3::CtrlBAckResponseHeader::SetStartingSequence | ( | uint16_t | seq, |
std::size_t | index = 0 ) |
For Block Ack variants other than Multi-STA Block Ack, set the starting sequence number to the given value.
For Multi-STA Block Acks, set the starting sequence number in the Per AID TID Info subfield identified by the given index to the given value.
seq | the starting sequence number |
index | the index of the Per AID TID Info subfield (Multi-STA Block Ack only) |
Definition at line 483 of file ctrl-headers.cc.
References m_baInfo, m_baType, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, NS_ASSERT, and NS_ASSERT_MSG.
Referenced by CtrlBAckResponseHeaderTest::DoRun(), and ns3::RecipientBlockAckAgreement::FillBlockAckBitmap().
void ns3::CtrlBAckResponseHeader::SetStartingSequenceControl | ( | uint16_t | seqControl, |
std::size_t | index = 0 ) |
Set the Starting Sequence Control subfield with the given sequence control value.
For Multi-STA Block Acks, index identifies the Per AID TID Info subfield whose Starting Sequence Control subfield has to be set.
seqControl | the raw sequence control value |
index | the index of the Per AID TID Info subfield (Multi-STA Block Ack only) |
Definition at line 768 of file ctrl-headers.cc.
References ns3::BlockAckType::COMPRESSED, m_baInfo, m_baType, ns3::BlockAckType::m_bitmapLen, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, NS_ABORT_MSG, NS_ASSERT, NS_ASSERT_MSG, NS_FATAL_ERROR, and SetType().
Referenced by Deserialize().
void ns3::CtrlBAckResponseHeader::SetTidInfo | ( | uint8_t | tid, |
std::size_t | index = 0 ) |
For Block Ack variants other than Multi-STA Block Ack, set the TID_INFO subfield of the BA Control field.
For Multi-STA Block Acks, set the TID subfield of the AID TID Info subfield of the Per AID TID Info subfield identified by the given index.
tid | the traffic ID |
index | the index of the Per AID TID Info subfield (Multi-STA Block Ack only) |
Definition at line 466 of file ctrl-headers.cc.
References m_baInfo, m_baType, m_tidInfo, ns3::BlockAckType::m_variant, ns3::BlockAckType::MULTI_STA, NS_ASSERT, and NS_ASSERT_MSG.
Referenced by ns3::HtFrameExchangeManager::SendBlockAck(), and ns3::HeFrameExchangeManager::SendMultiStaBlockAck().
void ns3::CtrlBAckResponseHeader::SetType | ( | BlockAckType | type | ) |
Set the block ack type.
type | the BA type |
Definition at line 443 of file ctrl-headers.cc.
References ns3::CtrlBAckResponseHeader::BaInfoInstance::m_aidTidInfo, m_baInfo, m_baType, and ns3::BlockAckType::m_bitmapLen.
Referenced by CtrlBAckResponseHeader(), CtrlBAckResponseHeaderTest::DoRun(), MultiStaCtrlBAckResponseHeaderTest::DoRun(), ns3::GetBlockAckSize(), ns3::HtFrameExchangeManager::SendBlockAck(), ns3::HeFrameExchangeManager::SendMultiStaBlockAck(), SetBaControl(), and SetStartingSequenceControl().
void ns3::CtrlBAckResponseHeader::SetUnassociatedStaAddress | ( | const Mac48Address & | ra, |
std::size_t | index ) |
For Multi-STA Block Acks, set the RA subfield of the Per AID TID Info subfield (with AID11 subfield equal to 2045) identified by the given index to the given MAC address.
ra | the MAC address |
index | the index of the Per AID TID Info subfield |
Definition at line 594 of file ctrl-headers.cc.
References GetAid11(), m_baInfo, and NS_ASSERT.
|
private |
The LSB bit of the BA control field is used only for the HT (High Throughput) delayed block ack configuration.
For now only non HT immediate block ack is implemented so this field is here only for a future implementation of HT delayed variant. BA Ack Policy
Definition at line 518 of file ctrl-headers.h.
Referenced by GetBaControl(), MustSendHtImmediateAck(), SetBaControl(), and SetHtImmediateAck().
|
private |
BA Information field.
Definition at line 541 of file ctrl-headers.h.
Referenced by Deserialize(), DeserializeBitmap(), FindPerAidTidInfoWithAid(), GetAckType(), GetAid11(), GetBitmap(), GetNPerAidTidInfoSubfields(), GetStartingSequence(), GetStartingSequenceControl(), GetTidInfo(), GetUnassociatedStaAddress(), IndexInBitmap(), IsFragmentReceived(), IsInBitmap(), IsPacketReceived(), Print(), ResetBitmap(), Serialize(), SerializeBitmap(), SetAckType(), SetAid11(), SetReceivedFragment(), SetReceivedPacket(), SetStartingSequence(), SetStartingSequenceControl(), SetTidInfo(), SetType(), and SetUnassociatedStaAddress().
|
private |
BA type.
Definition at line 519 of file ctrl-headers.h.
Referenced by Deserialize(), DeserializeBitmap(), FindPerAidTidInfoWithAid(), GetAckType(), GetAid11(), GetBaControl(), GetBitmap(), GetNPerAidTidInfoSubfields(), GetSerializedSize(), GetStartingSequence(), GetStartingSequenceControl(), GetTidInfo(), GetType(), IndexInBitmap(), IsBasic(), IsCompressed(), IsExtendedCompressed(), IsFragmentReceived(), IsInBitmap(), IsMultiSta(), IsMultiTid(), IsPacketReceived(), Print(), ResetBitmap(), Serialize(), SerializeBitmap(), SetAckType(), SetAid11(), SetBaControl(), SetReceivedFragment(), SetReceivedPacket(), SetStartingSequence(), SetStartingSequenceControl(), SetTidInfo(), and SetType().
|
private |
TID info (reserved if Multi-STA Block Ack)
Definition at line 520 of file ctrl-headers.h.
Referenced by GetBaControl(), GetSerializedSize(), GetTidInfo(), Print(), SetBaControl(), and SetTidInfo().