20 #include "ns3/fatal-error.h"
23 #include "ctrl-headers.h"
33 NS_OBJECT_ENSURE_REGISTERED (CtrlBAckRequestHeader);
35 CtrlBAckRequestHeader::CtrlBAckRequestHeader ()
36 : m_barAckPolicy (false),
43 CtrlBAckRequestHeader::~CtrlBAckRequestHeader ()
49 CtrlBAckRequestHeader::GetTypeId (
void)
52 static TypeId tid = TypeId (
"ns3::CtrlBAckRequestHeader")
54 .AddConstructor<CtrlBAckRequestHeader> ()
70 os <<
"TID_INFO=" << m_tidInfo <<
", StartingSeq=" << std::hex << m_startingSeq;
87 size += (2 + 2) * (m_tidInfo + 1);
145 CtrlBAckRequestHeader::GetBarControl (
void)
const
161 res |= (m_tidInfo << 12) & (0xf << 12);
166 CtrlBAckRequestHeader::SetBarControl (uint16_t bar)
170 m_multiTid = (((bar >> 1) & 0x01) == 1) ?
true :
false;
171 m_compressed = (((bar >> 2) & 0x01) == 1) ?
true :
false;
172 m_tidInfo = (bar >> 12) & 0x0f;
176 CtrlBAckRequestHeader::GetStartingSequenceControl (
void)
const
179 return (m_startingSeq << 4) & 0xfff0;
183 CtrlBAckRequestHeader::SetStartingSequenceControl (uint16_t seqControl)
186 m_startingSeq = (seqControl >> 4) & 0x0fff;
190 CtrlBAckRequestHeader::SetHtImmediateAck (
bool immediateAck)
197 CtrlBAckRequestHeader::SetType (
enum BlockAckType type)
202 case BASIC_BLOCK_ACK:
204 m_compressed =
false;
206 case COMPRESSED_BLOCK_ACK:
210 case MULTI_TID_BLOCK_ACK:
221 CtrlBAckRequestHeader::SetTidInfo (uint8_t tid)
224 m_tidInfo =
static_cast<uint16_t
> (tid);
228 CtrlBAckRequestHeader::SetStartingSequence (uint16_t seq)
235 CtrlBAckRequestHeader::MustSendHtImmediateAck (
void)
const
242 CtrlBAckRequestHeader::GetTidInfo (
void)
const
245 uint8_t tid =
static_cast<uint8_t
> (m_tidInfo);
250 CtrlBAckRequestHeader::GetStartingSequence (
void)
const
253 return m_startingSeq;
257 CtrlBAckRequestHeader::IsBasic (
void)
const
260 return (!m_multiTid && !m_compressed) ?
true :
false;
264 CtrlBAckRequestHeader::IsCompressed (
void)
const
267 return (!m_multiTid && m_compressed) ?
true :
false;
271 CtrlBAckRequestHeader::IsMultiTid (
void)
const
274 return (m_multiTid && m_compressed) ?
true :
false;
281 NS_OBJECT_ENSURE_REGISTERED (CtrlBAckResponseHeader);
283 CtrlBAckResponseHeader::CtrlBAckResponseHeader ()
284 : m_baAckPolicy (false),
289 memset (&bitmap, 0,
sizeof (bitmap));
292 CtrlBAckResponseHeader::~CtrlBAckResponseHeader ()
298 CtrlBAckResponseHeader::GetTypeId (
void)
300 static TypeId tid = TypeId (
"ns3::CtrlBAckResponseHeader")
301 .SetParent<Header> ()
302 .AddConstructor<CtrlBAckResponseHeader> ()
317 os <<
"TID_INFO=" << m_tidInfo <<
", StartingSeq=" << std::hex << m_startingSeq;
341 size += (2 + 2 + 8) * (m_tidInfo + 1);
360 i = SerializeBitmap (i);
384 i = DeserializeBitmap (i);
401 CtrlBAckResponseHeader::SetHtImmediateAck (
bool immediateAck)
408 CtrlBAckResponseHeader::SetType (
enum BlockAckType type)
413 case BASIC_BLOCK_ACK:
415 m_compressed =
false;
417 case COMPRESSED_BLOCK_ACK:
421 case MULTI_TID_BLOCK_ACK:
432 CtrlBAckResponseHeader::SetTidInfo (uint8_t tid)
435 m_tidInfo =
static_cast<uint16_t
> (tid);
439 CtrlBAckResponseHeader::SetStartingSequence (uint16_t seq)
446 CtrlBAckResponseHeader::MustSendHtImmediateAck (
void)
const
453 CtrlBAckResponseHeader::GetTidInfo (
void)
const
456 uint8_t tid =
static_cast<uint8_t
> (m_tidInfo);
461 CtrlBAckResponseHeader::GetStartingSequence (
void)
const
464 return m_startingSeq;
468 CtrlBAckResponseHeader::IsBasic (
void)
const
471 return (!m_multiTid && !m_compressed) ?
true :
false;
475 CtrlBAckResponseHeader::IsCompressed (
void)
const
478 return (!m_multiTid && m_compressed) ?
true :
false;
482 CtrlBAckResponseHeader::IsMultiTid (
void)
const
485 return (m_multiTid && m_compressed) ?
true :
false;
489 CtrlBAckResponseHeader::GetBaControl (
void)
const
505 res |= (m_tidInfo << 12) & (0xf << 12);
510 CtrlBAckResponseHeader::SetBaControl (uint16_t ba)
514 m_multiTid = (((ba >> 1) & 0x01) == 1) ?
true :
false;
515 m_compressed = (((ba >> 2) & 0x01) == 1) ?
true :
false;
516 m_tidInfo = (ba >> 12) & 0x0f;
520 CtrlBAckResponseHeader::GetStartingSequenceControl (
void)
const
523 return (m_startingSeq << 4) & 0xfff0;
527 CtrlBAckResponseHeader::SetStartingSequenceControl (uint16_t seqControl)
530 m_startingSeq = (seqControl >> 4) & 0x0fff;
534 CtrlBAckResponseHeader::SerializeBitmap (Buffer::Iterator start)
const
537 Buffer::Iterator i = start;
542 for (uint32_t j = 0; j < 64; j++)
544 i.WriteHtolsbU16 (bitmap.m_bitmap[j]);
549 i.WriteHtolsbU64 (bitmap.m_compressedBitmap);
567 CtrlBAckResponseHeader::DeserializeBitmap (Buffer::Iterator start)
570 Buffer::Iterator i = start;
575 for (uint32_t j = 0; j < 64; j++)
577 bitmap.m_bitmap[j] = i.ReadLsbtohU16 ();
582 bitmap.m_compressedBitmap = i.ReadLsbtohU64 ();
600 CtrlBAckResponseHeader::SetReceivedPacket (uint16_t seq)
617 bitmap.m_compressedBitmap |= (uint64_t (0x0000000000000001) <<
IndexInBitmap (seq));
634 CtrlBAckResponseHeader::SetReceivedFragment (uint16_t seq, uint8_t frag)
668 CtrlBAckResponseHeader::IsPacketReceived (uint16_t seq)
const
684 uint64_t mask = uint64_t (0x0000000000000001);
685 return (((bitmap.m_compressedBitmap >>
IndexInBitmap (seq)) & mask) == 1) ?
true :
false;
703 CtrlBAckResponseHeader::IsFragmentReceived (uint16_t seq, uint8_t frag)
const
715 return ((bitmap.m_bitmap[
IndexInBitmap (seq)] & (0x0001 << frag)) != 0x0000) ?
true :
false;
722 uint64_t mask = uint64_t (0x0000000000000001);
723 return (((bitmap.m_compressedBitmap >>
IndexInBitmap (seq)) & mask) == 1) ?
true :
false;
745 if (seq >= m_startingSeq)
747 index = seq - m_startingSeq;
751 index = 4096 - m_startingSeq + seq;
761 return (seq - m_startingSeq + 4096) % 4096 < 64;
765 CtrlBAckResponseHeader::GetBitmap (
void)
const
768 return bitmap.m_bitmap;
772 CtrlBAckResponseHeader::GetCompressedBitmap (
void)
const
775 return bitmap.m_compressedBitmap;
779 CtrlBAckResponseHeader::ResetBitmap (
void)
782 memset (&bitmap, 0,
sizeof (bitmap));
#define NS_LOG_FUNCTION(parameters)
#define NS_ASSERT(condition)
#define NS_LOG_COMPONENT_DEFINE(name)
#define NS_LOG_FUNCTION_NOARGS()
uint32_t GetDistanceFrom(Iterator const &o) const
#define NS_FATAL_ERROR(msg)
fatal error handling
iterator in a Buffer instance
void WriteHtolsbU16(uint16_t data)
uint16_t ReadLsbtohU16(void)